소프트웨어 아키텍처

아키텍처 평가

meellon 2026. 7. 9. 05:20

학습 목표

아키텍처 평가무엇을·언제 하는지 설명할 수 있다.

ATAM(Architecture Tradeoff Analysis Method) 흐름산출물(민감점·트레이드오프·리스크)을 설명할 수 있다.

앞서 본 품질 시나리오평가 입력으로 쓰는 방법을 적용할 수 있다.

기술 부채측정·분류·상환 계획에 연결할 수 있다.

문제 상황

  • "아키텍처 리뷰 한 번 하자" — 3시간 회의 후 액션 없음, 슬랙 스레드만
  • PM "빠르게" vs SRE "안정" — 숫자 없이 으로 싸움
  • MSA 전환 부하 테스트 — Order API p99 2.4s누가 민감한지 목록 없음
  • 레거시 공유 DB — "나중에" 3년, 이자누적
  • C4·ADR은 있는데 품질 검증 연결 안 됨 — 문서 장식
  • 장애 후 "구조적 원인" — 시나리오재현 안 됨

문서·결정 기록까지 갖췄다. 구조가 요구를 만족하는지 체계적으로 검증하는 편이다.

1. 아키텍처 평가란

아키텍처 평가 — 설계가 품질 속성·비즈니스 목표만족하는지 이해관계자함께 검토.

산출물 역할
C4 현재 구조 제시
품질 시나리오 검증 기준
ADR 결정·트레이드오프 기록
평가 결과 리스크·민감점·개선 우선순위
할 때 안 할 때
대규모 전환·신규 플랫폼 한 줄 버그 fix
분기 아키텍처 점검 전원 매일 ATAM
장애 구조 원인 분석 이미 합의 내부 convention
  • 코드 리뷰아키텍처 평가 — 후자는 품질 속성·시나리오 중심
  • Richards/Ford — 가벼운 워크숍시나리오만 있으면 가치 있음

2. ATAM 개요

ATAMSoftware Architecture in Practice대표 평가 방법. 트레이드오프·민감점·리스크명시한다.

단계 내용 산출물
1 Plan 이해관계자·비즈니스 드라이버·품질 속성 우선순위 시나리오 후보·유틸리티 트리 초안
2 Present 아키텍처 설명 (C4 Container 등) 공통 이해
3 Analyze 시나리오별 전술·민감점·리스크 sensitivity point·tradeoff 목록
4 Record 우선순위·액션·ADR 평가 리포트·백로그
  • 전체 ATAM은 2~3일 워크숍 — 스타트업은 4단계 축소 버전 흔함
  • 민감점(sensitivity point) — 품질에 영향 주는 파라미터(타임아웃, pool size, replica 수)
  • 트레이드오프 — 한 속성 개선다른 속성 희생

3. 품질 시나리오를 평가 입력으로

6요소 품질 시나리오

요소 의미
Source 자극 주체 10,000 동시 사용자
Stimulus 무슨 일 주문 API 호출
Artifact 대상 Order Service
Environment 조건 피크 시간, 정상 모드
Response 기대 동작 요청 처리 완료
Response measure 측정 p99 500ms 이하, error rate 0.1% 미만

평가에서는 우선순위 높은 속성부터 시나리오 세트고정한다.

단계 질문
시나리오 누가 무엇어떤 조건에서 기대하는가
구조 매핑 C4 어느 Container·경로관여하는가
민감점 어느 설정·의존measure좌우하는가
리스크 미달비즈니스 손실·복구 비용
액션 ADR·백로그·실험
  • Payment PG 동기 호출 — 앞서 Container 경로가 이 시나리오 민감점이 될 수 있음
  • 시나리오 없으면 "느리다"만 반복

4. 평가 시나리오·결과 예제

쇼핑 플랫폼 분기 평가 입력·발견 예시.

{
  "evaluationId": "shop-platform-2026-q3",
  "architectureView": "C4 Container v3",
  "priorityAttributes": ["performance", "availability", "modifiability"],
  "scenarios": [
    {
      "id": "perf-order-peak",
      "source": "10k concurrent customers",
      "stimulus": "POST /orders during flash sale",
      "artifact": "Order API",
      "environment": "peak traffic, dependent services healthy",
      "response": "orders accepted without client timeout",
      "measure": "p99 latency <= 500ms, error rate < 0.1%"
    },
    {
      "id": "avail-payment-db-fail",
      "source": "operations on-call",
      "stimulus": "Payment DB primary instance unavailable",
      "artifact": "Payment API",
      "environment": "production, normal checkout load",
      "response": "checkout continues via failover or graceful degradation",
      "measure": "monthly availability >= 99.95%, MTTR <= 15m"
    },
    {
      "id": "mod-split-inventory",
      "source": "inventory squad",
      "stimulus": "add reservation rule without redeploying Order API",
      "artifact": "Order API, Inventory API boundary",
      "environment": "steady-state development",
      "response": "change isolated to Inventory service and contract tests pass",
      "measure": "lead time for inventory change < 2 days, zero Order API deploy"
    }
  ],
  "findings": [
    {
      "scenarioId": "perf-order-peak",
      "risk": "synchronous Payment PG call extends Order API latency tail",
      "sensitivityPoint": "Payment API timeout and thread pool size",
      "tradeoff": "sync PG vs async payment intent event",
      "action": "ADR-0004 evaluate async payment handoff"
    },
    {
      "scenarioId": "avail-payment-db-fail",
      "risk": "single-region DB without rehearsed failover",
      "sensitivityPoint": "RDS failover DNS TTL and connection pool recycle",
      "tradeoff": "active-passive cost vs multi-AZ always-on",
      "action": "quarterly failover drill + runbook"
    }
  ]
}
필드 용도
priorityAttributes 평가 초점전부 동시 X
findings ATAM 3단계 산출액션까지
action ADR·티켓 링크
  • 부하 테스트·게임데이 결과findings추가
  • 앞서 내고장성·캐시·outbox 전술시나리오 통과기여하는지 매핑

5. 가벼운 평가 vs 정식 ATAM

  Lightweight (2~4h) Full ATAM (2~3d)
참석 핵심 아키텍트·리드 다수 이해관계자
시나리오 3~5 유틸리티 트리 전체
구조 C4 Container 1장 여러 ·배포
산출 리스크 top 5·ADR 공식 리포트·서명
실무 팁  
분기마다 lightweight drift 조기
전환 full 비용 정당화
동일 시나리오 재사용 회귀 평가

6. 민감점·리스크·트레이드오프

용어 정의
Sensitivity point 속성에 영향 설계 요소 Kafka linger.ms, PG timeout
Risk 시나리오 미달 가능성·영향 outbox relay lag → 재고 지연
Tradeoff 선택이득·손해 strong consistency vs availability
Non-risk 우려했으나 구조괜찮음 기록해 재논의 방지
시나리오: Payment DB failover
민감점: connection pool max, DNS TTL
리스크: pool 고갈로 cascade timeout
트레이드오프: multi-AZ 비용 vs MTTR
액션: pool recycle on health flip + drill
  • 민감점부하 테스트·카오스수치 확인
  • 앞서 circuit breaker·bulkhead리스크 완화 전술

7. 기술 부채 관리

기술 부채단기 편의·미완 설계미래 변경 비용커진 상태.

분면 impact / cost 전략
Pay now 높음 / 낮음 즉시 상환 — 알림·계약 테스트
Plan 높음 / 높음 로드맵·ADR·단계 분해
Opportunistic 낮음 / 낮음 해당 영역 수정함께
Accept 낮음 / 높음 명시적 수용·모니터
부채 유형
의도적 MVP 일정 — ADR에 상환 계획
비의도적 문서 없는 경계 침범
환경 런타임·EOL 라이브러리
debt register (예)
- shared order DB read by analytics  | impact high | cost high | plan: CDC ADR-0002
- missing outbox dashboard           | impact high | cost low  | pay now sprint 12
- legacy admin JSP                   | impact low  | cost high | accept until rewrite
  • 부채 등록평가·회고마다 갱신
  • 상환 없이 추가 기능만 — 이자 가속

8. 평가와 문서·ADR 연동

docs/
  c4/02-containers.md
  evaluation/
    2026-q3-scenarios.json
    2026-q3-findings.md
  adr/
    0004-async-payment-handoff.md
연결  
평가 → ADR 트레이드오프 결정 기록
평가 → C4 구조 변경 반영
평가 → 백로그 민감점 튜닝·드릴
ADR Supersede 평가로 가정 깨짐
  • Part 6 마무리문서(C4)·결정(ADR)·검증(평가) 삼각형
  • Living — 분기 평가 후 시나리오·findings 커밋

9. 실무 체크리스트

질문 좋은 답
누가 주도? 아키텍트 + 품질 속성 오너
입력? 우선순위 속성 + 3~7 시나리오
출력? 민감점·리스크·액션 top N
주기? 분기 light + 전환 전 full
부채? register + quadrant 분류
회귀? 동일 measure재평가
안티패턴 대안
체크리스트 시나리오 기반
한 번 평가 분기 회귀
리스크 구두 findings JSON·md
부채 숨김 register 공개
정답 찾기 트레이드오프 문서화

10. 정리

  • 아키텍처 평가품질 시나리오구조 검증
  • ATAM민감점·리스크·트레이드오프 체계 도출
  • 가벼운 워크숍시나리오·C4만으로 실용
  • 기술 부채영향·비용으로 상환 우선순위
  • C4·ADR·평가 연동 — Part 6 완료, Part 7 운영으로

다음에 다룰 것

  • ADR 실전
  • 라이프사이클·팀 합의·저장소 운영

해당 내용은 Software Architecture in Practice, 4/E (Bass, Clements, Kazman) 및 Fundamentals of Software Architecture (Mark Richards, Neal Ford) 의 내용을 기반으로 합니다.

'소프트웨어 아키텍처' 카테고리의 다른 글

팀 토폴로지  (0) 2026.07.11
ADR 실전  (0) 2026.07.10
ADR과 의사결정 기록  (0) 2026.07.08
아키텍처 문서화  (0) 2026.07.07
이벤트 스트리밍과 CDC  (0) 2026.07.06