Kurly에서 주문을 모니터링하는 법
핵심 내용
컬리 개발팀이 복잡한 SQL 기반의 Legacy 주문 모니터링 시스템을 Kafka와 ELK 스택으로 전환해 조회 속도를 1초 내외로 개선했다.
자세히 보기
Legacy 시스템의 한계와 개선 배경
마켓컬리 개발팀은 가파른 성장으로 인해 기존 Legacy 시스템의 모니터링 한계를 겪었다. 주문량 집중 시 SQL 쿼리가 복잡해져 검색 불가 현상이 발생했으며, 6개 이상의 테이블 조인과 서브 쿼리 포함으로 응답 대기 중 타임아웃이 빈번했다. 또한 비즈니스 로직과 뷰 로직이 2,000라인 이상의 단일 파일에 혼재되어 유지보수가 어려웠다.
Kafka와 ELK 스택 기반의 아키텍처 전환
개발팀은 Application의 주문 도메인 Event 발생 시 데이터를 Kafka에 적재하고 ELK Stack(Elasticsearch, Logstash, Kibana)으로 대시보드를 구현하는 방식으로 전환했다. 기존 파일 로깅 방식의 데이터 유실 위험을 줄이고, 사내에 구축된 Kafka 기반 플랫폼을 활용해 개발 효율을 높였다. Kafka는 분산 스트리밍 플랫폼으로 높은 처리량과 데이터 정합성을 보장한다.
구현 과정 및 운영 결과
php-rdkafka 클라이언트를 사용해 Kafka에 데이터를 전송하며, 비동기 전송 특성상 데이터 유실을 방지하기 위해 $producer->flush($timeout)을 호출해 전송 완료를 보장했다. 배포 후 Kibana 대시보드를 통해 실시간 및 누적 주문 통계를 1초 내외의 속도로 조회할 수 있게 되었다. 초기 배포 후 일부 데이터 정합성 이슈가 발견되어 ack(acknowledgement) 옵션을 추가 설정하고, 로그 ID 기반의 멱등성 처리를 통해 데이터 중복 및 유실 문제를 보완했다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.