도메인 패키지 구조 선택 (단일 aggregate vs 팩터별 분리)
상태
승인
후보군
| 방안 | 설명 |
|---|---|
| 팩터별 분리 | marketflow 패키지 내 InvestorTrading·ForeignHolding·Valuation·ShortSelling·CreditBalance 5개 Entity, 각각 Repository·Gateway |
| 단일 aggregate | 하나의 DailyMarketSnapshot Entity에 5종 필드 통합 |
결정
com.biuea.stock.marketflow 단일 패키지 안에 팩터별 5개 Entity로 분리한다.
KRX는 infrastructure 어댑터명(
infrastructure/krx)으로만 등장한다. 도메인 패키지명에 데이터소스 약자(krx)를 넣지 않는다.
결정 이유
- 5종은 테이블·수집 bld·공시 시차가 모두 다르다 (공매도는 T+1/T+2, 나머지는 EOD). 단일 aggregate로 묶으면 부분 수집·부분 실패 처리가 복잡해진다.
- 팩터별 수직 슬라이스로 분리하면 티켓이 파일 교집합 ∅ 로 병렬화된다 (single writer per file).
- 한 도메인 패키지 안에 두어 도메인 간 cross-import 금지 규칙을 지킨다.
검토 대안
| 방안 | 기각 이유 |
|---|---|
| 단일 aggregate | 수집주기·시차 상이로 응집도 낮음, 부분 실패 처리·병렬 티켓화 어려움 |
| 데이터소스명(krx) 도메인 패키지 | naming-prefix 안티패턴 — 도메인 의미가 아닌 소스 약자 |
트레이드 오프
| 구분 | 내용 |
|---|---|
| 득 | 팩터별 독립 수집·병렬 구현, 부분 실패 격리, 명확한 책임 분리 |
| 실 | Entity·Repository 클래스 수 증가 (5종 각각) |