Bank Management System (Spring Boot)
Overview
This project documents the Bank Management System, which began as a simple monolithic Spring Boot web application and was evolved into a modern, production-ready, multi-container system. The architecture now features a decoupled static frontend (Vite + Tailwind CSS), a robust Spring Boot backend, and an Nginx reverse proxy, all orchestrated with Docker Compose. The system simulates core banking functionalities including user management (Manager, Staff, Customer), account management, loan/FD applications, and grievance filing.
To gain experience with modern DevOps practices, Nginx, and a decoupled frontend, the architecture was evolved into a multi-container system.
Features
- Decoupled Frontend: Static landing page built with Vite and Tailwind CSS.
- Powerful Backend: Spring Boot application handles all business logic.
- Role-Based Access Control: Distinct views and permissions for Manager, Staff, and Customer.
- Secure Login: Spring Security with form-based, session-cookie authentication.
- Responsive UI: Dynamic interface built with Thymeleaf, fully responsive.
Architecture
The system consists of three main services:
- Nginx Reverse Proxy (nginx service): Single entry point, serves static landing page, routes app requests to backend, handles SSL/TLS termination.
- Frontend (frontend service): Static site (Vite + Tailwind CSS) served by Nginx, with a Login button linking to backend.
- Backend (backend service): Spring Boot app following Clean Code Architecture, with layers for presentation, application, domain, persistence, and security.
Production Deployment
- All containers run on a GCP Compute Engine VM.
- Database is a managed Aiven for PostgreSQL instance.
- VM firewall allows ports 80/443; backend connects securely to Cloud SQL.
Key Workflows
- Manager Seed: Initial Manager user/password created via
data.sql. - Staff Creation: Manager logs in → creates Staff user (username/password).
- Customer & Account Creation: Staff logs in → fills form for Customer + Account → system creates disabled User, inactive Customer, and PENDING_APPROVAL Account.
- Account Approval: Manager logs in → approves pending accounts → sets Account to ACTIVE, Customer to active, User to enabled.
- Customer Login: Customer logs in with credentials set by Staff.
- Loan/FD Application: Customer applies for Loan/FD → status is PENDING.
- Loan/FD Approval: Manager approves/rejects → status updated, Customer sees status.
- Grievance: Customer files grievance → status is PENDING, Staff/Manager can resolve, Customer sees status.