Initial commit: Add project files
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
# 전략 아키텍처·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 침투 |
|
||||
|
||||
## 리팩터링 순서
|
||||
|
||||
1. Characterization/Golden test로 현재 동작을 고정한다.
|
||||
2. 정책 변경과 구조 변경을 분리한다.
|
||||
3. 이름·단위·시간 의미를 먼저 교정한다.
|
||||
4. 중복은 문장이 아니라 **업무 의미와 변경축**이 같을 때만 통합한다.
|
||||
5. PR마다 성능·데이터·감사·운영 영향과 rollback을 기록한다.
|
||||
6. 기술부채는 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=false` config scan.
|
||||
Reference in New Issue
Block a user