핵심요약
쏘카의 차량 재배치 시스템 레거시를 AWS DMS 및 Kafka 기반으로 전환하고, 책임 분리와 전략 패턴을 적용하여 코드 품질과 유지보수성을 향상시킨 기술 리팩터링 사례입니다.
레거시 차량재배치 시스템 리팩터링 및 아키텍처 개선
레거시 시스템 문제점 및 개선 목표
- 거대 클래스로 인한 코드 파악 및 수정의 어려움, 심각한 사이드이펙트 발생 우려.
- Maxwell 및 Kinesis 사용으로 인한 유지보수 어려움 및 장애 대응 한계.
- 기술 스택을 AWS DMS 및 Kafka로 표준화하여 시스템 안정성 및 개발 효율성 증대.
아키텍처 변경 및 책임 분리
- 기존 Kinesis 기반 아키텍처를 Spring Kafka 기반으로 전환하여 기술적 종속성 제거.
CarRelocationKafKaController는 파라미터 유효성 검증을,CarRelocationService는 비즈니스 로직 처리를 담당하도록 책임 분리.- 비즈니스 로직은
CarRelocationDrivingService또는CarRelocationCancelService가 파라미터 상태에 따라 처리. - 패키지는
app(비즈니스 로직)과infra/kafka(기술적 로직)로 구분하고kafka/converter를 통해 데이터 변환.
구현 상세 및 테스트 코드 적용
- KafkaListener는 카프카 토픽 메시지를 수신하여 코틀린 객체로 변환.
- KafkaReservationController는 파라미터 유효성 검증 및 DTO 변환 역할 수행.
- 각 클래스의 책임에 맞춰
KafkaReservationControllerTest및CarRelocationServiceTest작성. - 비즈니스 로직 처리 유무 및 동작 결정을 테스트하여 코드 신뢰성 확보.
전략 패턴 기반 리팩터링
CarRelocationService의carRelocationCancelService와carRelocationDrivingService직접 참조 문제 해결.CarRelocationActionServiceSelector를 추가하여 예약 상태에 따른 행동 클래스 선택 로직 분리.- **의존성 주입(DI)**을 통해 유연성 확보 및
CarRelocationService의 변경 최소화. - 이로써 새로운 상태 추가 시
CarRelocationService수정 없이 확장성을 높임.