피드로 돌아가기
컬리에서 선물하기를 개발하며 회고
컬리 기술블로그컬리 기술블로그
Backend

컬리에서 선물하기를 개발하며 회고

컬리 주문개발팀이 PHP 레거시 시스템과 신규 주문 서버를 Dual Writing으로 연동하여 선물하기 서비스 론칭

2020년 9월 3일8intermediate

Context

컬리의 주문 서비스는 PHP 기반 고도몰 레거시 시스템으로 구성되어 있으며, 모노리틱한 단일 데이터베이스 구조로 인해 새로운 마이크로서비스 기반 서비스 론칭이 어려웠다. 8명의 개발팀이 기존 서비스 운영과 신규 서비스 개발을 동시에 진행해야 했으며, 물류 시스템까지 자체 운영하는 특성상 신중한 접근이 필수였다.

Technical Solution

  • 신규 주문 서버를 레거시 시스템과 분리된 독립적인 생태계로 구성: 별도의 선물 주문 도메인 구축으로 기존 프로세스 유지
  • Dual Writing 방식으로 데이터 동기화: 신규 데이터베이스에 기록된 정보를 기존 레거시 데이터베이스로 동시에 동기화
  • 데이터 정합성 장치 마련: Dual Writing 장애 발생 시 회복 가능하도록 정합성 검증 메커니즘 구성
  • 역할 별 분산 서버 구조 도입: 부하 발생 시 서버 단위별 스케일아웃 용이하도록 설계
  • Message Queue와 Throttling을 위한 구조 사전 설계: 향후 서버 부하 증가 시 즉시 적용 가능하도록 아키텍처 구성
  • 레거시 운영 정책 분석 및 호환성 유지: 기존 업무 툴, 고객 상담, 물류 전송, 적립금 지급, 배송 완료 프로세스와의 호환성을 최우선으로 설계

Impact

QA 단계에서 1,000개의 이슈 발생 및 해결을 통해 장애 없는 배포 달성. 2020년 9월 2일 선물하기 서비스 론칭 성공.

Key Takeaway

레거시 시스템을 한 번에 교체하는 것이 불가능할 때, Dual Writing을 통한 점진적 데이터 동기화와 별도의 마이크로서비스 생태계 구축은 기존 운영 프로세스를 유지하면서 신규 기능을 안전하게 론칭할 수 있는 검증된 패턴이다. 향후 신규 시스템의 독립성 확보 시 기존 DB에서 분리할 수 있도록 사전 설계하는 것이 중요하다.


PHP 모노리틱 레거시 시스템을 개선하는 엔지니어팀에서 마이크로서비스로 전환할 때, 기존 업무 프로세스와의 호환성이 필수 요구사항이라면 신규 도메인만 독립적으로 분리하고 Dual Writing으로 동기화하되, 데이터 정합성을 검증하는 회복 메커니즘을 반드시 구축해야 한다. 이를 통해 기존 운영팀의 업무 방식 변경 없이 신규 서비스를 단계적으로 론칭할 수 있다.

원문 읽기