발표 목표와 네 원칙 예고
DDD·MSA·JPA 같은 이론과 달리 시간과 요구사항에 쫓기는 현실을, 지키기 쉬운 네 가지 원칙만 적용해 더 나은 시스템으로 개선한 방법을 공유하겠다고 클레임 파트 담당자가 발표를 연다.
클레임을 '주문에 대한 변경'으로 정의한다. 최초 결제 금액에서 취소·교환·반품 후 금액을 빼 돈 계산을 정확히 해야 하며, 주문 당시 스냅샷을 기준으로만 계산한다는 원칙을 설명한다. 커머스의 정점에 있어 확장성이 없으면 신규 기능을 막는 억제기가 된다고 짚는다.
주문 상태(입금 전·후, 배송 전·후)별로 전체 취소, 옵션 취소, 취소 교환, 반품, 반품 교환의 다섯 클레임이 나뉘고 각각 계산 로직이 조금씩 다름을 정리한다. 귀책에 따라 반품·교환 배송비를 구매자 또는 판매자가 분담하는 조정 과정까지 얽혀 복잡하다고 설명한다.
레거시에서 한 덩어리에 if 분기로 엉켜 사이드이펙트가 잦던 계산 로직을, 다섯 도메인별 클래스로 분리해 결합도를 낮춘다. 공통 계산은 앱스트랙트 클래스로 모으고 도메인마다 달라지는 부분은 앱스트랙트 펑션으로 각 구현체가 책임지도록 설계를 바꾼다.
양방향 참조로 순환 참조가 나던 구조를 도메인·애플리케이션·프레젠테이션·인프라 레이어로 나눠 밖으로 나가는 참조를 막는 일방통행으로 만든다. 도메인이 주문 MSA를 조회해야 하는 역참조는 도메인에 인터페이스를 두고 인프라에 오더 어댑터를 구현해 해결한다.
한 덩어리 시절엔 특정 경우에만 필요한 값까지 다 받아 내부에서 밸리데이션을 반복해야 했다. 도메인별로 나눈 뒤에는 각자 꼭 필요한 값만 받도록 바꿔, 들어온 매개변수를 신뢰하고 쓸 수 있어 테스트·유지보수가 쉬워졌다고 설명한다.
로직이 한 덩어리라 테스트도 거대해 현행화를 포기하던 문제를, 도메인을 나눠 작은 단위로 만든다. 외부 의존성을 모킹하고 유료·무료 배송 등 조건을 미리 정의한 파라미터라이즈드 테스트로 배송비 계산을 검증하는 사례를 보여준다.
모을 건 모으고 나눌 건 나누기, 헥사고널의 일방통행, 매개변수 최소화, 테스트 케이스라는 네 원칙을 정리한다. 코틀린의 생산성과, 모든 피처를 코드리뷰하는 팀 문화가 좋은 구조를 만든다는 점을 강조하고 리팩터링을 권하는 시로 마무리한다.