pile·
백엔드·마켓컬리마켓컬리 Hello World·

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

컬리 주문서비스개발팀이 새 주문 서버를 만들며 첫 서비스로 선물하기를 출시한 회고다. 카카오톡으로 상품을 선물하고 수령인이 주소를 입력하는 서비스를, 레거시 PHP 모놀리식과 호환을 유지하며 dual write로 구축한 과정을 다룬다.

핵심 포인트
  • 선물하기는 새 주문 서버의 첫 출시 서비스로, 레거시와의 호환 유지가 핵심 과제
  • 레거시가 고도몰(PHP) 기반 모놀리식·단일 DB라 분산 시스템 구축 시 단일 장애점(SPOF) 우려
  • 신규 DB와 레거시 간 dual write로 데이터를 동기화해 운영 호환성을 유지
  • 혁명적 교체가 아니라 점진적(evolutionary) 방식으로 별도 선물 주문 생태계를 구성
  • 분산 서버 구조로 수평 확장이 가능하고 필요 시 메시지 큐 스로틀링 여지 확보
상세 정리
  • 서비스 정의: 고객이 상품을 사서 카카오톡 메시지로 선물하면 수령인이 배송지를 입력해 받는 구조로, 여러 커머스가 유사 서비스를 내던 시점의 요구사항이었다.
  • 어려움 1: 레거시가 고도몰 솔루션(PHP) 기반 모놀리식에 단일 DB라, 분산 시스템을 붙일 때 단일 장애점이 될 수 있었다.
  • 어려움 2: 8명 규모의 주문개발팀이 운영과 신규 개발을 동시에 감당해야 했다.
  • 어려움 3: 기존 서비스들과 요구사항을 조율하며 촉박한 일정을 맞춰야 했다.
  • 개발 방식: 신규 주문 서버는 신규 DB와 레거시 사이에 dual write로 데이터를 동기화해 호환성을 유지했고, 급격한 교체 대신 기존 프로세스와 호환되는 별도 선물 주문 생태계를 점진적으로 구축했다.
  • 확장성: 분산 서버 구조로 수평 확장을 가능하게 했고 필요하면 메시지 큐로 스로틀링할 여지를 뒀다.
  • 운영 호환 고려: 일정 준수, 도메인 전문가 개입 범위, 기존 시스템에 맞춘 상품 구성, 연관 서비스팀 요청 최소화를 함께 고려했다.
  • 배포·QA: 8월 말 연관 도메인 배포 후 9월 2일 출시했고, 출시 전 1000건 이상의 QA 이슈를 만들고 해소하며 한 달간 QA 기간을 둬 운영 장애를 예방했다.
왜 읽나레거시 PHP 모놀리식과 호환을 유지하며 새 주문 서버로 점진 이관하려는 백엔드 개발자에게 dual write·분산 구조·QA 전략의 회고 레퍼런스.
마켓컬리
마켓컬리 Hello World 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 백엔드·github-engGitHub Engineering·

    조기 종료를 없애야 벡터화된다 — 메모리 속도 소스 코드 케이스 폴딩

    GitHub의 코드 검색 엔진 Blackbird는 480TB 이상의 소스 코드를 인덱싱하기 전 모든 바이트에 case folding을 적용한다. 이 글은 Rust로 구현한 case folding을 메모리 대역폭 한계(45+ GiB/s)까지 끌어올린 두 가지 반직관적 최적화를 상세히 다룬다. 핵심은 루프 조기 종료(break) 제거로 LLVM 벡터화를 유도하고, UTF-8을 디코딩하지 않고 바이트 공간 산술만으로 fold를 수행하는 것이다.

    #rust#unicode#simd+2
  2. 백엔드·여기어때 (GC컴퍼니)여기어때 (GC컴퍼니)·

    트랜잭션 스크립트에서 숙소 메타 + 가격 계산 모듈로 — 전시 아키텍처 개선기 (2/3)

    여기어때 전시개발팀이 숙소 상세(PDP) API를 해부한 결과, 코드상으로는 DB 호출 3번처럼 보이던 요청이 실제로는 MongoDB $lookup 체인으로 컬렉션을 19회 접근하는 구조였다. 이 트랜잭션 스크립트 방식의 핵심 문제는 "aggregation이 I/O를 가린다"는 점으로, 독립적인 쿼리 10개가 단일 파이프라인에 직렬화되어 병렬화 기회를 잃고, 가격 때문에 거의 안 바뀌는 이미지까지 매 요청마다 읽어야 하는 읽기 증폭이 발생했다. V3에서는 "조회 시점 조립"을 "쓰기 시점 사전 조립"으로 전환하고, 화면별로 복제되던 가격 계산 로직을 goodsprice 단일 모듈로 수렴했다. 4개 API(PLP/PDP/RDP/ILP)의 반복 마이그레이션은 Claude Code skill로 절차를 고정하고 쉐도잉 + 동일성 검증으로 안전망을 마련하는 방식으로 진행됐다.

    #architecture#migration#caching+2