목록 보기
작은 수정이 전체를 깨뜨리기 시작했을 때: 옐로우버스 DB 재설계 이야기
백엔드

작은 수정이 전체를 깨뜨리기 시작했을 때: 옐로우버스 DB 재설계 이야기

더스윙
더스윙
2026년 1월 30일

두줄요약

옐로우버스 일정 시스템은 변경이 연쇄 전파되는 DB 구조 때문에 큰 비용을 치르고 있었습니다. 이를 append-only, decoupling, lazy generation으로 재설계해 안정성과 운영 효율을 높였습니다.

문제 상황

  • 운행일정과 탑승일정이 강하게 결합된 구조에서 작은 수정도 전체 데이터 파편화와 대량 재생성으로 이어지는 병목 발생
  • 운행일정은 UPDATE와 물리적 분할이 반복되며 추적이 어려워졌고, 탑승일정은 eager generation으로 인스턴스가 기하급수적으로 증가
  • 변경 한 번에 수만~수백만 로우가 영향을 받아 운영 리스크와 I/O 비용이 크게 확대

원인 분석

  • 데이터를 mutable하게 다루는 설계로 인해 변경이 연쇄 전파되는 구조
  • 운행일정의 물리적 레코드를 탑승일정이 직접 참조해 도메인 간 의존성이 과도하게 높았음
  • 미래 인스턴스를 미리 생성하는 방식이 저장·수정 비용을 불필요하게 키움

해결 방법

  • 변경을 UPDATE가 아닌 INSERT로 표현하는 append-only 구조와 override_weight 기반 해석 도입
  • 운행일정과 탑승일정을 논리적 식별자로 연결해 변경 전파를 차단
  • 탑승일정 인스턴스는 필요한 시점에만 생성하는 lazy generation으로 전환

다음 읽기

#refactoring 주제를 다룬 다른 회사 글

예약 시스템 개편기: 우리는 왜 '예약 레고'를 만들었나

병원 예약을 진료 항목별 가변 슬롯 구조로 전면 개편한 사례를 다루었습니다. 동시성 제어와 추적 가능성을 위해 분산 락과 개별 레코드 기반 카운팅도 도입했습니다.

비브로스
비브로스
아키텍처

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...