목록 보기
예약 시스템 개편기: 우리는 왜 '예약 레고'를 만들었나
아키텍처

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

비브로스
비브로스
2026년 3월 24일

두줄요약

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

문제 상황

  • 고정 시간 간격만 지원하는 예약 구조로 인해 진료 항목별 소요 시간을 유연하게 반영하기 어려운 상태
  • 최종 카운트만 저장하는 방식으로 동시 요청 경쟁 조건과 디버깅 어려움이 동시에 존재

구조와 흐름

  • 진료 항목마다 고유 timeUnit을 부여하고, 시간대에는 허용 진료 항목과 동시 예약 가능 인원을 설정하는 가변 슬롯 설계
  • 템플릿 스케줄과 커스텀 스케줄을 분리해 반복 패턴과 예외 주간을 함께 관리하는 구조
  • 예약 가능 시간은 조회 시점에 계산하고, 반개구간 기준 겹침 판정으로 슬롯별 예약 가능 여부 산정

성능/운영 포인트

  • 예약 중복 방지를 위해 5분 단위 Redis 분산 락과 이중 락 전략 적용
  • 단순 카운트 대신 개별 레코드 기반으로 저장해 예약 추적, 취소 처리, 온라인/오프라인 구분을 개선
  • 현재는 선형 탐색으로 충분하지만, 향후 데이터 증가 시 Interval Tree나 Sweep Line 검토 여지 존재

댓글 0

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

댓글을 불러오는 중...