Files
KArtSell.Aegis/docs/v12_2/02_ARCHITECTURE_REFACTORING_STANDARD.md
T
kjh2064 dcd1322d41
ci / backend (push) Failing after 12s
ci / frontend (push) Failing after 19s
ci / static (push) Failing after 45s
Initial commit: Add project files
2026-08-02 05:15:36 +09:00

40 lines
1.9 KiB
Markdown

# SOLID·리팩터링·구조화 실행 기준
## 1. 경계
- Endpoint: HTTP/Auth/Header/Validation/ProblemDetails만 담당
- Application: 유스케이스 조정, 멱등, 트랜잭션, Outbox
- Domain Policy: 순수 결정, 우선순위, 상태전이, 단위
- Infrastructure: Dapper/Npgsql/Adapter/Hangfire
- Projection: 화면·리포트 전용, 버전·watermark·rebuild 가능
## 2. SOLID 적용
| 원칙 | 적용 | 금지 |
|---|---|---|
| SRP | 정책, 저장, 외부 I/O, 화면상태 분리 | God Service, Job 내부 정책 |
| OCP | 명시적 policy/adapter registry와 contract test | reflection plugin framework |
| LSP | Adapter 교체 시 시점·단위·오류·멱등 동일 | mock 성공만으로 승인 |
| ISP | IClock, ContextReader, SourceAdapter 등 좁은 Port | 범용 Repository/대형 Service |
| DIP | Domain은 FastEndpoints/Dapper/Npgsql을 모름 | Infrastructure 타입의 Domain 침투 |
## 3. 리팩터링 규칙
1. 동작보존 리팩터링과 정책/수식 변경은 별도 PR로 분리한다.
2. Characterization/Golden test를 먼저 만든다.
3. 중복은 코드 모양이 아니라 **의미와 변경축**이 같을 때만 추상화한다.
4. 공통화는 3회 반복 후에도 동일 의미·변경축이 확인될 때 승격한다.
5. 모든 클래스에 interface를 만들지 않는다.
6. 모든 테이블을 event sourcing하지 않는다. Evidence/Decision/Audit처럼 불변 증거가 필요한 곳만 append-only로 한다.
7. 조기 마이크로서비스 분리는 금지한다. Modular Monolith의 경계·스키마·Architecture Test가 먼저다.
## 4. Architecture Fitness Function
- Domain 프로젝트의 FastEndpoints/Dapper/Npgsql/Hangfire 참조 0
- 모듈 간 직접 DB schema 접근 0
- Generic Repository 패턴 0
- Endpoint 권한 선언 누락 0
- 자동주문/KIS capability true 구성 0
- Migration 번호 중복·역행 0
- 문서/DDL/OpenAPI/Test 계약 diff 미검토 0