Files
llm-wiki/raw/blog-topics/sample-domain-contract-fixture-clean-architecture-2026-06-10.md
T

85 lines
4.6 KiB
Markdown

---
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: 생성 전.