Files
KArtSell.Aegis/docs/v12_1/02_STRATEGIC_ARCHITECTURE_AND_SOLID.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

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 침투

리팩터링 순서

  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.