ADR as Strategic Mechanism — 학생의 진짜 자산
AI가 코드·design·결정을 다 도와주는 시대에 *"내가 무엇을 아는가?"*의 답. ADR (Architecture Decision Record)이 strategic 사고를 글로 남기는 가장 명확한 mechanism. 14 원칙 + Matt thesis가 모두 가리키는 학생 단위 운영 도구.
한 줄
ADR = 매 큰 결정마다 옵션·선택 이유·가정을 글로 남기기. AI가 코드·옵션·심지어 결정도 제시하지만, "내 도메인에 왜 이 선택인가"의 판단은 사용자의 영역. ADR이 그 판단을 명료한 형태로 남기는 도구. 5장 쌓이면 자기 판단 패턴이 보이고, 10장이면 자기 도메인의 strategic architect가 됨.
⚛️ 왜 ADR인가
AI 시대 학생의 핵심 고민
"내가 직접 코딩하지 않고 LLM에게 다 물어봐서 결정한다. 그러면 내가 뭘 아는 거지?"
이 고민의 정확한 답은 결정의 결과가 아니라 결정의 과정에서의 판단력. LLM이 옵션을 제시해도 왜 이 옵션이 맞는가는 사용자 몫.
❌ "LLM이 이렇게 하라고 해서 했음"
→ no judgment, no learning, no asset
✅ "LLM이 3가지 옵션 줬고, 내 도메인에 *왜* 이게 맞는지 판단하고 선택"
→ judgment + ADR로 표현 + 자산
ADR이 답하는 질문
매 ADR이 4가지 질문에 답:
- 무엇을 결정했는가? (선택)
- 어떤 옵션이 있었는가? (alternatives)
- 왜 이 선택인가? (rationale)
- 이 선택의 가정은 무엇인가? 가정이 깨지면? (assumptions + reversibility)
→ 이 4가지가 학생이 진짜 아는 것의 정의.
📝 ADR Template
# ADR-{번호}: {결정 제목 한 줄}
## Date
{YYYY-MM-DD}
## Status
{Proposed | Accepted | Superseded by ADR-XXX}
## Context (상황)
- 무엇을 결정해야 하나
- 왜 지금 결정해야 하나
- 도메인 제약 (시간, 리소스, 사용자, 기술)
## Options (옵션)
1. {옵션 A} — 장단점
2. {옵션 B} — 장단점
3. {옵션 C} — 장단점
(LLM이 제시한 옵션도 OK, 내가 검증한 옵션 모음)
## Decision (결정)
{어떤 옵션 선택}
## Rationale (왜)
- {도메인 제약과의 fit}
- {시간 제약}
- {사용자 제약}
- {trade-off 인지}
## Assumptions (가정)
- {이 결정이 옳기 위해 참이어야 할 가정 1}
- {가정 2}
## Reversibility (가정이 깨지면?)
- {가정이 깨지는 신호}
- {그때 어떻게 되돌리는가}
- {compensating action}
## References
- 관련 ADR
- 관련 [[14 원칙 노트]]
- 외부 source
→ 이 template 채우는 데 30분~1시간. 1주일 설계가 아닌 작은 단위 strategic 사고.
🌱 ADR 5장 쌓이는 path
ADR-001: Strategic Kickoff (Day 0)
# ADR-001: 학내 도구 만들기 - strategic kickoff
## Context
"수강신청 시간표 충돌 검사기"를 만들고 싶음
- 내 시간: 주 5시간
- 사용자: 나 + 동기 1-2명
- 도메인: 한국 학내 학사 시스템
## Options
1. Spring Boot 백엔드 + 웹 (큰 시스템, 친숙)
2. Python script (작고 빠름)
3. Rust CLI (학습 + 효율)
## Decision
2번 — Python script
## Rationale
- 사용자 1-2명 → 큰 시스템 over-engineering
- Tracer bullet으로 빠르게 작동 확인 우선
- 친숙해서 AI에게 시키기 쉬움
## Assumptions
- 사용자 늘면 1년 후
- 학사 시스템 API 접근 가능
## Reversibility
- 사용자 5명+ 되면 → 백엔드로 마이그레이션
- API 안 되면 → web scraping 또는 폐기
ADR-002: 학사 시스템 통합 방식 (Week 2)
# ADR-002: 학사 시스템 통합 - 직접 호출 vs ACL
## Context
- 학사 시스템 API가 학기마다 바뀜 (들음)
- 도구가 5개로 늘어날 가능성
## Options
1. 직접 호출 (간단)
2. ACL layer (격리)
3. 외부 lib 사용 (학습 부담)
## Decision
2번 — ACL layer
## Rationale
- 학기마다 바뀜 *3번 이상* 예상 → 격리 가치 큼
- 시간 제약상 lib 학습보다 직접 ACL이 빠름
- 학내 도메인 vocabulary가 외부 lib에 잘 안 맞음
## Assumptions
- 학사 시스템 1학기 1-2회 변경
- 도구 5개+로 늘어남
## Reversibility
- 도구 1-2개로 끝나면 → ACL은 over-engineering, 폐기
- 변경 빈도 낮으면 → 직접 호출로 후퇴
## References
- [[anti-corruption-layer]] — ACL 원칙
ADR-003: AI agent vocabulary skill (Week 3)
# ADR-003: 학내 vocabulary skill 만들기
## Context
- AI에게 "수강신청 검증해줘" → AI가 "course registration form submission validation logic"으로 verbose 응답
- token 비용·정확도 모두 떨어짐
## Options
1. 매 prompt에 한국어 단어 풀어쓰기
2. SKILL.md frontmatter에 vocabulary
3. AGENTS.md에 vocabulary 박기
## Decision
2번 + 3번 — SKILL.md vocabulary + AGENTS.md glossary
## Rationale
- vocabulary가 *모든 skill에 공통* → AGENTS.md
- skill별 specific vocabulary → SKILL.md
- 한국어 학사 용어가 *고유 정밀도* 있어 그대로 사용
## Assumptions
- AI가 한국어 vocabulary를 *그대로* 사용 가능
- 다른 도메인(연구·동아리)은 별 vocabulary
## References
- [[ubiquitous-language]] — UL 원칙
- [[bounded-context]] — 도메인 분리
ADR-004: Test 작성 vs 수동 검증 (Sprint 2)
# ADR-004: AI agent에게 test를 보호하게 강제
## Context
- AI가 test fail 시 *test를 변경*하는 함정 발견
- 결과: code는 fail인데 test는 통과 (false success)
## Options
1. Test 없이 수동 검증
2. Test 있고 AI에게 *수정 가능*
3. Test 있고 AI에게 *수정 금지* (Anthropic 패턴)
## Decision
3번 — Anthropic prompt 패턴 차용
## Rationale
- false success가 가장 위험
- *수정 금지* prompt가 명료하고 enforce 쉬움
- 12% production cohort의 패턴
## Assumptions
- Test가 *내가 의도한* 행동을 정확히 표현
- AI가 prompt 따름 (Anthropic 모델 가정)
## Reversibility
- Test 자체가 잘못된 것 발견 → 사람이 직접 test 수정 (AI X)
## References
- [[tdd-as-small-deliberate-steps]]
- [[sources/key-articles-summary#3. Anthropic - *Effective Harnesses*]]
ADR-005: 후배에게 인계 준비 (Week 12)
# ADR-005: 졸업 전 owner transfer 준비
## Context
- 1학기 사용 후 후배에게 도구 인계 예정
- 후배가 fundamentals 모름
## Options
1. 코드 + git만 인계 (최소)
2. README + 인계 문서 (중간)
3. AGENTS.md + ADR 묶음 + 1시간 onboarding (충실)
## Decision
3번
## Rationale
- 후배가 *왜 이런 결정인지* 알아야 변경 가능
- ADR이 *판단 패턴* 학습 자료
- 1시간 onboarding이 *암묵 지식* 전달
## Assumptions
- 후배가 1주일 사용해보고 onboarding session
- 후배가 ADR 형식 학습 가능
## References
- [[named-ownership]] — owner transfer
- [[information-leak-vs-abstraction]] — 인계 문서 = leak 측정
→ 5장 쌓이면 자기 판단 패턴이 보임:
- ADR-001 (큰 시스템 over-engineering 회피)
- ADR-002 (외부 변화 격리)
- ADR-003 (vocabulary 정착)
- ADR-004 (AI agent 안전)
- ADR-005 (owner transfer)
→ 모두 내 도메인의 strategic 결정. 후배가 ADR 5장 읽으면 나의 사고방식을 흡수.
🔗 ADR과 14 원칙의 연결
ADR이 14 원칙의 학생 단위 운영 mechanism:
| 14 원칙 | ADR이 보장하는 부분 |
|---|---|
| strategic-vs-tactical-programming | ADR 자체가 strategic 시간의 결정체 |
| reversibility | ADR의 Assumptions + Reversibility 섹션 |
| named-ownership | ADR 작성자가 결정의 owner |
| information-hiding | ADR이 왜 secret인지 설명 |
| anti-corruption-layer | ADR이 언제 ACL이 필요한지 판단 |
| bounded-context | ADR이 왜 BC를 여기서 끊는지 명시 |
| tracer-bullets | ADR-001이 tracer bullet 발사 전 design |
→ ADR이 14 원칙의 추상 명제를 구체 결정으로 변환하는 도구.
🤖 AI 시대 specific — AI에게 ADR 작성을 위임할 수 있는가?
흥미로운 질문. 답은 부분적 yes, 그러나 핵심은 사람:
| ADR 부분 | AI 위임 OK? |
|---|---|
| Context (상황) | ✅ AI가 형식 정리 도와줌 |
| Options (옵션 제시) | ✅ AI가 옵션 brainstorm. 그러나 내가 검증 |
| Decision (선택) | ❌ 사람의 영역. judgment 필요 |
| Rationale (왜) | ❌ 사람의 영역. 도메인 + 제약 + 시간 보고 |
| Assumptions (가정) | ❌ 사람의 영역. 가정은 내 도메인 지식에서 |
| Reversibility (되돌림) | ⚠️ AI가 기술적 가능성은 보지만 사회적·시간적 비용은 사람 |
→ Decision · Rationale · Assumptions가 학생의 진짜 자산이 형성되는 자리. 이 셋만 사람이 쓰면 됨. 나머지는 AI 위임 OK.
학생의 진짜 자산 = "Why·What if 질문에 답하는 능력". ADR이 그 능력의 증거.
⚙️ 실용 운영 — ADR을 어디에 어떻게 쓰는가
저장 위치
학생 프로젝트 권장 구조:
project-root/
├─ docs/
│ └─ adr/
│ ├─ ADR-001-strategic-kickoff.md
│ ├─ ADR-002-haksa-integration.md
│ ├─ ADR-003-vocabulary-skill.md
│ ├─ ADR-004-test-protection.md
│ └─ ADR-005-transfer-prep.md
├─ src/
└─ README.md
Git 통합
- 매 ADR이 separate commit. 왜 이 결정인지 commit history에 남음
- ADR이 변경되면 Status: Superseded by ADR-XXX로 link
빈도 가이드
- 반드시 ADR: 큰 architectural 결정 (vendor, 외부 시스템, BC 분리, deprecation)
- 권장 ADR: 중간 결정 (라이브러리 선택, design pattern)
- 불필요: 작은 구현 디테일 (변수 이름, 함수 시그니처)
→ ADR이 너무 많으면 의미 없음. 1 sprint에 1-3장이 적정.
시간 가이드
- ADR-001 (kickoff) — 30분 ~ 1시간
- 기능 ADR — 30분
- 큰 architectural ADR — 1-2시간
- 절대 1주일 설계 = ADR 1장은 잘못된 단위
🧘 학생 마음 무게 — ADR이 자산을 가시화
학생의 불안:
"AI 시대에 내가 뭘 아는지 모르겠다."
해법 — ADR을 쓰면 지식이 가시화되어 불안이 자산으로 변환:
ADR 0장:
"내가 뭘 아는지 모름" → 불안
ADR 1-3장:
"이 결정들은 내가 했음" → 작은 자신
ADR 5장:
자기 판단 *패턴*이 보임 → "내 사고방식"
ADR 10장:
자기 도메인의 strategic architect → 자산 명확
5번째 ADR쯤이면 자기 판단 패턴이 글로 보임. 10번째쯤이면 후배에게 가르칠 수 있는 수준. 이게 named-ownership 인사이트 8 — *"AI 사용 자유와 결과 책임 의무는 분리되지 않는다"*의 학생 단위 mechanism.
한 줄 답
학생이 진짜 아는 것 = ADR 묶음 그 자체. AI 시대에 코드 문법이 아니라 ADR로 표현되는 판단력이 자산.
관련
- overview — 14 원칙 지도
- student-application-guide — ADR이 어디에 쓰이는지 timeline
- synthesis-complex-to-simple — ADR이 답하는 complex 관리 통합 명제
- strategic-vs-tactical-programming — ADR = strategic 시간의 결정체
- reversibility — ADR의 가정·되돌림이 reversibility 표현
- named-ownership — ADR 작성자 = 결정 owner
- research/stateless-llm-sdk/design-principles|design-principles — 7 원칙의 ADR 운영
- sources/key-articles-summary — Anthropic feature list가 ADR의 운영 사례
Sources
ADR 일반 source
- Documenting Architecture Decisions — Michael Nygard (2011). ADR 명제 원전. https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions
- adr-tools GitHub https://github.com/npryce/adr-tools — ADR 자동화 도구
Strategic decision making
- The Pragmatic Programmer — Hunt & Thomas. Tip 14 (Reversibility) + ADR 정신
- A Philosophy of Software Design — Ousterhout. Strategic vs Tactical (ADR이 strategic의 결정체)
AI 시대 ADR
- Anthropic — Effective Harnesses for Long-Running Agents — feature list / passes field가 ADR의 운영 사례
- mattpocock/skills
/grill-with-docs— UL 발견 + ADR 작성을 통합한 skill