20장. Architecture Fitness Function을 만든다
중요한 구조 특성은 수동 기억이 아니라 자동 검사로 보호한다. 금지 dependency, API 호환성, transaction 경계, cyclic import, 배포 크기를 test한다. 숫자가 목표를 왜곡하지 않도록 예외와 만료를 둔다.
손쉽게 따라 하기
Billing이 Reservation repository를 import하면 실패하는 architecture test를 설계한다. 입력에는 실제 고객·계정·도메인 대신 tenant-demo, example.invalid와 저장소 fixture만 사용한다. 시작 전 기대 결과와 바꾸지 않을 불변식을 한 줄로 적는다.
같은 화면에서 확인할 증거
lab/public/index.html의 공통 FieldPass Evidence Board에서 책 slug domain-architecture-decisions, 장 번호 20, run ID를 선택한다. 입력, 판정, 관측값, rollback을 채우고 명령 결과와 같은지 확인한다. 성공 화면만 캡처하지 않고 의도한 실패 하나와 다음 안전 행동을 함께 남긴다.
막혔을 때
검사가 리팩터링을 과도하게 막으면 보호하려는 위험을 다시 적는다. 원인을 확정하기 전 최근 변경, 환경, 권한, 시간 범위와 실제 오류를 고정한다. 외부 서비스를 반복 호출하지 않고 로컬 fixture로 최소 재현한 뒤 한 변수만 바꾼다. 복구는 process 상태가 아니라 FieldPass 예약·결제·정산의 업무 결과로 선언한다.