마켓컬리 서비스 구조를 소개 합니다

저녁 11시까지 주문하면 Full-Cold Chain을 통해서 다음날 7시까지 배송해주는 마켓컬리 서비스 구성에 대해서 상세하게 소개 드립니다.

마켓컬리 서비스는 크게 사용자가 신선식품을 포함한 각종 상품을 앱과 웹을 통해서 쇼핑할 수 있는 이커머스 서비스와 주문한 상품을 물류 센터내에서 생산 작업 (피킹, 패킹, 포장) 및 차량으로 사용자 문앞까지 배송해주는 물류서비스로 구성되어 있습니다. 물류 서비스에는 각종 상품의 공급사를 관리하는 SCM 서비스도 포함되어 있습니다.

이에 더하여 이커머스와 물류에서 공통으로 사용하는 데이터 저장/분석 플랫폼을 구축하여 로그를 포함한 각종 데이터를 실시간 및 배치로 저장하고, 분석하고 있습니다. 계속해서 각 서비스 구성에 대해서 좀더 자세하게 소개드리겠습니다.

이커머스 서비스

이커머스 서비스는 iOS, Android 앱과 함께 PC/Mobile 웹 페이지를 통해서 상품 전시부터 결제 기능까지 제공합니다. 앱은 안드로이드와 iOS를 각각 Kotlin과 Swift를 통해서 MVP/MVVM 방식으로 개발중이고, 웹은 기본적으로 Vue.js를 사용하고 있고, Static 웹 파일 배포에는 Netlify를 활용하고 있습니다.

이커머스 백엔드 시스템은 Legacy PHP와 PHP/Laravel, 그리고 Java/Spring Boot가 하이브리드 형태로 구성되어 있습니다. Legacy PHP는 회원, 상품, 주문, 결제등을 관리하고, PHP/Laravel은 앱을 위한 API 서비스를, 검색 및 데이터 기반 서비스는 Java/Spring Boot로 개발되고 있습니다. Legacy PHP를 포함하여 전체 이커머스 시스템은 Spring Cloud Netflix를 기반으로 마이크로 서비스 형태로 이관하여 고도화 개발 진행중입니다.

최근 신선 식품 시장의 급격한 성장 및 치열해지는 경쟁에 대응하기 위해, AWS 클라우드로의 이관을 마무리하고, 이에 더하여 마이크로 서비스 형태로 구조화하여 개발부터 배포까지의 시간을 단축하고, Growth Hacking을 통하여 컬리의 급격한 사업의 성장을 뒷받침하기 위한 지속적인 기술 혁신을 추진하고 있습니다.

dev@kurly:~$> dump_tech_stack()

  Frontend: iOS, Android, Web, Kotlin, Swift, Vue.js
  Backend: PHP/Laravel, Java/Spring Boot, Netflix Cloud, JPA, Aurora (MySQL), ElasticSearch

물류 서비스

이커머스 서비스를 통해서 사용자가 결제를 완료하면 AWS Auroa DB에는 주문이 생성이 되고, 해당 주문은 물류 서비스를 통해서 물류 센터에서 생산작업에 사용됩니다. 물류 서비스는 크게 SCM (Supply Chain Management), WMS (Warehouse Management System), TMS (Transport Management System)으로 구성 되어 있습니다. 모든 시스템은 Java/Spring을 기반으로 개발되고 운영 중입니다.

특히 Warehouse Management System은 최근 물류 서비스 혁신의 근간을 이루고 있는 시스템으로 컬리 개발팀 내부적으로 마이크로 서비스 형태 구조 고도화를 통하여 다양한 형태의 물류 창고 관련 운영 효율화를 수용가능하도록 재개발중이고 및 AWS MQ, JPA, GraphQL등을 통해서 기술 고도화도 병행해서 추진중입니다. IDC에서 최근 AWS Cloud로 이관을 마치고, 좀더 개발 및 운영이 Cloud Native에 근접하도록 노력중입니다.

dev@kurly:~$> dump_tech_stack()

  React.js Vue.js, Java/Spring Boot, JPA, GraphQL, Oracle, Aurora (MySQL), AWS MQ

데이터 서비스

이커머스와 물류서비스에서 발생하는 다양한 형태의 정형/비정형 데이터를 적재하고 분석하는 플랫폼을 AWS 및 오픈소스를 통해서 구축하여 운영하고 있습니다. 일반적인 ELK 기반의 로그수집 및 검색 시스템을 운영중이고, 데이터의 분석은 AWS Glue와 Athena를 통해서 제공하고 있습니다.

이러한 데이타 플랫폼과 분석 플랫폼을 통하여 데이터 기반 서비스도 활발하게 개발중입니다. 먼저 이커머스에서는 Keras기반 딥러닝 기술을 도입하여 사용자 후기 사진을 자동으로 분류하는 시스템을 개발하여 기존 수기 운영을 파격적으로 개선하였습니다. 그리고 물류 시스템에서는 신선 식품의 특성상 유통기간을 고려하여 최적의 데이터 예측 기반 발주 관리시스템을 제공하여 상품 폐기율 1%미만으로 유지하는 것이 가능하도록 하였습니다. 이에 더하여 상품 추천, 신선 식품 신선도 분석등 커머스 기술혁신을 지속적으로 추진중에 있습니다.

dev@kurly:~$> dump_tech_stack()

  ElasticSearch, LogStash, Kibana, AWS Sage, AWS Glue, AWS Athena, AWS P Type instance, Keras, DeepLearning

DevOps/SRE

마켓컬리의 모든 서비스는 Cloud Native향으로 개발중이고 운영 또한 DevOps, NoOps를 지향하고 있습니다. CI/CD 파이프 라인 구축에 들어간 기술들은 다음과 같습니다. 배포를 위한 Jenkins, 코드 품질 관리를 위한 sonarqube, dependency-tracker, Docker Container 의 보안성 체크을 위한 Clair 등 개발 편의성을 위한 검증된 Opensource 들을 도입하여 활용하고 있습니다. ngrinder 를 활용하여 stage 환경에서 최소한의 성능 체크를 진행 하고 있으며 QA 환경 역시 자동화를 목표로 고도화 시키고 있습니다. 인프라 운영 관점에서는 기존 Legecy 서비스의 Docker 기반 운영 최적화를 진행중에 있으며, 다음 단계로 컨테이너 Orchestration 기술의 도입을 검토중입니다. 서비스 지속성 관점에서 사람의 개입을 최소화 시키며 궁극적으로 IaC (Infrastructure as a code)를 목표로 조금씩 진화를 시키고 있습니다. 이러한 목표를 위하여 우리는 아직 준비중이며 긴 여정을 함께하실 분을 찾고 있습니다. 대규모로 발전되가는 인프라를 직접 경험하고 싶으신분, 이러한 인프라를 자동화 시키고 안정화 시키고 싶으신분은 언제든지 환영합니다.

dev@kurly:~$> dump_tech_stack()

  AWS, Jenkins, Ansible, Docker, CI/CD, Promethous, Grafana, Lambda, terraform, Consul

여기까지 개발자 분들은 위한 컬리 서비스 구성에 대한 설명을 마치겠습니다.

컬리 개발팀과 관심이 있는 개발자분들은 채용정보(여기)를 클릭해주세요.