← 输入框|github.com|刷新
Skip to content
jun-bankPublic

About

jun-bank 시스템 설계 문서 — 제품 정의, 도메인 모델, 아키텍처(SAD/ADR), 계약, 규약

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

jun-bank 설계 문서

jun-bank 시스템의 단일 설계 출처. 각 서비스 저장소의 README는 "그 서비스를 어떻게 돌리나"만 다루고, "왜 그렇게 설계했나"는 전부 여기에 있다.

★ 세션 인계·현황의 정본은 HANDOFF.md다. 이 문서는 무엇이 어디 있나(지도)를 맡고, HANDOFF.md는 지금 무엇을 하는 중이고 무엇을 되돌리면 안 되나를 맡는다. 두 문서가 갈리면 HANDOFF가 이긴다.


지금 어디까지 왔는가

Phase 1 ✅ ── 2 ✅ ── 3 ✅ ── 4 ✅ ── 5 ⏳ ── 6 ⬜
                                     ▲
                                 현재 위치
Phase 이름 상태 산출물
0 문서 체계 준비 ⏭ 건너뜀 Phase 6에서 함께 정리한다
1 제품 정의 ✅ product/ — 제품 정의서 · 업무 규칙 BR-01~61(불일치 유형표 포함)
2 도메인 정의 ✅ domain/ — 용어집 · 컨텍스트 맵 8종(C1C8) · 관계 R1R20 · 애그리게이트 16종 · 상태 머신 11종 · 트랜잭션 경계 E1~E5
3 아키텍처 설계 ✅ architecture/ — ADR 32건(ADR-001032 — ADR-019030에서 채널·라우팅·이벤트 전송·DB 토폴로지·관측·릴리스·공통 라이브러리·데이터 접근·배포 오케스트레이션·언어 선택·내부 아키텍처·배포물 전달을 확정) · 품질 속성(채택 6·포기 6) · 품질 시나리오 · 제약 · 뷰 4종
★ 멀티테넌시 설계 변경 ✅ (2026-08-05) C8 운영 승격 · BR-5458 · ADR-016018 · M18 · 듀얼 리뷰 3루프
4 유스케이스·기능 명세 ✅ (2026-08-06) usecases/ — UC-01~20 전수 · 계약 전수 패스(§7 전 칸 · 공통 규약 K-1~4) · 엔드포인트·이벤트 색인. ⚠️ ★ C7 관리 API는 이 전수에 없다 — 명시 이월(아래 행)
★ C7 신원·조직 명세 ✅ 모델 / ⬜ 관리 API (2026-08-06) 운영자·조직·권한 부여 모델 — BR-59~61 신설 · BR-55 AUDITOR 완전 분리 · BR-56 ⑥ · 애그리게이트 4종·SM 2종 · R19. ★ 리뷰 루프 1 반영 완료(L1-01~28). ⚠️ UC·계약(엔드포인트)은 후속 패스로 이월됐다 — 조직·운영자·권한·회원의 관리 표면이 아직 없고, 그동안 BR-58 전수 시험의 입력(엔드포인트 색인)이 불완전하다(usecases/README.md §2 이월 행)
5 샘플 구현 + 실험 38건 ⏳ 진행 중 문서가 요구한 것이 실제로 성립하는지를 코드로 친다. 지금까지: ⑴ 인프라 배포 파이프라인(infra repo · Go) — deploy-agent 게이트1(HMAC 서명·멱등) · 게이트2(OIDC claim 행렬 + JWKS 실 페치) · dispatch(pull·compose up·CD-1 헬스) · 배포 창 락(fencing·lease) · 모드(dev/운영 fail-closed) · 이력. S0·S2 마일스톤. ⑵ 워킹 스켈레톤(현재 활성) — 최소 Kotlin/Spring 서비스 3 + Spring Cloud Gateway → docker compose 라우팅 실증 → 첫 실배포 예정
6 개발 규약 정비 ⬜ Phase 0에서 미룬 문서 체계 규약을 여기서 함께 확정

다음 한 걸음(Phase 5 진행 중): ① 워킹 스켈레톤 라우팅 실증 — 최소 서비스 3 + Spring Cloud Gateway를 docker compose로 띄워 라우팅을 확인한다 ② 첫 실배포 — 인프라 배포 파이프라인으로 스켈레톤을 실제로 배포한다 ③ 배포 파이프라인·JWKS e2e [구현 검증] 해소 — 문서가 이연한 판정(IV 대장 implementation-verification.md)을 실 배포·인증 흐름으로 실증한다 ④ 도메인 로직 — 그 위에 컨텍스트별 실 구현을 얹는다. (병행 이월: C7 관리 API의 UC·계약 L1-15.)

양식과 내용은 다르다. 양식은 study-note repo project/jun-bank/workflow/(2026-09-16 이관)에, 내용은 이 repo의 product/·domain/·architecture/·usecases/ 같은 정규 위치에 있다. (초기 계획은 Phase 0~9의 10단계 체계였다 — 위 6단계 체계로 통합됐고 10단계 표기는 이력이다.)


문서 지도

설계는 이 docs 저장소, 구현은 각 repo. 이 문서가 설계 정본 허브이고, 실제 코드는 별도 저장소에 산다 — infra(Go 인프라 도구 deploy-agent·dispatcher·watchdog) · common(Kotlin 공통 라이브러리 — 계약·인프라만 공유, 도메인 비공유 ADR-025) · core·settlement·ledger(Kotlin/Spring 서비스 = 배포 3단위, 현재 워킹 스켈레톤) · gateway(내부 API 게이트웨이 Spring Cloud Gateway). "그 서비스를 어떻게 돌리나"는 각 repo README, "왜 그렇게 설계했나"는 여기.

경로 내용
HANDOFF.md ★ 세션 인계 정본 — 현황 · 되돌리면 사고가 재발하는 곳 · 검산 실행법 · 남은 것
product/ 제품 정의서 · 업무 규칙 정본(01-business-rules.md — BR-01~61 · 불일치 유형 · 미확정 수치 표)
domain/ glossary.md(용어 정본) · context-map.md(C1C8 · R1R20) · aggregates/(16종 + 경계·조작 대장) · state-machines/(11종)
architecture/ README.md(기술서 — 여기부터 읽으면 지도가 선다) · adr/(ADR 32건 ADR-001~032) · quality-attributes.md · quality-scenarios.md · constraints.md · views/(컨텍스트·컨테이너·데이터·런타임)
usecases/ UC-01~20 · README.md(색인 — 유스케이스 대장 · 엔드포인트 색인 · 이벤트 색인) · 공통 계약 규약 K-1~4
dev-conventions.md ★ 개발 규약 33규칙(E3) — 규칙마다 강제 수단 칸 의무(컴파일·아키텍처 테스트·테스트 게이트·린트·리뷰) · 도구 확정 TL-1 JUnit5 · TL-2 Testcontainers · 강제 수단 분포(현재/도구 확정 후) · 관측 대장
git-conventions.md ★ 깃 협업 규약 36규칙(GC-1~36) — dev-conventions PR-7·PR-8의 형식 정본. 유형 어휘 1벌(커밋 type = 라벨 = 릴리스 노트 축) · 커밋 형식 · 브랜치(trunk 근접·2일 상한) · 이슈·PR 템플릿 · 라벨 3축 · 마일스톤 · SemVer·태그·릴리스 · 멀티리포 의존 · 판정한 충돌 8건
operations/cicd.md 구성 관리·CI/CD 정본 — 파이프라인 P1P5·RL-9 이월 소화 CD-15·롤백·CI 도구 C-08 판정 (E4)
operations/infrastructure.md ★ 관제·인프라 요구사항 — 홈랩 3대 형상·제약 · 배포 인프라 구성요소(deploy-agent·관제 UI·이미지 레지스트리) · 후속 로드맵 [미확정] 4건(로그 수집·자원 모니터링·관제 저장·트래픽 생성기) · 저수준 언어 성질 대조(판정 미도래)
★ 워크플로우·개발 방법론 study-note repo project/jun-bank/workflow/로 이관 — phase1~5 양식·design-change·개발 사이클·병행 문서화 정책·개발 일지 (2026-09-16 이관)
reference/writing/ 문서 작성 방법론 리서치 — 종합(README) + 근거 8축(evidence-1~9). 다음: 워크플로우 방법론 정의
★ 기술 학습 해설 study-note repo로 이관 — 개념(data-access·languages·security)은 cs/로, infra 코드 결착(infra-journey·go-syntax·gate1)은 project/jun-bank/로 (2026-09-16). 결정 정본은 이 repo architecture/adr/(ADR-026·028 등)
design-changes/ DC-001~006 — 왜 그렇게 됐는지와 무엇이 몇 번 깨졌는지
study/ 제거됨(2026-09-16) — 학습 노트 01~11·notes·tech는 study-note repo cs/로, 워크플로우·infra 기록은 study-note project/jun-bank/로 이관. 원본 백업 = docs-backup-2026-09-15/study/
reference/ 리서치 원문 · 장애 사례 · 참고서적 목차
tools/ 검산 스크립트 — check_docs.py(검사 ①~㉖) · mutation_test.py(변이) · 정본 집합 추출
plans/ 로컬 작업 기록 — .gitignore 대상(공개 설계 문서 아님)

정본이 갈리면

product/01-business-rules.md가 이긴다. BR과 불일치 유형은 거기가 정본이고, ADR·애그리게이트·유스케이스 문서는 그것을 어떻게 하는지를 적는다. 용어는 domain/glossary.md, 현황·인계는 HANDOFF.md가 정본이다.


읽는 순서

★ 처음부터 전부 읽는 상세 순서는 READING-ORDER.md — 일곱 층(제품→도메인→아키텍처→유스케이스→설계변경→배포)으로 무엇을 왜 그 순서로 읽는지 안내한다. 아래는 그 요약이다.

처음 온 사람

① README.md (이 문서)                    무엇이 어디 있나
② HANDOFF.md                              지금 어디까지 왔고 무엇을 건드리면 안 되나
③ product/00-product-definition.md        이 시스템은 무엇인가
④ domain/glossary.md                      어떤 개념으로 이루어지나
⑤ architecture/README.md                  구조가 왜 이렇게 됐나 (ADR로 이어진다)

문서를 쓰려는 사람

① HANDOFF.md 에서 현재 Phase 확인
② study-note repo project/jun-bank/workflow/ 에서 그 Phase의 양식(*-format.md) 확인
③ §3 양식을 복사해 정규 위치(product/, domain/, architecture/, usecases/)에 채운다
④ 양식의 §6 완료 기준으로 검증
⑤ python3 tools/check_docs.py · tools/mutation_test.py 로 검산

문서 규칙

  1. 결정은 ADR에만. 다른 문서에 "~하기로 했다"가 있으면 ADR 링크를 단다. 근거가 두 곳에 있으면 반드시 갈라진다.
  2. 미확정은 숨기지 않는다. 정해지지 않은 것은 문서 안에 [미확정]·열린 의문으로 남긴다. 다음 Phase로 추정해서 넘기지 않는다.
  3. 용어는 domain/glossary.md가 정본. 다른 문서에서 용어를 새로 정의하지 않는다.
  4. 규칙은 product/01-business-rules.md가 정본. 다른 문서는 BR-nn으로 참조만 한다.
  5. 순서를 앞지르지 않는다. 선행 Phase의 산출물이 없으면 그 Phase를 시작하지 않는다.
  6. 문서도 버전을 갖는다. 각 문서 하단에 변경 이력.
  7. ★ "반영 완료"를 적기 전에 본문을 다시 연다. 이 프로젝트에서 "고쳤다고 적고 안 고침" 이 반복 발생한 실측 결함이다(HANDOFF §3).

문서 상태 표기

네 단계만 쓴다. "초안 v0.1", "골격만", "제안됨" 같은 임의 표현을 섞지 않는다.

상태 뜻 신뢰해도 되나
미착수 아직 만들지 않음 —
작성중 쓰는 중. 내용이 바뀔 수 있음 ❌ 인용 금지
검토대기 다 썼고 확인을 기다림 △ 참고만
확정 합의됨. 바꾸려면 재합의 필요 ✅

각 문서 상단에 한 줄로 표기한다: - 상태: 작성중


이 프로젝트의 목표

기법을 써보기 위해 도메인을 고르는 것이 아니라, 도메인이 기법을 요구하게 만드는 것.

결제 도메인은 분산 시스템 기법이 "있으면 좋은 것"이 아니라 없으면 실제로 돈이 틀어지는 몇 안 되는 영역이다. 멱등성이 없으면 이중 승인이 나고, 이벤트 유실 방지가 없으면 정산 대사에서야 원장 누락이 발견된다.

그래서 이 저장소의 1차 산출물은 동작하는 은행이 아니라 판단의 근거다. 그리고 설계 워크플로우 자체가 두 번째 산출물이며, 그쪽이 더 오래 산다(HANDOFF §1).


자주 하는 질문

Q. study/는 어디 갔나? 2026-09-16에 study-note repo로 이관됐다. 개인 학습 노트(CS·개념)는 study-note/cs/로, 워크플로우 양식·infra 개발 기록은 study-note/project/jun-bank/로 옮겼다.
학습 노트는 결정의 근거가 될 수 없다(결정은 이 repo의 ADR에만). 워크플로우는 study-note에서 문서 작성 순서·양식의 정본으로 유지된다.

Q. 왜 양식과 내용을 분리하는가? 특정 프로젝트에 맞춰 미리 써둔 문서는 대부분 읽히지 않고 낡는다. 재사용되는 것은 양식과 작성법이다.

Q. 문서가 코드와 다르면? 문서를 고친다. 틀린 문서는 없는 문서보다 나쁘다. 고칠 수 없으면 상태를 낮추거나 폐기한다.

Q. 검산이 통과하면 결함이 없는 것인가? 아니다. check_docs.py가 통과한 상태에서 치명 결함이 나온 적이 있다(HANDOFF §4). 검산은 과거에 겪은 결함 형태를 다시 잡아줄 뿐이다.


변경 이력

버전 일자 내용
v0.5 2026-09-16 study/ 이관 반영 + 카운트 정합 — study/를 study-note repo로 이관(CS·개념 → cs/, 워크플로우·infra 기록 → project/jun-bank/)하고 문서 지도·읽는 순서·FAQ의 죽은 링크를 study-note 포인터로 갱신 · 낡은 카운트 정정(ADR 30→32·애그리게이트 15→16·관계 R1R19→**R1R20**). READING-ORDER.md 신설 반영. (전체 docs 가독성 재작성도 이 시점 완료 — 문서당 커밋)
v0.4 2026-08-12 현황 갱신 — Phase 3 ADR 18건 → 30건(ADR-019~030 추가: 채널·라우팅·이벤트 전송·DB 토폴로지·관측·릴리스·공통 라이브러리·데이터 접근·배포 오케스트레이션·언어 선택·내부 아키텍처·배포물 전달) · Phase 5 ⬜ → ⏳ 진행 중(현재 위치 화살표 이동) — 인프라 배포 파이프라인(infra Go: deploy-agent 게이트1 HMAC·게이트2 OIDC/JWKS 실 페치·dispatch·배포 창 락·모드·이력, S0·S2) + 워킹 스켈레톤(Kotlin/Spring 3 + Spring Cloud Gateway → compose 라우팅 → 첫 배포 예정) · 다음 한 걸음을 Phase 5 실작업으로 갱신 · 문서 지도에 설계=docs / 구현=각 repo 관계 추가
v0.3 2026-08-06 C7 리뷰 루프 1 반영 — L1-15: C7 행을 ★ 모델 ✅ / 관리 API ⬜ 로 정정(UC·계약 명시 이월 — BR-58 전수 시험 입력의 공백 명시) · Phase 4 행에 같은 단서 · 다음 한 걸음 2건 → 3건(C7 관리 API 추가 · Phase 5 입력에 IV 대장)
v0.2 2026-08-06 ★ 현황·체계 재작성 — 구 10단계(Phase 09) 표기를 6단계 체계로 통일(HANDOFF §2 정본 반영: Phase 14 ✅ · 멀티테넌시·C7 명세 ✅ · Phase 5~6 ⬜) · 문서 지도를 실재 트리로 교체(usecases·architecture·design-changes·tools·HANDOFF 추가) · 정본 우선순위와 읽는 순서에 HANDOFF 편입 · 다음 한 걸음 = 남은 공백 2건(외부 인터페이스 규격서 · API 레퍼런스 생성 도구) 후 Phase 5
v0.1 — 최초 작성(일자 미기재 — 이 표가 최초 등재다) — 문서 성격(단일 설계 출처) · 양식/내용 분리 · 문서 규칙 6개 · 상태 표기 4단계

About

jun-bank 시스템 설계 문서 — 제품 정의, 도메인 모델, 아키텍처(SAD/ADR), 계약, 규약

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages