레거시 시스템의 문제점 진단: 10년 가까이 유지된 거대한 모놀리식 BROS 시스템은 많은 도메인을 포함하고, 메인 DB에 과도하게 의존하며, R&R이 불분명한 공통 모듈(Delivery Service)로 인해 과도한 커뮤니케이션 비용과 높은 코드 복잡도(스파게티 코드)를 겪고 있었습니다. 🍝
과제 목표 설정: 개발 생산성 향상(스파게티 코드 제거, R&R 명확화, 코드 분리)과 시스템 안정성 향상(DB 성능 확보, 테스트 커버리지 상승)을 핵심 목표로 삼았습니다. 🎯
전략적 모듈 분리 및 역할 재정의: 공통 모듈을 D1(핵심), D2(배달 관련), D3(기타)로 분류하고, 라이더 서버의 D1 직접 참조 제거, 라이더/메신저 서버의 D2 직접 참조 제거, 라이더 메시지 및 문의 내역 도메인을 별도 서버/모듈로 분리하여 공통 모듈을 경량화했습니다. 🏗️
복잡한 이벤트 리스너 간소화: 19개의 후처리 이벤트 리스너를 5개로 줄이고, 직접 메소드 호출 방식으로 전환하여 코드 복잡도를 낮추고 트랜잭션 범위를 최소화했습니다. 🧹
서버 역할 및 책임 명확화: 라이더 서버의 배달 수행 역할을 배달 서버로 위임하고, 액터 의존 로직을 제거하여 각 서버의 R&R을 명확히 했습니다. 메신저 서버는 라이더 메시지 도메인을 전담하도록 확장했습니다. 🧑💻
DB 성능 개선: 가장 많이 호출되는 API의 반복적인 DB 조회와 긴 트랜잭션을 개선하기 위해 배달 서버를 통해 DB 사용을 위임하고, 리더 DB 활용, 트랜잭션 범위 최소화, 응답 크기 경량화를 진행했습니다. ⚡
코드 품질 향상: 1만 라인 이상의 공통 모듈 코드 제거, 순환 및 인지 복잡도 감소, 테스트 커버리지 30% 초반에서 36%로 상승, 품질 게이트 조건 강화 등의 성과를 달성했습니다. 📈
안정적인 배포를 위한 비법: 피처 플래그를 모든 개발 업무에 강제 적용하여 점진적 배포와 빠른 롤백을 가능하게 했고, JSON Diff Log 유틸리티로 배포 전 심리적 안정감을 확보했습니다. 🚦
지속적인 개선 문화: 보이 스카웃 규칙(미사용 로직 제거, 코드 수정 시 테스트 코드 작성, 가독성/명확성 집중)과 지속적인 의사 결정(가장 중요한 것, 효율적인 것, 충분한 논의 반복)을 통해 개선 문화를 정착시켰습니다. 🏕️
협업과 지원의 중요성: 비참여 인원들의 긴급 요청 방어와 실 차원의 적극적인 지원 및 일정 조율이 과제 성공에 결정적인 역할을 했습니다. 🙏
성과 및 배운 점: 4개월간의 개선 작업 동안 장애 발생 없이 주요 API 레이턴시 감소, DB CPU 사용량 감소, 응답 크기 경량화 등의 성과를 얻었으며, 아키텍처 개선뿐 아니라 문제 해결 과정과 팀 협업 경험을 통해 성장했습니다. 🏆