문서
카트 개발 연대기
김진실 · 컬리 · 컬리 기술 블로그
소개
컬리 카트는 어떤 모습으로 성장하고 있을까?
AI 핵심 요약
컬리 카트는 주소지에 따른 물류센터별 상품·재고 조회와 레거시 구조 개선을 위해 Laravel 기반으로 여러 차례 재설계됐다. 1세대에서는 Controller를 Service와 Interface로 나누고 Eager Loading 및 Cart Response 객체를 도입했지만, 레거시와 신규 테이블에 동시에 쓰는 Stack Cart는 기존 데드락과 성능 문제를 악화시켰다. 이후 Modern Cart는 선형 데이터 구조와 주문서 호환을 위해 주문서 진입 전 부분 마이그레이션을 적용했고, Multi Cart에서는 세션별 카트를 강제로 합치는 대신 카트 아이템을 공유해 경합을 줄였다. 카트의 진화는 데이터 구조뿐 아니라 동시성, API 배포·롤백, 주문서 연동을 함께 설계해야 함을 보여주며, 다음 단계에서는 불필요한 쓰기를 줄이고 대규모 트래픽을 안정적으로 처리하는 것을 목표로 한다.
- 레거시 코드를 한 번에 교체하기보다 Interface와 Service로 분리해 다음 단계의 변경 기반을 마련할 수 있다.
- Dual write는 데이터 마이그레이션을 돕지만, 기존 시스템의 데드락 문제가 남아 있으면 장애를 키울 수 있다.
- 앱 API 규격이 바뀐 뒤에는 강제 업데이트가 필요할 수 있으므로, 배포와 롤백 가능성을 함께 고려해야 한다.
- 여러 세션의 카트를 하나로 강제 병합하는 대신 아이템을 공유하면 세션 간 경합을 줄일 수 있다.