--- title: blog-topic / sample-domain-contract-fixture-clean-architecture source_type: blog-topic status: raw related_branches: [feature-sample-domain-contract-fixture] related_projects: [ca-skeleton] tags: [blog-topic, ca-skeleton, architecture, testing, clean-architecture, api-contract] created: 2026-06-10 status_label: ready-for-canonical target_audience: backend-engineer inspiration_url: archive_url: --- # blog-topic: sample-domain-contract-fixture-clean-architecture ## Parent / 부모 - [[raw/branch-notes/feature-sample-domain-contract-fixture]] — sample-portfolio fixture를 문서 계약대로 구현하면서 나온 글감. ## 트리거 / Trigger - 트리거 유형: `branch-work` - 트리거 날짜: 2026-06-10 - 트리거 연결 노트: [[raw/branch-notes/feature-sample-domain-contract-fixture]] ## 글감 / Topic seed - 한 문장 요지: Clean Architecture 템플릿의 샘플 도메인은 데모 기능이 아니라 validation, mapper, transaction, response, conflict 계약을 실제 흐름으로 검증하는 fixture가 될 수 있다. - 예상 제목 후보: - Clean Architecture 템플릿에 sample domain fixture를 남기는 이유 - 샘플 기능이 아니라 계약 검증 도구로서의 WorkLog 도메인 ## 핵심 주장 후보 / Claim candidates - 사실 후보: - ca-tmpl은 `sample-portfolio`를 production module이 의존하지 않는 fixture/reference consumer로 둔다 — 근거 후보: [[raw/branch-notes/feature-sample-domain-contract-fixture]] D2/D5. - 2026-06-10 구현은 `WorkLogStatus` 상태 머신과 `WorkLogOwner` minimum model을 domain→application→persistence→web에 연결했다 — 근거 후보: [[raw/branch-notes/feature-sample-domain-contract-fixture]] §진행 중 메모. - 경험 후보: - focused RED에서 missing enum/value object/accessor/command status patch 컴파일 실패를 확인하고, GREEN 후 `:sample-portfolio:test`, architecture guard, full `test`, `check`를 통과시켰다 — 근거 후보: [[raw/branch-notes/feature-sample-domain-contract-fixture]] §진행 중 메모. - 의견/해석 후보: - 템플릿의 sample은 "보여주기용 CRUD"보다 "경계 계약을 깨뜨리면 테스트가 실패하는 살아있는 fixture"일 때 유지 비용을 정당화하기 쉽다. ## Outline seed 1. 문제: sample을 지우면 contract 흐름 검증이 빈다 — validation/mapper/error/transaction이 unit test 조각으로만 남는 위험. 2. 설계: sample-portfolio를 production과 분리된 fixture consumer로 둔다 — 모듈 경계와 ArchUnit guard가 핵심. 3. 구현: WorkLog minimum model을 계층별로 흘린다 — status state machine, owner, optimistic version, response/persistence round-trip. 4. 검증: RED-GREEN과 architecture/full Gradle check — contract fixture는 테스트 증거로 말한다. ## Canonical 전환 후보 / Canonical extraction candidates - `wiki/projects/ca-tmpl/sample-domain-contract-fixture.md` 후보: - sample-portfolio fixture의 실제 구현 파일과 검증 명령. - `wiki/concepts/sample-domain-contract-fixture.md` 후보: - sample domain을 contract fixture로 설계하는 일반 패턴. - 필요한 추가 검증: - canonical `sample-fixture-and-adoption` 명명 drift 정리. - sample-off/profile isolation owner branch 결과 확인. ## Sources / 근거 후보 - [[raw/branch-notes/feature-sample-domain-contract-fixture]] — 구현 결정, scenario matrix, 2026-06-10 검증 기록. - [[raw/errors/gradle-wrapper-lock-read-only-sandbox-2026-06-10]] — 검증 중 sandbox tooling 이슈. - [[raw/interviews/sample-domain-contract-fixture-clean-architecture]] — 같은 작업에서 나온 면접 질문 원석. ## 미해결 / Unknown - 아직 확인해야 할 사실: sample-off CI/profile isolation 구현 branch의 최종 상태. - 과장하면 안 되는 부분: 이번 글감은 locally-verified 구현 원석이며 canonical 정제 전이다. - 블로그로 쓰기 전에 필요한 canonical 정제: branch-note의 implemented claims를 `wiki/projects/ca-tmpl/` 문서로 승격. ## Decision / 처리 결정 - 액션: `promote-to-canonical` - 이유: `wiki/projects/ca-tmpl/sample-fixture-and-adoption.md` 에 sample domain contract fixture 글감으로 반영했다. - 다음 단계: target canonical이 아직 `draft` 이므로 `blogify` 전 review/verify가 필요하다. sample domain을 production feature처럼 쓰지 않는다. ## Related / 관련 - 관련 branch: [[raw/branch-notes/feature-sample-domain-contract-fixture]] - 관련 error: [[raw/errors/gradle-wrapper-lock-read-only-sandbox-2026-06-10]] - 관련 interview prep: [[raw/interviews/sample-domain-contract-fixture-clean-architecture]] - derived blog: 생성 전.