Skip to content

Repository files navigation

Corebank Server

계정계 코어뱅킹 서버. 고객·계좌·원장·이체·상품/상품가입·한도 도메인을 헥사고날 아키텍처로 구성하고, 레이어 의존 방향을 ArchUnit으로 검증합니다.

신한DS 금융SW 풀스택 개발자 양성 과정 7기 팀 프로젝트 · 6인


Tech Stack

구분 사용 기술
Language Java 21
Framework Spring Boot 4.0.7, Spring Web MVC, Spring Security, Validation
Persistence Spring Data JPA, Querydsl, MySQL, Flyway
Cache / Infra Redis, Docker Compose
Test JUnit 5, Testcontainers(MySQL), ArchUnit
Ops Spring Boot Actuator, GitHub Actions
Build Gradle

Architecture

도메인별로 adapter(in) → application → domain ← adapter(out) 계층을 두고, domain은 어떤 바깥 계층도 참조하지 않습니다.

src/main/java/com/shinhan/corebank/
├── customer/          고객
├── auth/              인증
├── otp/               OTP
├── account/           계좌
├── transfer/          이체
├── autotransfer/      자동이체
├── scheduledtransfer/ 예약이체
├── product/           상품
├── subscription/      상품가입
├── terms/             약관
├── signup/            가입
├── limit/             한도
├── batch/             배치
├── adapter/           공통 예외 핸들러 등 전역 어댑터
└── common/            공통(응답 규격 · 오류코드 · 설정)

각 도메인은 대체로 아래 구조를 따릅니다.

<domain>/
├── adapter/in/web/  컨트롤러 · 요청/응답 DTO
├── application/     유스케이스(service) · 포트 인터페이스(port)
├── domain/          도메인 모델 (외부 의존 없음)
├── adapter/out/     JPA 엔티티 · Repository 구현 · 외부 어댑터
└── api/             다른 도메인에 공개하는 계약 (포트 인터페이스 · Command · DTO)

api/는 컨트롤러 자리가 아니라 도메인 간 계약 패키지입니다. 다른 도메인은 limit.api.TransferLimitProvider처럼 이 패키지를 통해서만 접근하고, 상대 도메인의 application·domain·adapter를 직접 참조하지 않습니다. 그래서 api/는 바깥에서 호출할 일이 있는 도메인에만 있습니다 — customer account limit otp terms auth signup 일곱 개입니다. 배경은 ADR 0002를 참고하세요.

의존 방향은 ArchUnit 테스트로 검증합니다. 계층 방향 규칙(LayerArchitectureTest)이 13개 도메인 전체에 걸려 있고, api/·config/는 다른 계층을 참조하지 않는 leaf 계층으로 검증합니다 — 같은 도메인 안에서 계약 패키지가 내부를 끌어오면 실패합니다. 도메인 간 참조는 아직 이 규칙 밖입니다(#359). terms에는 "외부는 terms.api로만 접근" 규칙(TermsArchitectureTest)이 추가로 걸려 있습니다.

아직 구조를 다 갖추지 않은 도메인도 있습니다. termsapi/adapter/out/만 있고, batchdomain/ 없이 application/adapter/로만 구성됩니다.

상세: 헥사고날 아키텍처 가이드

Getting Started

Prerequisites

  • Java 21 (Gradle 데몬이 gradle/gradle-daemon-jvm.properties로 21에 고정됩니다)

  • Docker / Docker Compose (MySQL · Redis)

  • gitleaks (커밋 전 자격증명 검사용, pre-commit 훅에서 사용)

    # macOS
    brew install gitleaks
    
    # Windows
    winget install Gitleaks.Gitleaks

Git Hooks

clone 후 한 번만 실행합니다. core.hooksPath.githooks로 설정해 pre-commit 검사를 활성화합니다.

./scripts/install-hooks.sh

Run

# 1. 인프라 기동 (MySQL, Redis)
docker compose up -d minicore-mysql minicore-redis

# 2. 스키마 마이그레이션 + 애플리케이션 실행
./gradlew bootRun

docker-compose.yml에는 배포용 corebank-server 서비스도 함께 정의되어 있습니다. 로컬에서는 위처럼 인프라 두 개만 지정해 띄웁니다.

Test

./gradlew test          # 단위 · 통합(Testcontainers) · ArchUnit 전체

API 문서는 기동 후 http://localhost:8080/api/v1/swagger-ui/index.html에서 확인합니다. (Swagger UI 가이드)

Database

Flyway로 스키마를 버전 관리합니다. 마이그레이션 파일은 src/main/resources/db/migration에 있습니다.

초기 스키마는 도메인 단위로 나눠 두었습니다.

파일 내용
V...create_customer_auth.sql 고객 · 인증
V...create_product.sql 상품
V...create_account.sql 계좌
V...create_ledger.sql 원장
V...create_transfer_ext.sql 이체
V...create_limit.sql 한도
V...create_subscription.sql 상품가입
V...create_commoncode.sql 공통코드
V...create_infra.sql 인프라 공통
V...partition_maintenance.sql 파티션 관리
R__seed_master_data.sql 마스터 시드 데이터 (반복 실행)

이후 스키마 변경은 add_* · alter_* · drop_* 형태의 증분 파일로 쌓입니다. 파일명 규칙과 V__/R__ 구분은 아래 문서를 따릅니다.

Conventions

팀 전체가 참조하는 규약 문서입니다. 새로 합류하면 앞의 세 개를 먼저 읽어주세요.

문서 내용
api_conventions.md 공통 응답 형식 · 엔드포인트 명명
error_handling_guide.md 오류코드 마스터 · 예외 처리
hexagonal_architecture_guide.md 레이어 책임 · 의존 방향
team_collaboration_guide.md 브랜치 · PR · 코드리뷰
team_db_setup_guide.md 로컬 DB 세팅
team_db_architecture_guide.md DB 아키텍처
redis_setup_guide.md Redis 세팅
otp_integration_guide.md OTP 연동

코드 포맷

Spotless + Palantir Java Format으로 서식을 자동 통일합니다. 들여쓰기 공백 4칸, 최대 120자입니다. 커밋 전에 실행해 주세요.

./gradlew spotlessApply

CI에서 spotlessCheck가 실패하면 위 명령을 실행하고 다시 커밋하면 됩니다. IDE는 .editorconfig를 자동으로 따르므로 별도 설정이 필요 없습니다. 정렬을 유지해야 하는 구간은 // spotless:off ~ // spotless:on으로 감싸세요.

일괄 포맷 커밋이 git blame을 가리지 않도록 최초 1회 설정합니다.

git config blame.ignoreRevsFile .git-blame-ignore-revs

ADR

설계 결정과 그 근거를 기록합니다.

CI / CD

워크플로 역할
corebank.yml PR · push 시 빌드 · 테스트 / main push 시 EC2 배포
pr_agent.yml PR 자동 리뷰 (가이드)

기본 브랜치는 dev이고 평소 PR은 dev로 보냅니다. main에 머지되면 corebank.yml이 Docker 이미지를 빌드해 EC2에 배포하므로, main 머지는 곧 배포입니다.

About

server for corebank

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages