Skip to content

hyeongirlife/bank-core

Repository files navigation

🏦 bank-core

예금 계좌 관리 및 대출 금리 산출 시스템

수신(예금/송금/이자)과 여신(금리 산출) 핵심 업무를 구현하고,
동시성 환경에서의 트랜잭션 정합성을 검증하는 프로젝트입니다.

Kotlin Spring Boot MySQL Redis Kubernetes


📐 아키텍처

┌──────────────────────────────────────────────┐
│                 EKS Cluster                  │
│                                              │
│   ┌──────────────┐     ┌─────────────────┐   │
│   │  bank-core   │     │ interest-batch  │   │
│   │   API Pod    │     │    CronJob      │   │
│   └──────┬───────┘     └────────┬────────┘   │
│          │                      │            │
│   ┌──────▼──────────────────────▼─────────┐  │
│   │      MySQL (StatefulSet + PVC)        │  │
│   └───────────────────────────────────────┘  │
│   ┌───────────────────────────────────────┐  │
│   │      Redis (분산 락)                   │  │
│   └───────────────────────────────────────┘  │
└──────────────────────────────────────────────┘

✨ 주요 기능

💰 수신 (Savings)

  • 예금 계좌 개설 / 조회 / 해지
  • 계좌 간 송금 (단일 트랜잭션)
  • 일별 이자 계산 배치
  • 단리 / 복리 / 중도해지 이자
  • 멱등성 키 기반 재처리

📊 여신 (Loan)

  • 금리 산출 엔진
    • 기준금리
    • 가산금리
    • 우대금리
  • BigDecimal 정밀 계산
  • 원단위 절사 처리

🔒 트랜잭션 정합성

  • 동시 송금 잔액 일관성
  • 비관적 락 (FOR UPDATE)
  • 낙관적 락 (@Version)
  • 분산 락 (Redis)
  • 전략별 TPS 벤치마크

🗂️ 프로젝트 구조

bank-core/
├── app-api/            # REST API (계좌, 금리, 송금)
├── app-batch/          # 이자 계산 배치
├── domain/             # 엔티티, 리포지토리, 도메인 로직
├── common/             # BigDecimal 유틸, 공통 예외
├── infra/
│   └── k8s/            # Kubernetes 매니페스트
├── docker-compose.yml
└── build.gradle.kts

🚀 로컬 실행

# 1. 인프라 실행
docker-compose up -d

# 2. API 서버 실행
./gradlew :app-api:bootRun

# 3. 테스트
./gradlew test

📡 API

Method Endpoint 설명
POST /api/accounts 계좌 개설
GET /api/accounts/{id} 계좌 조회
POST /api/accounts/{id}/close 계좌 해지
POST /api/transfers 송금
GET /api/accounts/{id}/transactions 거래 내역 조회
POST /api/rates/calculate 금리 산출

📈 트랜잭션 벤치마크

🚧 구현 후 실측 데이터로 업데이트 예정

전략 TPS 정합성 적합한 환경
락 없음 - -
비관적 락 - 충돌이 빈번한 환경
낙관적 락 - 충돌이 드문 환경
분산 락 - 멀티 인스턴스 환경

🔀 브랜치 전략

main ← development ← feature/worktree
브랜치 용도
main 배포 가능한 안정 버전
development 개발 통합 브랜치
feature/* worktree 기반 기능 개발

🛠️ 배포

GitHub Actions (OIDC) → ECR → EKS
# 수동 배포
kubectl apply -f infra/k8s/

Made with ☕ by @hyeongirlife

About

예금 계좌 관리 및 대출 금리 산출 시스템

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages