slotops: 시간 슬롯 기반 예약 운영 SaaS 백엔드를 만든 이유
in Project Log on Java, Spring-boot, Jpa, Reservation, Saas
왜 만들었나
예약 시스템은 이벤트 티켓팅과 닮아 보이지만 실제 도메인은 다르다. 공연 티켓은 좌석과 회차가 중심이고, 스터디룸·연습실·촬영 스튜디오·스포츠 코트 같은 오프라인 사업장은 시간 슬롯과 자원 운영이 중심이다.
SlotOps는 이 차이를 분명하게 모델링해 보고 싶어서 시작한 프로젝트다. “무엇을 팔 것인가”보다 “운영자가 어떤 자원을 언제 열고 닫을 수 있는가”를 먼저 잡는 백엔드다.
무엇을 만들었나
오프라인 사업장이 지점, 자원, 예약 가능 시간, 블랙아웃 기간, 예약 생성을 관리하는 Spring Boot 백엔드다.
주요 흐름은 다음과 같다.
- 조직과 멤버를 만든다.
- 지점과 예약 가능한 자원을 등록한다.
- 요일별 예약 가능 규칙과 예외 기간을 설정한다.
- 고객이 공개 API로 가능한 시간 슬롯을 조회한다.
- 예약 생성 시 중복 예약과 정책 위반을 검증한다.
핵심 구현
예약 가능 규칙과 블랙아웃 기간을 분리했다
정기 영업시간과 임시 휴무는 같은 데이터로 뭉치기 쉽다. 하지만 운영 관점에서는 다르다. 기본 availability rule은 반복 가능한 규칙이고, blackout period는 특정 기간의 예외다.
예약 충돌 검사를 도메인 서비스로 분리했다
예약 생성은 단순 insert가 아니다. 같은 자원이 같은 시간대에 이미 예약되어 있는지 확인해야 한다. 이 검사를 ReservationConflictChecker로 분리해 API 계층이 아니라 도메인 규칙으로 읽히게 했다.
공개 API와 운영 API를 나눴다
운영자는 자원과 규칙을 관리하고, 고객은 가능한 시간 슬롯을 조회하고 예약한다. 두 사용자의 목적이 다르기 때문에 controller도 분리했다.
현재 상태 / 다음 단계
- Auth, organization, location, resource CRUD 구현
- availability rule, blackout period, slot query 구현
- 예약 생성 시 availability rule과 충돌 검증 적용
- 주요 API/controller/domain test 통과
- 다음 단계는 운영 대시보드, 결제/알림, 실제 배포 프로파일 정리다.
