🏛️ ADR(Architecture Decision Record) 작성 가이드
“6개월 후의 나 또는 새로운 팀원이 ‘왜 이렇게 했지?‘라고 물을 때 답이 되는 문서”
💎 ADR의 핵심 가치
1. 지식 보존 & 온보딩
- 문제: 담당자 퇴사 시 “왜 이 기술을 썼는지”에 대한 맥락이 유실됨.
- 해결: 신규 입사자가 “왜 PostgreSQL인가요?”라고 물을 때 “ADR-003을 보세요”라고 답변 가능.
- ADR-003 예시: 트랜잭션 무결성 필요 + 복잡한 JOIN 쿼리 → PostgreSQL 선택 (라이선스, 성능 고려)
2. 같은 논쟁 반복 방지
- 문제: 1월에 “REST vs GraphQL” 논쟁 후 REST 결정 → 6월에 또 같은 논쟁 반복.
- 해결: “이미 ADR-005에서 결정됨. 상황이 바뀌지 않았다면 재논의 불필요.”
3. 의사결정 품질 향상
- 문서를 작성하며 자연스럽게 **대안(Options)**과 **트레이드오프(Consequences)**를 깊게 고민하게 됨.
- “그냥 좋아서”가 아닌 “근거 있는” 선택을 유도.
4. 책임 분산 & 투명성
- 문제: 장애 발생 시 “누가 이렇게 정했어?”라는 비난 발생.
- 해결: “당시 상황(Context)에서는 이것이 최선이었다”는 기록이 있어 비난 대신 이해와 개선으로 이어짐.
5. 기술 부채 관리
- 예시: “지금은 바쁘니 모놀리스 유지(ADR-007)”
- 효과: 나중에 “왜 기술 부채가 생겼지?”가 아니라, “의도적으로 감수한 부채(Consequences)“임을 인지하고 상환 계획 수립 가능.
🚧 예상 병목 (Bottlenecks) & 해결책
1. 작성 비용 & 귀찮음 (🚨 가장 큰 문제)
- 현실: “코드 짜기도 바쁜데 문서까지?”
- 해결책: 5분 컷 경량 템플릿 사용.
## 제목: [결정 제목] ## 상태: 제안/승인 ### 배경 (Context) - 2-3문장 요약 ### 결정 (Decision) - 1문장 결론 ### 이유 (Reason) - 핵심 이유 1, 2 ### 영향 (Consequences) - 긍정/부정 영향
2. 작성 기준의 모호함
- 현실: “버튼 색상도 ADR 써야 하나요?”
- 해결책: 명확한 기준(Checklist) 수립.
- ✅ 작성 대상: 되돌리기 어려운 결정, 팀 전체 영향, 비용/시간이 많이 드는 결정, DB/언어/프레임워크 선택.
- ❌ 작성 불필요: 단순 UI 변경, 개인 코딩 스타일, 당연한 업계 표준.
3. 유지보수 부담 (Outdated)
- 현실: 문서는 “MySQL”인데 실제 코드는 “PostgreSQL”.
- 해결책: 상태(Status) 필드 적극 활용.
제안됨(Proposed)→승인됨(Accepted)- 기술 변경 시 기존 문서를 수정하는 게 아니라, 새 ADR 작성 후 기존 문서를
대체됨(Superseded)처리.
4. 합의 과정의 오버헤드
- 현실: “리뷰 기다리다 지쳐요.”
- 해결책:
- 기한 설정 (예: 3일 내 반대 없으면 자동 승인).
- 최종 결정권자(Tech Lead) 명시.
- 사소한 결정은 사후 공유(FYI)로 처리.
5. 검색 & 접근성
- 현실: “그 문서 어디 있더라?” (Slack, Notion, Wiki 산재)
- 해결책: 저장소 통일.
- Notion Database 또는 Git Repository(
docs/adr/)에 일원화. - 코드와 가까운 곳에 두는 것이 베스트.
- Notion Database 또는 Git Repository(
🚀 실용적 도입 전략 (Phase)
Phase 1: 가볍게 시작
- 템플릿은 최소한으로 (제목, 배경, 결정, 이유).
- 한 달에 1-2개의 중요한 아키텍처 결정만 기록.
- 강제성보다는 권장 사항으로 시작.
Phase 2: 습관화
- PR 리뷰 시 “이 결정에 대한 ADR이 있나요?” 질문 던지기.
- 팀 회고 시간에 좋은 ADR 사례 공유.
Phase 3: 프로세스화
- 아키텍처 변경 PR에는 ADR 링크 필수 첨부.
- 신규 입사자 온보딩 커리큘럼에 “주요 ADR 읽기” 포함.
- 분기별 ADR 상태 리뷰 (폐기/대체 처리).
Supported by gemini-3.0-pro preview