
예약 시스템 개편기: 우리는 왜 '예약 레고'를 만들었나
두줄요약
병원 예약 시스템을 가변 슬롯과 개별 레코드 기반으로 전면 개편한 사례를 다루었습니다. 동시성 제어와 추적성을 강화해 다양한 진료 시간을 유연하게 처리했습니다.
문제 상황
- 진료 항목마다 소요 시간이 달라 하나의 고정 시간 간격으로는 예약을 유연하게 배치하기 어려운 구조
- 최종 카운트만 저장하는 기존 방식에서 동시성 충돌과 원인 추적 어려움 발생
원인 분석
- 10분, 5분, 50분처럼 서로 다른 진료 시간을 동일 슬롯 규칙으로 묶은 설계 제약
- count 값만 저장해 예약 단위의 이력과 변경 근거를 남기지 못하는 카운팅 구조
해결 방법
- 진료 항목별 timeUnit을 두고 시간대에 여러 항목을 배치하는 가변 슬롯 시스템 도입
- 템플릿 스케줄과 커스텀 스케줄 분리, 조회 시점 슬롯 계산과 시간 겹침 판정 적용
- 5분 단위 Redis 분산 락과 개별 레코드 기반 카운팅으로 정합성 및 추적성 강화
성능/운영 포인트
- 슬롯 겹침 탐색은 현재 선형 탐색으로 처리하고, 데이터 증가 시 Interval Tree나 Sweep Line 검토
- 예약 단위를 레코드로 남겨 온라인·오프라인 예약과 취소 이력을 명확히 관리
- 락 TTL을 분리해 불필요한 대기를 줄이고 충돌 범위를 세밀하게 제어
