아키텍처
의사결정 기록
ADR로 중요한 결정을 문서화하고 지식을 공유합니다.
ADR 작성법
Architecture Decision Record의 구조와 작성 방법
마이크로서비스 간 통신에 gRPC 사용
📋 Context (맥락)
주문 처리 시스템을 마이크로서비스로 분리하면서, 서비스 간 통신 방식을 결정해야 합니다. 높은 처리량과 낮은 지연시간이 필요하며, 스키마 진화를 지원해야 합니다.
💡 Decision (결정)
마이크로서비스 간 동기 통신에 gRPC를 사용합니다. Protocol Buffers로 인터페이스를 정의하고, 양방향 스트리밍이 필요한 경우에도 gRPC를 활용합니다.
⚖️ Consequences (결과)
- 긍정적: REST 대비 10배 빠른 성능, 타입 안정성, 코드 자동 생성
- 부정적: 러닝 커브, 브라우저 직접 호출 불가, 디버깅 복잡성
- 중립적: 팀이 Protocol Buffers 학습 필요
Context
결정이 필요한 상황과 배경을 설명
Decision
어떤 결정을 내렸는지 명확하게 기술
Consequences
결정으로 인한 긍정적/부정적 결과
ADR은 짧고 명확하게 작성합니다. 한 문서에 하나의 결정만 담고, 왜 그 결정을 내렸는지를 중심으로 기술합니다. 미래의 팀원이 읽어도 이해할 수 있어야 합니다.
트레이드오프 분석
선택지 간의 장단점을 체계적으로 비교
| 기준 | REST API | gRPC | GraphQL |
|---|---|---|---|
| 성능 |
|
|
|
| 학습 용이성 |
|
|
|
| 유연성 |
|
|
|
| 도구 지원 |
|
|
|
👍 선택의 장점
- Binary 프로토콜로 높은 성능
- 강타입 스키마로 타입 안정성
- 자동 코드 생성으로 개발 생산성
- 양방향 스트리밍 지원
👎 감수할 단점
- 팀 학습 비용 발생
- 브라우저 직접 호출 불가
- 디버깅이 REST보다 복잡
- 초기 설정 복잡성
- 성능 — 응답 시간, 처리량, 리소스 사용량
- 개발 생산성 — 학습 곡선, 도구 지원, 문서화
- 운영 — 모니터링, 디버깅, 배포 용이성
- 확장성 — 수평 확장, 스키마 진화, 버전 관리
- 비용 — 라이선스, 인프라, 인력 비용
의사결정 문서화 템플릿
실무에서 바로 사용할 수 있는 ADR 템플릿
코드와 함께 관리
ADR을 Git 저장소의 docs/adr 폴더에 Markdown으로 저장
순차적 번호 부여
ADR-0001, ADR-0002 형식으로 시간순 추적 가능
결정 간 연결
관련 ADR을 링크하고, 대체된 결정은 명시
ADR은 수정하지 않고 추가합니다. 결정이 변경되면 새 ADR을 작성하고, 이전 ADR의 상태를 "Superseded by ADR-XXXX"로 변경합니다. 이렇게 해야 의사결정의 히스토리를 추적할 수 있습니다.
학습 완료
축하합니다!
소프트웨어 아키텍처 마스터 과정의 모든 강의를 완료했습니다.
이제 AI 코딩 시대의 아키텍트로서 첫 걸음을 내딛을 준비가 되었습니다.
- Part 1 — 소프트웨어 아키텍처의 기초와 AI 시대의 변화
- Part 2 — 주요 아키텍처 패턴 (레이어드, 클린, 헥사고날, 이벤트 기반)
- Part 3 — 명세 기반 개발과 AI와의 효과적인 협업
- Part 4 — 멀티 에이전트 시스템과 AI 코드 리뷰
- Part 5 — 실무 프로젝트 설계, 리팩토링, 의사결정 기록
핵심 요약
- ADR은 중요한 아키텍처 결정을 문서화하는 경량 방법론
- Context → Decision → Consequences 구조로 왜를 기록
- 트레이드오프 분석으로 선택지 간 장단점을 체계적으로 비교
- ADR은 수정하지 않고 추가하여 히스토리 보존
- 코드와 함께 버전 관리하여 변화 추적