
팀 레거시 개선 (2) 쏘카존 관리 시스템 - 차량재배치 리팩터링
두줄요약
거대 클래스에 섞인 Kinesis·비즈니스 로직을 Spring Kafka 기반 계층 구조로 분리했습니다. 상태별 처리에는 선택자를 도입해 테스트성과 확장성을 높였습니다.
문제 상황
- 키네시스·스프링·차량재배치 비즈니스 로직이 하나의 거대 클래스에 혼재
- 수정 범위 파악 어려움과 사이드이펙트 우려, 테스트코드 부재
- 조직 표준과 다른 Maxwell·Kinesis 사용으로 장애 대응과 유지보수 부담
구조와 흐름
- 기술 로직인
infra/kafka와 차량재배치 비즈니스 로직인app분리 KafkaListener의 메시지 수신·변환, Controller의 유효성 검증·DTO 변환, Service의 처리 결정으로 책임 분리- 예약 상태별 실제 처리 로직을 취소·운행 서비스로 위임
선택 이유
- Kinesis를 Spring Kafka로 교체하면서 비즈니스 로직 재사용
- 상태별 서비스를 선택하는
CarRelocationActionServiceSelector추가로 Service의 직접 의존성 축소 - 상태 추가·변경 시 선택자와 구현체 중심의 확장 구조
성능/운영 포인트
- 클래스별 책임 기반 테스트와 기술 검증용 learning 테스트 분리
- 오류 발생 책임 위치 추적 용이성 및 기술 교체 시 비즈니스 로직 변경 최소화


