T
TechInsights
목록으로
Architecture•2025. 09. 10.

애셋팀 레거시 개선 (2) 쏘카존 관리 시스템 - 차량재배치 리팩터링

쏘카
쏘카 Engineering Team
애셋팀 레거시 개선 (2) 쏘카존 관리 시스템 - 차량재배치 리팩터링

핵심요약

원문 보기

쏘카의 차량 재배치 시스템 레거시를 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 수정 없이 확장성을 높임.
#Architecture#BackEnd#Infra
쏘카
쏘카

쏘카 Engineering Team

기술 인사이트를 전달하는 공식 채널

You might also like

View all
토스 피플 : 새로운 길을 만들 땐 내 선택을 믿는다

토스 피플 : 새로운 길을 만들 땐 내 선택을 믿는다

"이 버튼 왜 안 눌려요?" 물류 현장의 목소리로 PDA 시스템 완성하기

"이 버튼 왜 안 눌려요?" 물류 현장의 목소리로 PDA 시스템 완성하기