컬리의 새로운 배송 시스템 구축 과정과 프로젝트에서 얻은 교훈을 소개합니다.
- 들어가며
- 새로운 배송 시스템 설계
- 우리가 일한 방식
- 점진적 시스템 전환을 위한 아키텍처 설계
- 점진적 시스템 전환을 위한 계획
- 3주간의 시스템 전환 이야기
- 프로젝트에서 얻은 주요 교훈
- 아쉬운 점. 앞으로 비슷한 프로젝트를 하게 된다면..
- 컬리 딜리버리프로덕트와 함께할 인재를 찾습니다.
새로운 배송 시스템 구축 배경
안녕하세요. 컬리 딜리버리프로덕트개발팀에서 일하고 있는 한경훈입니다.
컬리는 샛별배송 서비스를 통해 업계에 혁신적인 변화를 일으키며 고객들에게 높은 가치를 제공해왔습니다. 샛별배송은 밤 11시 이전에 주문된 상품을 다음날 아침 7시 전까지 신속하게 고객의 문 앞에 배송하는 새벽배송 서비스로, 빠른 속도와 높은 신선도로 큰 인기를 끌고 있습니다.
2023년은 컬리의 샛별배송에 있어 중요한 전환점이 된 해였습니다. 기존 배송 시스템을 전면 교체하는 대규모 프로젝트를 통해, 컬리는 배송 효율성과 안정성을 한층 더 향상시킬 수 있는 새로운 배송 시스템을 구축했습니다.
새로운 배송 시스템을 개발하는 과정에서 예상치 못한 어려움과 도전 과제가 있었지만, 1년이 지난 지금, 컬리는 안정적인 전환을 성공적으로 이뤄내며 시스템 전환 1주년을 맞이하게 되었습니다. 이 글에서는 전환 1주년을 맞아 시스템 전환 과정에서 경험한 것과 배운 점들을 소개하고자 합니다.
기존 배송 시스템의 한계와 새로운 배송 시스템 구축의 필요성
컬리의 기존 배송 시스템은 SaaS 기반의 TMS(운송관리시스템) 제품이었습니다. SaaS는 빠른 도입과 낮은 초기 비용이라는 장점이 있지만, 특정 비즈니스 요구에 맞춰 커스터마이징하는 데에는 한계가 있었습니다.
컬리의 배송 서비스는 일반적인 택배 배송과 유사해 보이지만, 새벽배송을 완수하기 위해서는 컬리만의 고유한 특성과 노하우가 필요했습니다. 컬리의 배송 노하우를 시스템에 반영하려면, 빠르게 실험하고 수정하며 최적의 시스템을 찾아가는 방식이 필수적이었고, 이를 위한 긴밀한 협업이 필요했습니다.
그러나 SaaS 시스템을 수정하려면 회사 간 협업이 필요하고, 범용적인 시스템의 한계로 속도와 유연성 측면에서 제약이 있었습니다. 또한, 성능 제약으로 인해 대규모 조회나 다운로드 작업 시 조건을 제한해야 했고, 그로 인해 배송 모니터링이나 분석 작업에서 비효율이 발생하기도 했습니다.
시간이 지날수록 방향과 속도의 격차가 더욱 커질 것으로 예상되었고, 컬리는 이를 해결하기 위해 새로운 배송 시스템을 구축하기로 결정했습니다.
배송 프로세스를 이해하기
2022년 12월, 새로운 배송 시스템 설계가 본격적으로 시작되었습니다.
설계의 첫 단계로, 우리는 배송에 필요한 전 과정을 깊이 이해하는 데 집중했습니다. 이를 위해 컬리넥스트마일과의 인터뷰를 통해 현장의 문제와 요구 사항을 직접 듣고, 스터디를 진행했습니다. 또한, 현장 매뉴얼을 검토하여 각 단계별 필요한 작업과 절차를 세밀하게 파악했습니다.
이와 함께, 기존 SaaS 업체에 요청했던 이력과 우선순위 자료도 면밀히 분석했습니다. 이를 통해 반영되지 않은 기능과 시급히 개선이 필요한 부분을 확인할 수 있었습니다. 이 정보들은 새로운 시스템 설계 시 우선적으로 고려할 사항을 정리하고, 설계 방향을 명확히 설정하는 데 큰 도움이 되었습니다.
컬리의 배송 운영은 자회사인 컬리넥스트마일이 담당하고 있으며, 컬리넥스트마일은 컬리의 빠르고 정확한 배송을 뒷받침하는 중요한 역할을 수행하고 있습니다.
효율적인 협업을 위한 도메인 영역 정의
배송 프로세스를 깊이 이해한 후, 우리는 배송 시스템의 도메인 영역을 체계적으로 정의했습니다. 우리는 도메인을 크게 두가지로 구분했습니다.
- 배송 매니저, 차량 등 자원을 관리하는 영역(녹색 박스)
- 운송장을 처리하고 배송을 수행하는 영역(보라색 박스)
또한, 각 도메인 간의 연관관계를 시각적으로 표현하여 시스템을 명확히 이해할 수 있도록 했습니다.
이 작업을 통해 구성원들이 시스템의 구성 요소와 상호 의존 관계를 일관되게 이해할 수 있게 되었으며, 나아가 프로젝트의 조직 구조를 효율적으로 설정하고 각 조직의 역할과 책임을 명확히 분배하는 데 중요한 기준이 되었습니다.
스쿼드 체계와 상호 보완적 협업
우리는 프로젝트를 효율적으로 추진하기 위해 스쿼드 체계를 도입했습니다. 스쿼드는 다양한 기능을 가진 팀원들이 모여 자율적으로 목표를 달성하는 소규모 팀 단위로, 이 체계의 가장 큰 장점은 상호보완적 협업과 목표 지향성에 있습니다.
우리는 리소스의 부족을 한계로 여기지 않고, 모든 팀원이 공통된 목표를 중심으로 각자의 강점을 발휘하고, 부족한 부분을 서로 보완할 수 있는 환경을 만들기 위해 끊임없이 노력해왔습니다. 더 자세한 내용은 우리의 경험을 바탕으로 작성한 글, "지난 9개월간의 딜리버리프로덕트팀의 경험과 변화에 대한 이야기: 애자일"에서 확인할 수 있습니다.
효과 중심의 반복 점진 개발
프로젝트는 4개의 마일스톤으로 나누어 관리되었습니다. 각 마일스톤은 2~4개의 스프린트로 구성되었으며, 컬리넥스트마일과 주기적으로 리뷰 세션을 진행하며 기능을 점검하고 피드백을 반영했습니다.
이 과정의 핵심은 중요한 기능을 신속하게 구현하고 우선 검증하여, 사용자에게 가치 있고 안정적으로 작동하는 제품을 만드는 것이었습니다.
초기 마일스톤(1, 2)에서는 운송장 접수부터 배송 완료까지의 필수 기능과 자원 계획을 구축했습니다. 이 단계에서는 배송을 진행하는데 필요한 핵심 기능을 먼저 구현하고, 제대로 작동하는지 검증하는 데 중점을 두었습니다.
이후 단계(마일스톤 3, 4)에서는 기존의 핵심 기능을 보강하고, 권역 관리, 알림 시스템, 배송 이슈 처리와 같은 주변 도메인 기능을 추가해 시스템의 완성도를 높였습니다.
컬리는 하루에 수십만 건의 배송을 처리하며, 특히 아침 7시까지 배송 완료를 목표로 하기 때문에 시스템의 안정성이 매우 중요합니다. 시스템에 오류가 발생하면 지연 배송으로 이어져 고객 경험에 부정적인 영향을 미칠 수 있기 때문에, 새로운 배송 시스템으로의 전환은 신중하게 진행되어야 합니다.
이를 위해, 컬리는 기존 시스템과 새로운 시스템을 동시에 운영하면서 단계적으로 운영 권역을 확장하는 전략을 채택했습니다. 이 접근 방식은 전환 리스크를 줄이고 새로운 시스템의 안정성을 점진적으로 확보할 수 있는 장점이 있습니다.
또한, 시스템 전환을 위해 필요한 기능을 SaaS 업체에 요청하는 것은 현실적으로 어려웠기 때문에, 컬리는 새로운 배송 시스템만을 활용한 전환 계획을 수립해야 했습니다.
배송 요청 분배 시스템 선정
기존 배송 시스템은 컬리몰과 TOMS로 부터 배송 건들을 요청받아 처리하고 있었습니다. 이 과정은 Kafka를 통해 비동기 방식으로 처리되며, 두 개의 토픽(Topic)으로부터 배송 요청을 수신합니다. 그러나 이 구간은 컬리가 직접 제어할 수 없는 영역이기 때문에, 요청을 어떻게 분배할지에 대한 고민이 필요했습니다.
참고로, TOMS는 컬리 외 다른 회사에서 컬리넥스트마일과 계약을 체결한 후 새벽 배송을 요청할 수 있는 시스템으로, 현재 다양한 거래처가 TOMS를 통해 새벽 배송을 요청하고 있습니다.
1안은 컬리몰과 TOMS에서 각 배송 시스템으로 요청을 분배하여 전송하는 방안이었습니다. 이 방법은 배송 시스템이 처리해야 할 물량을 정확하게 요청받을 수 있어 깔끔한 접근이지만, 시스템 전환 과정에서 협력해야 할 시스템과 조직의 범위가 넓어지는 단점이 있습니다. 수정해야 할 시스템의 수가 많아짐에 따라 수정 비용과 협력 부담이 증가하고, 버그나 장애 발생 가능성도 높아집니다. 또한, 점진적으로 확장하는 과정에서 롤백이 필요할 경우, 다른 부서의 도움을 받아야 조치가 가능합니다.
2안은 신규 배송 시스템이 기존 시스템에서 수신하는 토픽(Topic)을 동일하게 수신하는 방안입니다. 전체 요청을 모두 수신하고, 신규 시스템에서 처리할 요청만 선별하여 처리합니다. 기존 시스템에 운영되지 않는 요청이 접수되더라도, 운영에 사용하지 않으면 되는 문제이고, 롤백이 필요할 때 추가 작업 없이 기존 시스템을 활용할 수 있는 장점이 있습니다. 2안은 수정 사항이 적고, 협업 조직이 더 이상 늘어나지 않으며, 자체적으로 검증 및 대응이 가능한 형태입니다.
우리는 2안을 선택하였습니다.
점진적 시스템 전환 및 롤백을 위한 설계
단계적인 운영 확장 및 롤백을 위해 세 가지를 중점적으로 고려했습니다.
첫째, 두 시스템의 배송 권역을 동일하게 설정했습니다. 배송 권역은 컬리넥스트마일이 지역을 관리하는 단위로, 배송 과정의 오프라인 운영과 밀접한 연관이 있습니다. 만약 두 시스템이 동일한 주소지에 대해 다른 권역을 판단하면 운영에 혼란이 생기고, 롤백이 어려워질 수 있습니다. 이를 방지하기 위해 기존 시스템의 권역 데이터를 새로운 시스템으로 복제하여 동일한 권역 설정을 유지했습니다. 또한, 두 시스템을 동시에 운영하는 동안 권역을 수정하지 않기로 했으며, 판단 로직의 차이로 권역이 달라질 경우, 신규 시스템은 기존 시스템의 판단 결과를 따르고 차이를 로깅하여 추적할 수 있도록 했습니다.
둘째, 신규 배송 시스템에 모든 배송 데이터를 통합했습니다. 두 시스템을 동시에 운영하는 동안 각 시스템의 배송 정보가 분리되지 않도록, 모든 배송 건을 한곳에 모으고 검증할 수 있도록 설계했습니다. 이를 통해 컬리몰과 TOMS에서도 단일 시스템으로부터 일관된 배송 트래킹 정보를 제공받을 수 있었습니다.
기존 배송 시스템의 한계 사항으로 다운로드 성능 이슈에 대해 언급드린 적이 있습니다. 당시 다운로드 성능 문제를 해결하기 위해, 기존 배송 시스템의 데이터를 컬리 시스템과 동기화하고, 데이터를 다운로드할 수 있는 기능을 구현했습니다. 우리는 이때 구축한 동기화 인터페이스를 활용하여 아키텍처를 완성할 수 있었습니다.
셋째, 신규 배송 시스템으로 운영할 지역 설정 기능을 추가했습니다. 이 기능은 컬리넥스트마일이 운영하는 전체 지역 중 일부만 신규 시스템에서 운영할 수 있도록 설정하는 기능입니다. 설정된 지역만 신규 시스템에서 운영하며, 다른 지역은 기존 시스템의 데이터를 사용하도록 했습니다. 이 기능은 Feature Toggle 방식으로 설계해, 필요할 때 쉽게 변경할 수 있도록 했습니다.
세가지 고려사항 덕분에 운영 롤백 계획도 간단하게 세울 수 있었습니다. 두 시스템이 동일한 권역을 사용하고, 모든 배송 요청이 기존 시스템에 접수되어 있었기 때문에, 신규 시스템의 운영 지역 설정을 되돌리기만 하면 원활한 롤백이 가능했습니다.
우리는 약 한 달의 기간을 활용해 시스템 전환을 진행하기로 결정했습니다. 전환 기간 동안 사용자가 체감할 수 있는 배송 품질 저하 없이 시스템의 결함과 개선 사항을 발견할 수 있도록 철저한 계획이 필요했습니다. 이를 위해, 우리는 컬리넥스트마일과 긴밀히 협력하여 단계적 시스템 전환과 현장 대응 프로세스를 포함한 전반적인 계획을 수립했습니다.
단계적 시스템 전환 계획
신규 배송 시스템으로의 운영 전환은 총 5단계로 계획되었습니다.
1단계. 소규모 지역 적용: 첫 단계는 소규모 지역과 인원을 대상으로 시스템을 적용합니다. 이 단계의 목표는 초기 시스템 결함과 운영상의 어려움을 개선하는 것이었습니다. 이 단계가 통과되면, 초기 결함이 해결된 것으로 볼 수 있습니다.
2단계. 배송 센터 1개 적용: 두 번째 단계는 배송 센터 1곳으로 확장합니다. 하나의 센터를 온전히 운영하며 발생하는 문제를 개선하며, 기본적인 시스템 안정성을 검증합니다. 우리는 1단계와 2단계에 전체 전환 기간의 절반을 할애하였습니다.
3단계. 배송 센터 3개 적용: 세 번째 단계는 수도권 외 지역을 포함한 3개 배송 센터로 확장합니다. 이 단계의 목표는 각 센터의 운영 정책 차이로 인한 문제를 파악하고 개선하는 것이었습니다. 이 단계가 성공적으로 완료되면, 시스템 전환의 중요한 고비를 넘긴 상태로 볼 수 있습니다.
4단계. 전체 배송 센터의 50% 적용: 네 번째 단계는 전체 센터의 50%로 확장합니다. 이 단계의 목표는 배송 물량 증가에 따른 성능 이슈를 발견하고 해결하는 것이었습니다. 이 단계까지 통과되면, 사실상 전환이 완료된 상태로 볼 수 있습니다.
5단계. 전체 배송 센터 100% 적용: 마지막 단계는 전체 센터로 확장합니다. 추가 이슈를 최종 점검하는 것으로 전환 과정이 마무리됩니다.
시스템 전환 기간 중 현장 대응 및 온콜 프로세스 수립
우리는 전환 기간 동안 필요한 현장 대응 체계와 온콜 체계 또한 구축했습니다. 이는 신규 배송 시스템에 익숙하지 않은 현장 인원을 고려해, 배송 진행 중 발생할 수 있는 문제를 실시간으로 모니터링하고 지원하기 위함입니다.
-
새벽배송 현장 운영 지원: 운영 담당자의 어려움을 실시간으로 파악하고 해결할 인원 배치.
-
새벽배송 현장 동승 지원: 배송 매니저와 함께 동승하여 발생하는 문제를 파악하고 해결할 인원 배치.
-
새벽배송 운영 피크시간 지원: 배차 등 운영 피크시간 중 발생하는 이슈를 신속히 파악하고 대응할 인원 배치.
-
새벽배송 피크시간 지원: 배송 피크시간 중 발생하는 이슈를 실시간으로 해결할 인원 배치.
9월 1일, 기존 배송 시스템의 계약 종료가 한달 반 남은 시점에 본격적인 전환 작업이 시작되었습니다. 겉으로 보기에는 시간이 충분해 보였지만, 9월 말 추석 연휴로 인한 배송 물량 폭증을 고려하면, 전환을 최대한 빨리 완료하는 것이 필요했습니다.
초기 문제 해결 집중 및 실시간 이슈 대응
매일 새벽 1시, 컬리넥스트마일 담당자, 현장 파견 인원, 온콜 담당자가 화상 회의에 모여 당일 발생한 이슈를 리뷰했습니다. 회의에서는 "운영 중 발생한 문제는 무엇이었고, 오늘은 어떤 조치를 취해야 할까요?"라는 질문을 중심으로, 배송에 영향을 미치거나 시스템 확장 시 문제가 될 이슈를 우선적으로 논의하고, 즉시 실행 가능한 방안을 결정했습니다.
소규모 지역을 운영하는 동안 여러 이슈가 집중적으로 발견되었지만, 문제의 양은 예상보다 적었고 통제 가능한 수준이었습니다. 우리는 다음날 배송 시작 전에 이슈를 최대한 수정했고, 시간이 필요한 경우에도 2~3일 내에 신속하게 해결했습니다. 이러한 노력 덕분에 배송 센터 1개 규모로 확장한 지 3일째인 9월 9일, 이슈의 양이 눈에 띄게 줄어들었습니다. 초기 대응은 성공적이었습니다.
시스템 전환 일정 단축 결정
초기 이슈를 성공적으로 해결한 덕분에 이슈의 양은 꾸준히 안정세를 유지했습니다. 9월 15일, 시스템을 50%로 확장하면서 일시적으로 이슈가 증가했지만, 큰 문제 없이 관리할 수 있었습니다. 매일 새벽 1시에 진행한 이슈 리뷰 회의에서는 "오늘은 배송에 큰 문제가 없었습니다"라는 코멘트가 점점 많아졌습니다. 정량적인 이슈 감소와 긍정적인 피드백이 더해져, 100% 확대 작업을 조기에 진행할 수 있었습니다. 우리는 예정보다 3일 빠른 9월 18일에 신규 시스템으로의 전환을 완전히 완료했습니다.
전환 기간 중 배송 불가 0건, 장애 0건
전환 기간 동안 시스템이나 운영 이슈로 인한 배송 중단 사례와 장애는 단 한 건도 발생하지 않았습니다. 이는 컬리 프로젝트 중 유례없는 성과로 평가되었습니다.
공동 목표에 정렬 & 협력할 수 있는 구조
우리는 모든 구성원이 '배송 시스템 전환'이라는 목표에 정렬하고 협력할 수 있도록 조직 구조와 업무 방식을 개선했습니다. 기능 조직을 스쿼드 체계로 변경하고, 강점을 발휘하며 부족한 부분을 상호 보완하는 문화를 조성했습니다. 이를 바탕으로, 핵심 기능을 우선 개발하고 점진적으로 확장했고, 결과적으로 가치 있고 안정적으로 작동하는 제품을 만들 수 있었습니다.
현장의 중요성
프로젝트의 전 과정에서 현장은 항상 중요한 역할을 했습니다. 설계와 구현 과정에서 현장으로부터 얻은 인사이트가 프로젝트 성공의 밑거름이 되었습니다.
시스템 전환 과정에서도 현장과 운영 전문가들의 역할은 매우 중요했습니다. 컬리넥스트마일은 수십 개의 배송 센터에 신규 시스템을 성공적으로 적용하고 운영을 안정적으로 전환하며, 믿음직한 마무리 투수 역할을 해냈습니다. 뛰어난 체계와 역량을 갖춘 컬리넥스트마일의 존재는 프로젝트 성공의 중요한 요인 중 하나였습니다.
공동의 참조 모델
맨땅에서 배송 시스템을 구축했다면, 지금처럼 성공적으로 만들기 어려웠을 것입니다. 아이러니하게도, 지난 2년간 SaaS 기반의 기존 시스템을 사용한 경험이 프로젝트 성공의 중요한 요인 중 하나라 생각되었습니다. 이 경험은 프로덕트 팀과 컬리넥스트마일 간의 공유 참조 모델로 자리 잡아, 새로운 시스템 개발과 원활한 협업에 큰 기여를 했습니다.
어려움을 이기는 끈기와 패기
프로젝트는 다행히 성공적으로 마무리되었지만, 사실 그 과정에는 많은 불안 요소가 있었습니다. 계약 기간이 정해져 있어 성공해야만 하는 프로젝트의 특수성은 큰 압박을 주었고, 전환이 완료될 때까지 불확실성은 지속되었습니다. 또한, 조직 구조와 업무 방식을 변화시키는 과정에서 다양한 문제가 추가로 발생하기도 했습니다.
그러나 어려움이 없는 조직이나 프로젝트는 없습니다. 때로는 환경을 있는 그대로 받아들이고, 끈기와 패기로 나아가는 자세가 문제 해결의 중요한 열쇠가 됩니다.
이 프로젝트의 가장 큰 리스크는 기한 내 시스템을 전환해야만 하는 "불확실성"이라 생각됩니다. 불확실성을 해소하며 진행할 수 있었다면 더 좋았을 것이라는 생각이 듭니다. 하지만 불확실성이 해소되고 있는지는 시스템을 실제로 운영해봐야만 명확히 알 수 있습니다. 이번 프로젝트에서는 전환 시점까지 불확실성이 지속되었지만, 다행히 크리티컬한 이슈는 발생하지 않았습니다. 만약 문제가 발생했다면, 계약 기간 내 전환이 어려워졌을 가능성이 있습니다.
앞으로 비슷한 프로젝트를 진행할 때는, 불확실성을 더 빠르게 해소할 방법을 찾아볼 계획입니다. 예를 들어, MVP 수준으로 시스템을 조기 릴리즈하고 일부 물량을 신규 시스템으로 처리하면서 기능을 추가하는 방안을 고려해볼 것입니다. 물론, 이러한 접근이 운영 부담을 증가시키고 프로젝트 속도에 부정적인 영향을 줄 가능성도 있습니다. 따라서 불확실성 해소와 프로젝트의 원활한 진행 사이에서 적절한 균형을 찾는 것도 필요할 것 같습니다.
신규 배송 시스템으로 교체한 지 1년이 지났습니다. 그동안 신규 시스템은 샛별배송을 넘어 하루배송과 컬리나우 배달 서비스까지 확장되었습니다. 또한, 배송 효율을 높이기 위한 연구와 실시간 배송 관제, 간선 운행 관리, 노무 이슈 개선 등 여러 측면에서 지속적인 개선이 이루어지고 있습니다.
블로그로 담지 못한 흥미로운 이야기들이 아직 많이 남아 있습니다. 우리와 더 깊이 이야기 나누고, 컬리 배송 시스템의 미래를 함께 만들어가고 싶으신 분들은 아래 채용 공고를 통해 지원해 주세요.