이 문장을 설계 의사결정으로 번역하면

  • 결합도 줄이기 = 변화의 파급 반경(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개

  1. 롤백 가능한 배포물(이전 버전 재배포 or 이미지/아티팩트 보관)
  2. 데이터가 되돌릴 수 있게 설계(파괴적 변경 금지, 호환 마이그레이션)
  3. 운영자가 끌 수 있는 장치(토글/설정/우회 경로)

한 줄로 더 날카롭게 다듬으면

  • “결합도는 비용의 전파 속도다. 전파를 늦추고, 탈출구를 늘려라.”
LIST

+ Recent posts