#Backend

“왜 노출이 안 될까?”를 한 번에 추적하는 방법

“왜 노출이 안 될까?”를 한 번에 추적하는 방법
01

Summary

"왜 안 나와요?" 문의에 1초 만에 답하는 비결, SSG의 전천후 디버깅 툴 '영원희'

흩어진 MSA 로그를 하나의 식별자로 꿰어 복잡한 전시 로직의 실체를 드러내다

마이크로서비스 아키텍처에서 발생하는 복잡한 전시 누락 이슈를 해결하기 위한 SSG 프론트서비스개발팀의 분투기를 다룹니다. 단순히 로그를 쌓는 것을 넘어, 요청 흐름을 시각화하고 직접 API를 재현할 수 있는 실행형 도구 '영원희'를 통해 운영 효율과 서비스 성능을 동시에 잡은 경험을 공유합니다.

  • 01단일 식별자(logGroupId)를 활용한 전 구간 요청 흐름 시각화
  • 02Kafka와 MongoDB를 조합한 비동기 로그 수집으로 서비스 영향도 최소화
  • 03@YoungWonHeeDebug 어노테이션 기반 설계로 기존 비즈니스 로직과의 결합도 제거
  • 04Swagger 연동을 통해 디버깅 화면에서 즉시 API 호출 및 재현 가능
  • 05수집된 로그 분석을 통한 불필요한 API 호출 제거 및 네트워크 비용 절감

RECOMMENDATION

복잡한 데이터 가공 로직이 포함된 MSA 환경의 백엔드 개발자나 운영 효율화를 고민하는 데브렐 엔지니어에게 강력히 추천합니다.

The Problem

복잡한 전시 로직과 MSA 환경으로 인해 특정 상품이나 배너가 노출되지 않을 때 원인을 파악하기 위해 여러 시스템의 DB와 로그를 수작업으로 대조해야 하는 번거로움이 있었다. 단순 조회 결과만으로는 전처리, 외부 API 호출, 후처리 로직 중 어느 단계에서 데이터가 누락되었는지 즉각적으로 판별하기 어려웠다.

The Solution

logGroupId라는 단일 식별자를 통해 요청의 시작부터 끝까지의 흐름을 묶고, Kafka와 MongoDB를 이용해 비동기적으로 로그를 수집하여 시간 순서대로 시각화하는 디버깅 도구 '영원희'를 구축했다. 2.0 버전에서는 Swagger 명세와 연동하여 화면에서 직접 API를 호출하고 재현할 수 있는 실행형 디버깅 기능을 추가했다.

The Result

분산된 로그를 한눈에 파악할 수 있게 되어 운영 대응 속도가 획기적으로 개선되었으며, 로그 추적 과정에서 발견된 불필요한 중복 API 호출을 제거하여 서비스 성능 최적화에도 기여했다. 상품 및 기획전 유효성 검증 등 전시 운영 데이터를 해석하는 기반 도구로 확장되었다.

Trade-off

메인 서비스의 부하를 최소화하기 위해 비동기 처리를 도입했으나, 보안 및 보관 비용 이슈로 인해 수집된 로그 데이터는 1시간 동안만 유지된다는 제한 사항이 있다. 또한 초기 버전은 특정 서비스에 국한되어 전사적인 활용도가 낮았던 한계가 있었다.

03

Key Concepts

Concept · 01

분산 추적 (Distributed Tracing)

마이크로서비스 환경에서 각 서비스 간의 호출 경로를 고유 식별자로 연결하여 요청의 전체 흐름을 추적하는 기법이다.

  • logGroupId를 통해 각 단계별 API 요청과 응답, 내부 로직 수행 결과를 하나의 타임라인으로 통합한다.
Concept · 02

비동기 로그 적재 (Asynchronous Logging)

애플리케이션의 주 로직이 로그 기록 작업으로 인해 지연되지 않도록 별도의 큐나 메시지 브로커를 사용하는 방식이다.

  • Kafka Topic으로 로그 메시지를 전송하고 Consumer가 MongoDB에 저장함으로써 서비스 성능 저하를 방지한다.
Concept · 03

관찰 가능성 (Observability)

시스템의 내부 상태를 외부로 출력되는 데이터(로그, 메트릭, 트레이스 등)를 통해 명확히 파악할 수 있는 능력을 의미한다.

  • 단순한 로그 조회를 넘어 데이터 누락 구간을 시각적으로 추적하고 문제를 재현할 수 있는 환경을 제공한다.