9.5 KiB
9.5 KiB
title, source_type, status, confidence, derived_from, related_projects, target_branch, target_module, audience, purpose, last_reviewed, status_label
| title | source_type | status | confidence | derived_from | related_projects | target_branch | target_module | audience | purpose | last_reviewed | status_label | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| report | draft | unknown |
|
|
self | branch-implementation-understanding | draft |
{{title}}
이 문서는 이해를 위한 derived report입니다.
SSOT는raw/branch-notes/와wiki/projects/의 canonical 문서입니다.
이 문서는 branch-note의 모든 내용을 보존하지 않고, 사람이 읽고 설명할 수 있도록 재구성합니다.
0. Executive Summary
한 문장 요약
이 기능은
<무엇>이<어떤 문제>를 일으키지 않도록,<어느 계층>에서<어떤 계약>으로 통제하는 기능이다.
이 보고서를 읽고 답할 수 있어야 하는 질문
- 이 기능은 왜 필요한가?
- 이 기능이 없으면 어떤 실패가 발생하는가?
- Clean Architecture 구조에서 어디에 위치하는가?
- 어떤 모듈이 무엇을 책임지고 무엇을 몰라야 하는가?
- 실제 구현은 어떤 원리로 동작하는가?
- 무엇을 테스트로 증명해야 하는가?
관련 문서
- Branch note:
raw/branch-notes/<branch-name>
- Canonical project:
wiki/projects/<canonical-doc>
- 관련 코드:
<module>/<path>
- 관련 테스트:
<module>/<test-path>
1. 이 기능은 어떤 문제를 해결하는가?
문제 정의
<문제 설명>
이 문제가 중요한 이유
<이유 1><이유 2><이유 3>
이 기능이 없을 때 생기는 구조적 문제
<레이어 침투><기술 누출><실패 분류 불일치><테스트로 감지 불가>
2. 실제 실패 시나리오
시나리오 A. <실패 이름>
상황
<현실적인 상황 설명>
실패 흐름
<입력/요청>
→ <잘못된 처리>
→ <장애/버그>
→ <운영 영향>
이 기능이 막는 방식
<어떤 계약/테스트/모듈 경계가 이 실패를 막는지>
시나리오 B. <실패 이름>
상황
<현실적인 상황 설명>
실패 흐름
<입력/요청>
→ <잘못된 처리>
→ <장애/버그>
→ <운영 영향>
이 기능이 막는 방식
<어떤 계약/테스트/모듈 경계가 이 실패를 막는지>
3. Clean Architecture 안에서의 위치
관련 모듈
| 모듈 | 이 기능과의 관계 |
|---|---|
| domain-core | |
| application-core | |
| adapter-web | |
| adapter-persistence | |
| adapter-outbound | |
| shared-contract | |
| app-bootstrap | |
| sample-portfolio |
의존 방향
<허용되는 의존 방향>
이 기능의 소유 계층
- 주 소유 계층:
- 보조 계층:
- 소비 계층:
4. 각 모듈은 무엇을 책임지고 무엇을 몰라야 하는가?
| 모듈 | 책임 | 몰라야 하는 것 | 위반 예시 |
|---|---|---|---|
| domain-core | |||
| application-core | |||
| adapter-web | |||
| adapter-persistence | |||
| adapter-outbound | |||
| shared-contract | |||
| app-bootstrap | |||
| sample-portfolio |
5. 핵심 설계 결정
| ID | 결정 | 이유 | 대안 | 선택하지 않은 이유 | 상태 |
|---|---|---|---|---|---|
| D1 | |||||
| D2 | |||||
| D3 |
가장 중요한 결정 1개
<이 branch에서 가장 중요한 결정>
이 결정이 중요한 이유
<왜 이 결정이 전체 구조를 좌우하는지>
6. 핵심 구현 원리
구현 원리 요약
<핵심 구현 원리 설명>
처리 흐름
<입력>
→ <경계>
→ <변환>
→ <핵심 처리>
→ <외부 어댑터>
→ <응답/로그/테스트>
구현 위치
| 코드 위치 | 역할 | 관련 결정 |
|---|---|---|
<path> |
D1 | |
<path> |
D2 | |
<path> |
D3 |
7. 상태나 데이터 모델은 어떻게 생기는가?
주요 타입
| 타입 | 위치 | 역할 | 노출 가능 여부 |
|---|---|---|---|
| Request DTO | |||
| Command/Query | |||
| Domain Model | |||
| Persistence Entity | |||
| Response DTO | |||
| Error/Envelope Type |
변환 흐름
HTTP JSON
→ Request DTO
→ Command / Query
→ Domain Model
→ Persistence Entity
→ Response DTO
→ Envelope
주의할 점
- DTO와 Domain을 섞지 않는다.
- Domain과 Persistence Entity를 동일시하지 않는다.
- 내부 진단 정보와 외부 응답 payload를 섞지 않는다.
8. 동시성/장애 상황에서 어떻게 동작하는가?
장애 분류
| 장애 상황 | 감지 위치 | 변환 결과 | client 노출 | log/trace |
|---|---|---|---|---|
| validation failure | ||||
| persistence failure | ||||
| dependency timeout | ||||
| authorization failure | ||||
| concurrency conflict |
동시성 관련 동작
- transaction boundary:
- lock/retry/idempotency 관련 여부:
- 중복 실행 시 기대 동작:
- multi-instance 관련 제약:
9. 이 구현이 보장하는 것과 보장하지 못하는 것
보장하는 것
<자동 테스트나 컴파일 규칙으로 검증 가능한 것><계약상 반드시 유지되는 것>
보장하지 못하는 것
<정적 분석으로 잡기 어려운 것><운영 환경에서 추가 검증이 필요한 것><비즈니스 요구사항 자체의 정합성>
표현 주의
아래 표현은 사용하지 않는다.
- 완벽히 보장한다
- 100% 방지한다
- 완전무결하다
- 모든 상황에서 안전하다
대신 아래처럼 쓴다.
- 빌드 시점에 감지한다
- 정적 import 위반을 차단한다
- 계약 위반을 테스트로 드러낸다
- 런타임 동적 우회는 코드 리뷰와 추가 테스트가 필요하다
10. 테스트는 무엇으로 증명해야 하는가?
| 테스트 종류 | 증명하는 것 | 실패해야 하는 조건 | 실행 명령 |
|---|---|---|---|
| unit test | |||
| contract test | |||
| architecture test | |||
| integration test | |||
| smoke test |
핵심 테스트
<명령어>
이 테스트가 깨졌을 때 의미
<어떤 계약이 깨졌다는 뜻인지>
11. Implementation Status
| 항목 | 상태 | 근거 | 비고 |
|---|---|---|---|
<항목> |
<decision-only / documented-only / local-verified / pending / unknown> |
<문서/코드/테스트> |
상태 값 정의
| 상태 | 의미 |
|---|---|
| decision-only | 결정은 있으나 구현/검증은 아직 없음 |
| documented-only | 문서상 계약만 있음 |
| local-verified | 로컬 코드/테스트로 검증됨 |
| pending | 아직 착수 전 또는 잔여 작업 존재 |
| unknown | 근거 부족으로 판단 불가 |
12. Fact / Interpretation / Unknown
검증된 사실
<검증된 사실>— 근거:[[...]]
내 해석
<내 해석>— 이유:<왜 그렇게 해석했는지>
아직 모르는 것
<확인 필요 항목>
13. 설명용 문장
30초 설명
<짧은 설명>
2분 설명
<면접/리뷰에서 말할 수 있는 설명>
깊게 질문받았을 때 답변
Q. 왜 이렇게 나누었나?
A. <답변>
Q. 이 구조의 한계는 무엇인가?
A. <답변>
Q. 이게 실제 장애를 어떻게 막나?
A. <답변>
14. 남은 리스크와 후속 작업
| 리스크 | 영향 | 확인 방법 | 후속 문서/branch |
|---|---|---|---|
15. Closure
- 이 보고서를 작성한 기준일:
- 반영한 branch-note:
- 반영한 코드 버전/커밋:
- 아직 반영하지 않은 자료:
- 다음에 읽을 문서: