Files
llm-wiki/raw/daily-notes/2026-05-28.md
T

66 lines
4.6 KiB
Markdown

---
title: 2026-05-28 일일 노트
source_type: daily-note
status: raw
tags: [daily, ca-tmpl, ca-skeleton, clean-architecture, archunit]
date: 2026-05-28
branches: [
feature-architecture-enforcement-rules
]
---
# 2026-05-28
> Layer: `raw/daily-notes/` — 그날의 **혼합 일일 기록**. 그 자체는 wiki로 옮기지 않으며, `/ingest`가 promotable 항목만 추출해 다른 wiki 영역으로 보낸다. 원본은 raw에 영구 보관.
## 활성 브랜치
`feature-skeleton-package-blueprint-contract` 다음으로 이어서 개발할 브랜치는 `feature-architecture-enforcement-rules`다. 오늘은 Phase C2 전체 roadmap을 처리하지 않고, 방금 구현된 multi-module skeleton의 경계가 깨지지 않도록 architecture enforcement를 실제 코드와 테스트로 붙이는 데 집중한다.
- `feature-architecture-enforcement-rules` (local-verified, not merged) — [[raw/branch-notes/feature-architecture-enforcement-rules]]
## 오늘의 계획
브랜치별 항목은 `[branch-name]` 프리픽스. 오늘 개발 범위는 아래 3개로 제한한다.
- [x] [feature-architecture-enforcement-rules] ca-tmpl repo의 현재 module dependency graph를 확인하고, 허용/금지 dependency matrix를 `domain-core`, `application-core`, `adapter-*`, `app-bootstrap`, `shared-contract`, `sample-ticket` 기준으로 확정한다.
- [x] [feature-architecture-enforcement-rules] Gradle dependency guardrail을 구현해서 `domain-core -> Spring/adapter`, `application-core -> adapter-*`, production module -> `sample-ticket` 의존을 차단한다.
- [x] [feature-architecture-enforcement-rules] ArchUnit test를 추가해서 forbidden import/annotation 규칙을 검증하고, 최소한 architecture test와 관련 Gradle verification task를 로컬에서 실행한다.
## 한 일
- ca-tmpl `src/build.gradle``verifyCleanArchitectureDependencies`를 보강해 declared module coverage와 forbidden project dependency 메시지를 강화했다.
- ca-tmpl `CleanArchitectureTest`에 application `@Transactional` 금지, controller direct domain response 금지, mapper boundary, shared-contract package allowlist 규칙을 추가했다.
- 임시 위반 코드로 신규 ArchUnit 규칙 실패를 확인한 뒤 제거했다.
- 임시 `app-bootstrap -> sample-ticket` 의존으로 Gradle dependency verifier 실패를 확인한 뒤 제거했다.
- `cd src && ./gradlew :app-bootstrap:test verifyCleanArchitectureDependencies`, `cd src && ./gradlew test`를 실행해 로컬 검증을 마쳤다.
## 배운 점
> wiki/concepts/로 promotable 후보
- multi-module Clean Architecture에서는 package 위치보다 module dependency direction이 1차 경계다.
- `sample-ticket`은 template fixture/reference module로 유지하되, production module이 sample에 의존하지 못하도록 enforcement rule이 필요하다.
## 트러블슈팅
> raw/errors/ 또는 wiki/projects/ 또는 관련 branch-note의 "마주친 문제" 섹션으로 promotable 후보
- Gradle wrapper가 `~/.gradle` lock 파일을 쓰려 하면서 sandbox 기본 실행에서는 `Read-only file system` 오류가 났다. 검증 명령은 승인된 escalated 실행으로 재수행했다. 상세: [[raw/errors/gradle-wrapper-readonly-cache-2026-05-28]]
- repo 내부 `docs/superpowers/plans/2026-05-28-architecture-enforcement-rules.md``.gitignore``/docs` 규칙 때문에 git 변경 목록에 잡히지 않는다. 최종 wiki 기록은 [[raw/branch-notes/feature-architecture-enforcement-rules]]에 반영했다.
## 면접·포트폴리오로 옮길 만한 것
> 후보 표기만. daily-note에서 `wiki/interview/` 또는 `wiki/portfolio/`를 직접 만들지 않는다.
- Clean Architecture skeleton에서 module boundary를 문서가 아니라 Gradle/ArchUnit rule로 강제한 이유. 글감 raw note: [[raw/blog-topics/clean-architecture-boundary-enforcement-2026-05-28]]. 예상 질문 raw note: [[raw/interviews/clean-architecture-boundary-enforcement]]. 실제 로컬 검증 후 `wiki/projects/ca-tmpl/clean-architecture-package-layout` 또는 별도 architecture enforcement canonical 문서로 승급 후보.
## 내일로 넘긴 것
- [feature-application-port-usecase-contract] architecture enforcement가 통과한 뒤 `application/port/in`, `application/port/out`, transaction runner, repository port 위치를 정리한다.
- [feature-sample-removal-adoption-contract] architecture enforcement에 production module -> `sample-ticket` 금지 rule이 반영된 뒤 sample-off runtime isolation 구현 범위를 구체화한다.
## 잡담 / 회의 / 기타
- 오늘 daily-note는 `feature-skeleton-package-blueprint-contract` 다음 개발 착수 범위를 제한하기 위한 계획이다.