1.9 KiB
1.9 KiB
전략 아키텍처·SOLID·리팩터링 기준
아키텍처 경계
- Host: composition root, 인증/관제/Endpoint 조립만 담당한다.
- Module: Vertical Slice와 모듈 내부 정책·저장소를 소유한다.
- Domain: FastEndpoints, Dapper, Npgsql, Hangfire, HTTP를 참조하지 않는다.
- Application: use case, idempotency, transaction, context loading, orchestration을 담당한다.
- Infrastructure: SQL, 외부 Adapter, Outbox/Inbox, Projection 구현을 담당한다.
- Contracts: 모듈 간 최소 integration event만 공유한다. 타 모듈 테이블 직접 조회를 금지한다.
SOLID의 현장 적용
| 원칙 | 적용 | 금지 |
|---|---|---|
| SRP | Endpoint=HTTP, Handler=유스케이스, Policy=결정, Adapter=I/O | God Service, Hangfire Job 내 정책 |
| OCP | 승인된 Policy/DQ/Adapter registry | reflection plugin framework |
| LSP | Adapter contract test로 시간·단위·오류 의미 보장 | mock 성공만으로 교체 가능 판정 |
| ISP | IClock, ContextReader, OutboxWriter 등 좁은 Port | 범용 Repository/Manager |
| DIP | Domain은 외부 기술을 모름 | Npgsql/HTTP 타입의 Domain 침투 |
리팩터링 순서
- Characterization/Golden test로 현재 동작을 고정한다.
- 정책 변경과 구조 변경을 분리한다.
- 이름·단위·시간 의미를 먼저 교정한다.
- 중복은 문장이 아니라 업무 의미와 변경축이 같을 때만 통합한다.
- PR마다 성능·데이터·감사·운영 영향과 rollback을 기록한다.
- 기술부채는 Owner, Interest, Trigger, Gate, Exit Test를 가진다.
Fitness Functions
- 모듈→모듈 직접 project reference allowlist.
- Domain의 Infrastructure namespace/package 참조 0.
- 모듈 소유 schema 외 SQL 접근 0.
- Endpoint마다 인증/권한 선언 100%.
- API/DDL/Event/Job/UI/Test ID 중복 0.
- 문서/DDL/OpenAPI/Test contract CI diff.
AutomaticOrder=false,KisOrderAdapter=falseconfig scan.