Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

39장. 무엇부터 정리할 것인가 — 경계 후보의 우선순위

경계 카드가 다섯 장 나왔다.

포인트, 알림, 정산, 배송, 회원.

전부 정리할 수는 없다.

우리에겐 기능 개발도 있고,
이 작업에 쓸 수 있는 시간은 한 달에 며칠이다.


네 축으로 본다

flowchart TB
    V[가치<br/>정리하면 무엇이 좋아지나] --> P((우선순위))
    C[비용<br/>얼마나 걸리나] --> P
    R[위험<br/>깨지면 얼마나 아픈가] --> P
    RD[준비도<br/>안전망이 있나] --> P

각 축을 Agent가 측정할 수 있다.

가치 — 변경 빈도

정리 효과는 앞으로 얼마나 자주 만지느냐에 비례한다.

경계 후보별로 최근 1년 커밋 수를 세어줘.
해당 도메인 파일이 포함된 커밋 기준으로.
후보커밋 수
주문217
결제143
포인트38
알림12
정산9

1년에 9번 만지는 코드를 정리하는 것은
지금 할 일이 아니다.

비용 — 결합도와 흩어짐

경계 카드별로 다음을 세어줘.

- 밖에서 들어오는 의존 개수
- 밖으로 나가는 의존 개수 (순환 포함)
- 도메인 코드가 흩어진 패키지 수
- 공유 테이블 수
후보들어옴나감흩어짐공유 테이블
포인트17341
알림31020
정산4963

🔥 나감 이 비용의 핵심 지표다.

들어오는 의존은 인터페이스로 정리하면 되지만,
나가는 의존은 그 도메인이 남에게 매달려 있다는 뜻이다.

알림은 나가는 의존이 0이다.
떼어내기 가장 쉽다.

위험 — 깨지면 얼마나 아픈가

측정이 아니라 판단이다.

등급
최상결제, 정산 — 돈이 틀리면 되돌리기 어렵다
주문, 재고 — 서비스가 멈춘다
포인트 — 보정 가능
알림 — 재발송하면 된다

⚠️ 첫 대상으로 최상 등급을 고르지 않는다.

방법이 익숙해지기 전에 가장 위험한 곳을 건드린다.

준비도 — 안전망

36장의 결과다.

경계 후보별 테스트 커버리지와
Characterization Test 존재 여부를 정리해줘.

준비도가 낮으면 우선순위와 무관하게
36장으로 돌아가야 한다.


매트릭스에 놓는다

가치와 비용 두 축이면 대개 결정된다.

             비용 낮음        비용 높음
          ┌──────────────┬──────────────┐
가치 높음 │  ① 먼저 한다  │ ③ 쪼개서 한다 │
          ├──────────────┼──────────────┤
가치 낮음 │ ② 연습용      │  ④ 안 한다   │
          └──────────────┴──────────────┘

앞의 표를 놓아보면 이렇다.

  • 포인트 — 가치 중, 비용 중 → ①에 가깝다
  • 알림 — 가치 낮음, 비용 낮음 → ②
  • 정산 — 가치 낮음, 비용 높음 → ④
  • 주문 — 가치 최상, 비용 최상 → ③

첫 대상은 ②에서 고른다

의외의 결론이지만 실무에서 맞다.

첫 번째 작업의 목적은 성과가 아니라 방법 습득이다.

41장의 대규모 이동,
42장의 규칙 강제,
43장의 데이터 정리.

이 셋을 처음 해보는 자리로
가장 위험한 도메인을 고르면 안 된다.

알림 도메인이 좋은 첫 대상인 이유는 이렇다.

조건알림
나가는 의존0
공유 테이블없음
실패 시 영향재발송 가능
트랜잭션 결합없음 (이미 비동기)

🔥 여기서 배운 절차로 포인트를 하고,
포인트에서 배운 것으로 결제를 한다.

첫 경계는 가장 중요한 곳이 아니라
가장 안전한 곳에 긋는다.


순서를 로드맵으로

결정을 문서로 남긴다. 19장의 원칙이다.

# 경계 정리 로드맵

## 1차 (연습) — 알림
목표: 절차 확립. 의존성 테스트 도입.
예상: 2주

## 2차 — 포인트
목표: 순환 의존 제거, 데이터 소유권 회복
선행: point → order 역참조 3곳 제거
예상: 6주

## 3차 — 정산 배치
목표: 계층 정리만. 분리는 하지 않음

## 보류 — 주문·결제
이유: 변경이 잦아 리팩터링과 기능 개발이 충돌
재검토: 2차 완료 후

## 하지 않음 — legacy
이유: 신규 개발 없음. 제거 대상

⚠️ 하지 않음 절이 중요하다.

적어두지 않으면 6개월 뒤에
“이건 왜 안 했지” 를 다시 논의한다.

20장의 Non-goals와 같은 역할이다.


Agent에게 우선순위를 묻지 않는다

38장과 같은 이유다.

# ❌
어느 도메인부터 정리하면 좋을까?

# ✅
docs/boundaries/ 의 경계 카드들을 읽고
각 후보의 지표를 표로 정리해줘.

- 최근 1년 커밋 수
- 들어오는/나가는 의존 개수
- 흩어진 패키지 수
- 공유 테이블 수
- 테스트 커버리지

순위는 내가 정할게.

위험 판단과 조직 사정은 코드에 없다.

  • 다음 분기에 이 도메인을 크게 개편할 예정이다
  • 이 영역 담당자가 다음 달에 퇴사한다
  • 규제 감사가 있어서 정산은 건드릴 수 없다

세 가지 모두 우선순위를 뒤집는 정보이고,
Agent는 알 수 없다.


이 장의 핵심

  • 전부 정리할 수 없으므로 순서를 정해야 한다
  • 축은 넷이다 — 가치(변경 빈도), 비용(결합도), 위험, 준비도
  • 나가는 의존이 비용의 핵심 지표다 — 그 도메인이 남에게 매달려 있다는 뜻이다
  • 들어오는 의존은 인터페이스로 정리할 수 있다
  • 첫 대상으로 가장 위험한 도메인을 고르지 않는다
  • 첫 작업의 목적은 성과가 아니라 방법 습득이다
  • 첫 경계는 가장 중요한 곳이 아니라 가장 안전한 곳에 긋는다
  • 로드맵에 “하지 않음” 과 그 이유를 함께 적는다
  • 위험 판단과 조직 사정은 코드에 없다 — 순위는 사람이 정한다