#Backend

쉐도잉 검증 개선기

쉐도잉 검증 개선기
01

Summary

로그 눈쇼핑은 이제 그만! 여기어때의 99.98% 신뢰도 API 쉐도잉 관제 구축기

파편화된 로그 수작업 분석에서 Grafana 대시보드 중심의 정량적 자동 검증 라이브러리로 전환한 여정

여기어때 전시개발팀이 레거시 MongoDB 구조를 원천 API 직접 호출 방식으로 전면 교체하며 구축한 실트래픽 검증 자동화 사례입니다. 기존 쉐도잉 로그의 한계였던 모수 부재, 재현의 어려움, 코드 파편화를 공통 라이브러리 개발과 Prometheus/Loki/Grafana 모니터링 체계 도입으로 해결했습니다. 정량적 일치율 관제와 실시간 성능 비교를 시각화하여 대규모 시스템 전환의 안정성을 확보했습니다.

  • 01수십만 건 트래픽 기반 99.98% 일치율 및 레이턴시 정량 관제 체계 구축
  • 02API별 1,500줄에 달하던 쉐도잉 관련 코드 분량을 200줄 대 공통 라이브러리로 감축
  • 03Prometheus 메트릭과 Loki JSON 로그를 결합하여 Grafana 패널 12개로 가시성 확보
  • 04실제 GET 요청의 URI, 헤더, 불일치 필드를 저장해 대시보드에서 1초 만에 테스트 재현 가능
  • 05쿠폰 순서, 반올림 차이 등 도메인 노이즈를 정밀하게 제거해 검증 신뢰도 대폭 향상

RECOMMENDATION

대규모 트래픽을 처리하는 레거시 API 리팩토링이나 데이터 출처 교체를 진행 중인 백엔드 엔지니어에게 추천합니다. 특히 기존 서비스 안정성을 유지하면서 실트래픽 기반으로 신규 API의 비즈니스 정확성과 성능을 사전에 정밀 검증하고 싶은 팀에 명확한 실행 가이드를 제공합니다.

The Problem

레거시 저장소(MongoDB)에서 원천 API 직접 호출 방식으로 전환하는 과정에서 수많은 가격·재고 파라미터 조합을 기존 테스트 방식만으로 검증하기 어려웠습니다. 기존 쉐도잉 방식은 불일치 로그가 파편화되어 전체 일치율 계산이 불가능했고 로그 기반 요청 재현에 많은 시간이 소요되었습니다.

The Solution

공통 쉐도잉 라이브러리를 개발하여 비동기 실행, 샘플링, 데이터 비교 및 메트릭·로그 수집을 표준화했습니다. 수집된 실행 건수와 처리 시간은 Prometheus 메트릭으로, 요청 URI와 불일치 필드는 Loki 로그로 전달하여 Grafana 대시보드에서 일치율과 속도를 실시간 관제할 수 있게 만들었습니다.

The Result

수십만 건의 실제 트래픽 비교를 통해 99.98%의 정량적 일치율을 입증하였고 기존 대비 신규 로직의 응답 지연(20ms vs 13ms)을 사전에 포착했습니다. 또한 API별 수천 줄에 달하던 쉐도잉 구현 코드를 200줄 수준의 공통 라이브러리 호출 구조로 축소했습니다.

Trade-off

프록시 기반 외부 오케스트레이션 대신 애플리케이션 내부 라이브러리 방식을 적용했기 때문에 스레드 풀 등 내부 시스템 자원을 일부 공유합니다. 아울러 순서 변경이나 1원 반올림 오차와 같은 도메인 노이즈 필터링 규칙을 애플리케이션 코드 수준에서 계속 관리해야 하는 부담이 존재합니다.

03

Key Concepts

Concept · 01

쉐도잉 (Shadowing)

운영 환경으로 들어오는 실제 사용자 요청을 기존 로직과 신규 로직에 동시에 전달하여 응답 결과를 비교 검증하는 테스팅 기법입니다. 사용자에게는 기존 로직의 결과를 안전하게 반환하면서 내부적으로 신규 로직의 정확성을 검증합니다.

  • 여기어때 서비스의 데이터 출처 변경(MongoDB -> 원천 API) 과정에서 신규 로직의 비즈니스 오작동 유무를 검증하기 위해 적용되었습니다.
  • Primary(기존)와 Candidate(신규) 개념을 정립하여 서빙 로직 전환 시점에도 일관된 관제 그래프를 유지했습니다.
Concept · 02

Prometheus & Loki

Prometheus는 시계열 수치 메트릭 데이터를 수집·집계하는 모니터링 시스템이며, Loki는 로그 데이터를 효율적으로 수집하고 정규식/JSON 파싱을 지원하는 로그 수집 시스템입니다. 메트릭과 로그의 역할을 분리하여 시스템 가시성을 극대화합니다.

  • Prometheus 메트릭으로 쉐도잉 실행 건수, MATCH/DIFF/ERROR 판정 수, 소요 시간을 집계하여 전체 일치율 계산에 활용했습니다.
  • Loki 로그를 이용해 불일치 발생 시 JSON 원문 이벤트와 재현용 URI, 헤더 정보를 손쉽게 검색할 수 있게 했습니다.
Concept · 03

노이즈 필터링 (Noise Filtering)

실제 비즈니스 로직의 결함이 아니라 조회 순서, 실행 시각 차이, 반올림 방식 등 환경적 요소 때문에 발생하는 정당한 불일치를 검증 대상에서 제외하는 기법입니다.

  • 쿠폰 문서 ID 순서 변경, 실시간 카운트다운, 정률 특가의 1원 반올림 차이 등을 쉐도잉 비교기에서 보정 처리했습니다.
  • 조건을 걸어 흡수한 노이즈 건수 또한 메트릭으로 카운팅하여 노이즈 과다 발생 여부를 모니터링할 수 있도록 설계했습니다.