이 문장을 설계 의사결정으로 번역하면
- 결합도 줄이기 = 변화의 파급 반경(blast radius) 최소화
- 되돌릴 수 있는 선택 늘리기 = 롤백/우회/토글/병행운영 같은 ‘탈출구’ 확보
바로 적용되는 실행 체크리스트
1) 결합도 줄이기 (파급 반경 줄이기)
- DB 공유 금지: 다른 모듈이 내 테이블/컬럼에 직접 의존하면 결합도 폭발
- 직접 호출 줄이기: A→B 동기 호출은 장애 전파 통로. 가능하면 이벤트/큐/배치로 완충
- 계약(Contract) 고정: 내부 구현보다 API/DTO 스키마가 진짜 인터페이스. 버전 관리/호환성 우선
- 경계 명확화: “이 기능의 소유자는 누구인가”가 명확해야 변경이 안전해짐(모듈/도메인 단위)
2) 되돌릴 수 있는 선택 늘리기 (탈출구 만들기)
- Feature Toggle 기본값 ON/OFF 설계: 배포=기능출시가 아니게 만들기
- Backward Compatible 마이그레이션:
- 1단계: 컬럼/테이블 추가(기존 코드 영향 0)
- 2단계: dual-write 또는 shadow-read
- 3단계: 전환 스위치
- 4단계: 청소(기존 제거)
- Blue/Green or Canary: 한 번에 전량 반영하지 말고 “부분 노출”로 리스크 분산
- Kill Switch: 장애 시 즉시 끌 수 있는 스위치(특히 외부 연동/대량 배치)
“되돌릴 수 있는 선택”의 최소 조건 3개
- 롤백 가능한 배포물(이전 버전 재배포 or 이미지/아티팩트 보관)
- 데이터가 되돌릴 수 있게 설계(파괴적 변경 금지, 호환 마이그레이션)
- 운영자가 끌 수 있는 장치(토글/설정/우회 경로)
한 줄로 더 날카롭게 다듬으면
- “결합도는 비용의 전파 속도다. 전파를 늦추고, 탈출구를 늘려라.”
LIST
'Spring & Backend > Architecture' 카테고리의 다른 글
| 설계 문서는 완성도가 아니라 공통 이해를 만든다 (0) | 2026.02.06 |
|---|---|
| 추상화는 자유를 주지만, 과하면 방향 감각을 잃는다 (0) | 2026.02.06 |
| 미래를 대비한 설계는 필요하지만, 미래를 가정한 설계는 위험하다. (0) | 2026.02.04 |
| 좋은 설계는 똑똑해 보이지 않고 안전해 보인다. (0) | 2026.02.04 |
| 설계는 정답을 고르는 게 아니라 변경 비용을 정하는 일이다 (1) | 2026.02.04 |
