DevLog

엔지니어링 블로그를 한 곳에서 탐색하고, 최근 발행 흐름을 빠르게 파악할 수 있는 서비스 입니다.

Quick Links

  • Latest Feed
  • Engineering Directory

Support

  • 소개
  • 개인정보처리방침

Contribute

  • 원하는 블로그 추가 (준비 중)
  • Feedback

© 2026 DevLog Inc. All rights reserved.

본 사이트는 공개 RSS 피드를 통해 콘텐츠를 수집하며, 모든 콘텐츠의 저작권은 원저작자에게 있습니다.

Back to Feed
Read Original

Contents

Continue Reading

  • More from 여기어때
  • Related reads#MongoDB
#Backend

트랜잭션 스크립트에서 숙소 메타 + 가격 계산 모듈로 — 전시 아키텍처 개선기 (2/3)

트랜잭션 스크립트에서 숙소 메타 + 가격 계산 모듈로 — 전시 아키텍처 개선기 (2/3)
01

Summary

19번의 DB 조회를 1번으로! 여기어때의 쿼리 지옥 탈출과 아키텍처 개선기

MongoDB $lookup 중심의 트랜잭션 스크립트를 읽기 최적화 문서와 가격 계산 모듈로 재설계한 여정

본 아티클은 여기어때 전시개발팀이 화면 단위 API 호출 시 발생하는 무거운 MongoDB I/O와 중복 로직 문제를 어떻게 해결했는지 상세히 다룹니다. 기존 트랜잭션 스크립트 기반의 한계를 극복하기 위해 읽기 최적화 문서 모델 설계, 변동 주기별 캐시 전략, 그리고 코드 기반 공통 가격 계산 모듈 구조로 전환하는 과정과 구체적인 성과를 공유합니다. 특히 AI 에이전트와 쉐도잉 트래픽 검증을 활용하여 대규모 이관 작업을 안전하게 처리한 실무 노하우를 전달합니다.

  • 01화면 호출 한 번에 발생하는 숨겨진 19회 컬렉션 접근 문제를 MongoDB aggregation 파이프라인 분석을 통해 진단했습니다.
  • 02쓰기 시점에 미리 조립하는 읽기 최적화 문서로 개편하여 쿼리를 단건/IN 조회 수준으로 단순화했습니다.
  • 03변동성이 낮은 메타 데이터는 길게 캐싱하고 가격은 실시간 계산하여, 성능 확보와 실시간 데이터 정합성을 동시에 달성했습니다.
  • 04중리되지 않은 가격 계산 규칙을 단일 모듈로 통합하고 자바 코드로 이관하여 유닛 테스트가 가능한 환경을 만들었습니다.
  • 05Claude Code의 skill 기반 마이그레이션 및 실 운영 트래픽을 활용한 쉐도잉 테스트로 이관 시 정합성을 완벽하게 증명했습니다.

+RECOMMENDATION

MongoDB 환경에서 관계형 데이터베이스처럼 조인을 모방하느라 읽기 성능 저하를 겪고 있는 백엔드 엔지니어들에게 추천합니다. 대규모 레거시 마이그레이션을 안전하게 수행하고 싶은 개발자들에게 구체적인 실무 팁을 제시합니다.

The Problem

V2 아키텍처에서는 화면 조회 API 호출 시 MongoDB의 무거운 $lookup과 애그리게이션 파이프라인으로 인해 불필요한 직렬 DB I/O가 대량 발생했습니다. 데이터별 변동 주기가 달라 캐시 적용이 비효율적이었으며, 여러 화면에 가격 계산 로직이 파편화되어 유지보수가 어려웠습니다.

The Solution

조회 시점에 조립하던 문서를 쓰기 시점에 조립하는 읽기 최적화 문서로 변경하고, 데이터 변동 주기에 맞춘 부분 캐싱 전략과 중앙 집중식 가격 계산 모듈을 도입했습니다. 또한 Claude Code를 통한 자동 마이그레이션 워크플로우를 구축하고, 쉐도잉 및 실 트래픽 기반의 동일성 검증을 통해 안전하게 이관했습니다.

The Result

무거운 $lookup이 제거되어 DB 부하가 크게 줄었으며 가격 정보를 실시간으로 정확하게 연산할 수 있게 되었습니다. 10벌의 파이프라인(약 1,600줄)이 단일 코드로 공통화되어 유지보수성이 극대화되었고 운영 트래픽 쉐도잉을 통해 이관 안전성을 확보했습니다.

Trade-off

읽기 최적화 문서를 실시간으로 동기화하기 위한 이벤트 컨슈머 파이프라인과 싱크 로직이 추가되어 쓰기 복잡도가 증가했습니다. 또한 아키텍처 계층이 늘어남에 따라 구조적 복잡도와 디버깅 시 인지 비용이 상승했습니다.

03

Key Concepts

Concept · 01

Read Optimization Document

화면에서 보여줄 데이터를 조회 시점에 관계형 JOIN이나 Lookup으로 조립하는 대신, 데이터가 생성되거나 변경되는 시점에 최종 화면 형태로 문서를 미리 완성해 두는 데이터 모델링 방식입니다.

  • 조회 시점의 $lookup 오버헤드를 완전히 제거하고 ID 기반 단건/IN 조회로 단순화하는 데 활용되었습니다.
Concept · 02

Separate Cache Strategy

서로 변동 주기가 다른 데이터를 단일 캐시로 묶어 다루지 않고, 각각의 갱신 주기와 특성에 최적화된 유효기간(TTL) 및 캐싱 정책을 분리하여 적용하는 전략입니다.

  • 거의 변하지 않는 숙소 기본 정보는 긴 캐시를 적용하고, 자주 바뀌는 요금제/상품 정보는 짧은 캐시를 적용하여 실시간 가격 연산의 오차를 최소화했습니다.
Concept · 03

Shadow Testing

사용자의 실시간 트래픽을 복제하여 구버전과 신버전 시스템에 동시에 흘려보내고, 두 시스템의 응답 결과를 1:1로 비교 검증하여 기능 결함을 잡아내는 안전망 설계 기법입니다.

  • 마이그레이션된 가격 모듈의 연산 결과가 실 서비스 트래픽 상황에서도 완전히 동일하게 작동하는지 검증하기 위해 도입되었습니다.
Continue reading · same source

여기어때More from 여기어때

View all posts from 여기어때
  • EKS 컨테이너 메모리 스파이크 추적기

    EKSPage CacheLogback
    2일 전
  • SRE 업무에 AI 녹여내기 — 2편: Alert Adviser로 장애 원인 분석 자동화

    GrafanaMCPSlack Bot
    6일 전
  • SRE 업무에 AI 녹여내기 — 1편: Smart RI Calc로 인프라 비용 산정 자동화

    SREAWS KarpenterCost Estimation
    6일 전
  • WebFlux 전환 부하 테스트를 다시 쓴 이야기

    WebFluxSpring BootLoad Testing
    1주 전
  • 데드락을 해결하려다, 락을 줄이게 된 이야기

    MySQL InnoDBDeadlockPessimistic Lock
    1주 전

Related reads#MongoDB

Explore #MongoDB
여기어때

데이터 통합— MongoDB 원칙으로 document를 통합하고 동기화를 재설계하다 (3/3)

#MongoDB1개월 전
SSG

이상적인 구조가 빠른 성능은 아닙니다

#MongoDB2개월 전
미리디·Amazon DocumentDB

Amazon DocumentDB 인덱스 최적화로 미리캔버스의 쿼리 성능을 개선 사례

#MongoDB4개월 전
미리디·Amazon DocumentDB

Amazon DocumentDB로 미리캔버스의 성능 50%와 비용 30%를 개선하다

#MongoDB4개월 전
카카오페이·Spring Batch

수억 건의 데이터, 맛있게 쪼개 먹는 방법 (with. Partitioning)

#MongoDB5개월 전

Source

여기어때
여기어때
Engineering Blog

Published · July 21, 2026

Topics

MongoDBRefactoringCachingArchitectureClaude Code