필라테스 공정 대기 예약 전체 개발 안내서
1. 서비스 개요
서비스 한 줄 설명
정원 5~15명의 기구 필라테스 스튜디오에서 회원이 모바일 웹으로 예약·취소·대기 신청을 하고, 취소 자리는 대기 순번에 따라 문자로 안내하는 예약 운영 서비스다.
핵심 고객
| 구분 | 대상 |
|---|---|
| 결제 고객 | 회원 약 31~60명의 예약·취소·대기를 직접 관리하는 기구 필라테스 스튜디오 원장 |
| 첫 시험 고객 | 창업자가 운영하는 회원 50여 명, 수업 정원 8명 규모의 스튜디오 |
| 실제 사용자 | 원장과 스튜디오 회원 |
| 이후 검증 고객 | 인근 소규모 기구 필라테스 스튜디오 원장 1~2명 |
현재 해결 방식
- 카카오톡 단체방에 수업과 빈자리를 공지한다.
- 회원이 메시지나 개인 연락으로 예약·취소 의사를 전달한다.
- 공지를 빨리 본 회원이 빈자리를 가져가는 경우가 발생한다.
- 회원권 횟수 차감과 노쇼를 원장이 수첩에 기록한다.
- 12시간 이내 취소의 예외를 원장이 매번 판단한다.
- 처리 근거가 한곳에 남지 않아 회원에게 기준을 설명하기 어렵다.
해결할 문제
- 취소 자리가 생길 때마다 원장이 단체방에 재공지해야 한다.
- 대기 신청 순서보다 메시지를 먼저 본 사람이 유리하다.
- 대기 회원의 응답 여부를 원장이 직접 확인해야 한다.
- 취소 시점에 따른 횟수 차감과 예외 처리가 일관되지 않다.
- 노쇼와 회원권 처리 기록이 분리되어 있다.
- 중복 예약이나 대기 순서 누락이 생겨도 수정 근거가 남지 않는다.
2. 사용자가 달성해야 하는 목표
원장의 목표
- 수업 날짜·시간·정원을 등록한다.
- 수업별 예약 인원과 대기 순번을 확인한다.
- 취소 자리를 대기 신청 순서대로 안내한다.
- 대기 회원의 수락 내용을 확인하고 예약을 승인하거나 반려한다.
- 12시간 이내 취소의 횟수 차감 또는 미차감을 처리한다.
- 처리 이유와 회원권 이력을 남긴다.
- 수업 후 출석 상태와 노쇼를 기록한다.
- 잘못 처리된 예약·회원권 이력을 원본 기록을 보존하면서 수정한다.
회원의 목표
- 카카오톡 등에 공유된 링크로 모바일 웹에 들어간다.
- 휴대폰 번호와 인증번호로 본인을 확인한다.
- 원하는 수업을 예약하거나 대기 신청한다.
- 자신의 대기 순번을 확인한다.
- 예약을 취소하면서 사유를 제출한다.
- 취소 자리가 생기면 문자 링크에서 정해진 시간 안에 수락한다.
- 예약 확정, 승인 대기, 대기 수락 만료 등 현재 상태를 확인한다.
첫 사용 후 기대 결과
구체적인 개선 목표 수치는 시험 운영 전 기준값을 측정한 뒤 정한다.
- 원장이 단체방에 빈자리 공지를 올리는 횟수
- 원장이 회원 답변을 개별 확인하는 횟수
- 빈자리 발생 후 예약 확정까지 걸린 시간
- 대기 신청 순서를 지켜 배정된 비율
- 취소 자리 충원 비율
- 대기 순번 관련 문의와 이의 제기 건수
- 회원권 차감·복구 기록 누락 건수
- 노쇼 기록 누락 건수
3. 개발 대상과 운영 환경
서비스 형태
- Next.js 기반 반응형 웹서비스
- 회원은 휴대폰 웹브라우저에서 사용한다.
- 앱 설치와 앱스토어 배포를 전제하지 않는다.
- 카카오톡은 예약 링크를 공유하는 기존 채널로 사용한다.
- 취소 자리 제안은 문자 메시지 링크로 발송한다.
- 회원의 회원권 결제와 충전은 서비스 밖에서 처리한다.
사용자 역할
| 역할 | 할 수 있는 일 |
|---|---|
| 회원 | 휴대폰 인증, 수업 조회, 예약, 취소, 대기 신청, 대기 순번 확인, 빈자리 수락 |
| 원장 | 회원·회원권 등록, 수업·정원 관리, 예약·대기 확인, 최종 승인, 횟수 차감·복구, 예외 처리, 출석·노쇼 기록, 오류 수정 |
강사와 프런트 직원의 별도 권한은 첫 개발에서 확인되지 않았다.
첫 개발 범위
- 회원 및 횟수제 회원권 초기 등록
- 수업 등록과 정원 관리
- 휴대폰 번호 인증
- 수업 예약·취소·대기 신청
- 대기 순번 표시
- 취소 자리 순차 문자 안내
- 빈자리 수락과 원장 확인
- 회원권 횟수 차감·복구 이력
- 12시간 이내 취소 예외 처리
- 출석 상태와 노쇼 기록
- 수업별 처리 과정 시간순 표시
- 문자 발송 결과와 실패 기록
- 중복 예약·순서 누락 방지
- 오류 수정과 조정 이력
이어서 만들 기능
- 원장의 월 구독료 결제
- 스튜디오별 대기 응답 시간과 취소 정책 설정
- 기간별 노쇼·취소 통계
- 노쇼 이력을 이용한 예약 제한 정책
- 강사와 프런트 직원 권한
- 여러 업종 지원
- 회원권 온라인 결제와 충전
첫 개발에서는 응답 시간과 무료 취소 기준을 아래 고정 규칙으로 적용한다.
4. 확정된 운영 규칙
예약과 대기
| 항목 | 규칙 |
|---|---|
| 수업 정원 | 수업별 5~15명 |
| 회원 본인 확인 | 휴대폰 번호와 인증번호 |
| 예약 가능 | 정원보다 확정 예약자가 적을 때 |
| 대기 신청 | 정원이 찬 수업에 신청 |
| 대기 순서 | 대기 신청 시각과 변경되지 않는 등록 순번의 오름차순 |
| 회원에게 보이는 정보 | 현재 내 대기 순번과 전체 대기 인원 |
| 개인정보 | 다른 회원의 이름과 휴대폰 번호는 표시하지 않음 |
| 빈자리 안내 | 대기 순번이 빠른 회원부터 한 명씩 문자 링크 발송 |
| 무응답 | 응답 마감 후 대기 수락 만료 처리하고 다음 회원에게 발송 |
같은 시각에 여러 신청이 들어와도 순서가 바뀌지 않도록 별도의 등록 순번을 저장한다.
대기 제안 응답 시간
수업 시작 시각을 S, 제안 발송 시각을 T라고 한다.
| 제안 발송 시점 | 응답 시간 |
|---|---|
T가 S-2시간 이전 또는 같은 경우 | 1시간 |
T가 S-2시간 이후인 경우 | 10분 |
화면과 문자에는 “10분 안에 응답”만 쓰지 않고 다음과 같이 날짜가 포함된 절대 시각을 표시한다.
2026년 9월 1일 18:20까지 수락해 주세요.
가정: 응답 마감 시각이 수업 시작 이후가 되는 경우에는 수업 시작 시각을 최종 마감으로 사용한다. 실제 운영 전 확정이 필요하다.
취소와 회원권 처리
| 취소 시점 | 예약 처리 | 회원권 처리 |
|---|---|---|
| 무료 취소 마감 시각까지 | 예약 취소 및 좌석 반환 | 차감 없음 또는 기존 차감 복구 |
| 무료 취소 마감 이후 | 예약 취소 및 좌석 반환 | 원장이 차감 또는 미차감을 선택하고 이유 기록 |
| 원장 승인 미차감 | 취소 기록 유지 | 예외 복구 이력 +1회 생성 |
| 휴강 | 예약 일괄 취소 | 기존 차감 복구 |
무료 취소 마감 시각은 수업 시작 12시간 전이다.
모든 취소에서 회원은 다음 중 하나를 고르고 필요하면 내용을 추가한다.
- 지각
- 건강
- 개인 사정
- 기타
취소 사유의 지각은 실제 출석 상태인 지각 출석과 별개의 취소 사유다.
회원권 차감 방식
구현 가정: 예약이 확정될 때 회원권 1회를 차감한다.
- 일반 예약 확정:
-1회 - 대기 신청: 차감 없음
- 빈자리 제안 수신: 차감 없음
- 대기 수락 후 예약 확정:
-1회 - 무료 취소: 원본 차감과 연결된
+1회 - 12시간 이내 취소 후 미차감 승인: 원본 차감과 연결된
+1회 - 노쇼: 예약 확정 시 이미 차감했으므로 추가로 차감하지 않음
잔여 횟수를 직접 덮어쓰지 않는다. 차감·복구·수동 조정을 모두 별도의 회원권 이력으로 남긴다.
노쇼
- 노쇼는 회원이 취소한 상태가 아니다.
- 수업 종료 후 원장이 실제 참여 여부를 확인해 기록한다.
- 출석 상태는
출석,지각 출석,노쇼,보류를 사용한다. - 노쇼로 확정해도 예약 확정 시 차감된 횟수를 다시 차감하지 않는다.
- 노쇼 예외가 승인되면 노쇼 기록은 유지하고 회원권에 복구 이력을 추가한다.
- 회원별 노쇼 기록은 원장의 예약 승인 판단 화면에 표시한다.
- 노쇼를 이유로 대기 순번을 자동 변경하는 기능은 운영 정책이 확정된 뒤 적용한다.
5. 확인이 필요한 운영 충돌
자료 안에 서로 다른 답이 있으므로 개발팀이 임의로 한쪽을 선택하면 안 된다.
빈자리 수락 후 예약 확정 방식
다음 두 내용이 함께 존재한다.
- 대기 회원이 수락하면 항상
승인 대기로 바꾸고 원장이 최종 승인한다. - 회원권 횟수가 부족하거나 예외 대상일 때만 원장 확인 후 확정한다.
따라서 데이터와 화면은 두 방식을 모두 처리할 수 있게 만든다.
approval_required: 원장 승인 필요 여부approval_reason: 회원권 부족, 회원권 만료, 예외 대상, 전체 승인 정책 등승인 대기상태- 원장의 승인·반려 기능
실제 시험 운영 전 다음 중 적용 방식을 확정해야 한다.
- 모든 대기 수락을 원장이 승인
- 정상 회원권은 자동 확정하고 부족·만료·예외 건만 원장이 승인
추가 확인 항목
| 항목 | 확인할 내용 |
|---|---|
| 승인 대기 만료 | 원장이 일정 시간 응답하지 않을 때 좌석을 계속 보류할지, 다음 대기자에게 넘길지 |
| 문자 발송 실패 | 같은 회원에게 재발송할지, 최종 실패 후 다음 대기자에게 넘길지 |
| 명시적 거절 | 빈자리 화면에 이번에는 받지 않기 버튼을 둘지. 현재 확정 흐름은 수락 또는 무응답임 |
| 일반 예약의 회원권 부족 | 바로 예약을 막을지, 원장 승인 요청으로 보낼지 |
| 수업 시작 이후 | 승인 대기나 수락 대기를 자동 종료할지 |
| 휴대폰 인증 수준 | 휴대폰 번호 소유 확인만 필요한지, 별도의 본인확인 절차가 필요한지 |
| 원장 로그인 | 비밀번호, 이메일 링크, 휴대폰 인증 중 사용할 방식 |
| 스튜디오 시간대 | 첫 시험 스튜디오는 Asia/Seoul로 보는 것이 적합하나 최종 확정 필요 |
6. 주요 사용자 흐름
6.1 원장 초기 설정
원장 로그인
→ 회원 이름·휴대폰 번호 등록
→ 횟수제 회원권 정보 등록
→ 수업 날짜·시간·정원 등록
→ 카카오톡 단체방에 회원용 예약 링크 공유
회원권 등록 항목:
- 회원권 상품명
- 총 횟수
- 현재 잔여 횟수
- 시작일
- 만료일
- 사용 가능 상태
회원권 결제 금액과 결제 처리는 입력하지 않는다.
6.2 회원의 일반 예약
카카오톡 예약 링크 열기
→ 휴대폰 번호 입력
→ 인증번호 확인
→ 수업 목록 조회
→ 수업 선택
→ 잔여 자리와 무료 취소 마감 시각 확인
→ 예약하기
→ 정원과 중복 예약 재검사
→ 예약 확정
→ 회원권 1회 차감
→ 내 예약 화면에서 결과 확인
완료 조건:
- 확정 예약자가 정원을 넘지 않는다.
- 같은 회원이 같은 수업을 중복 예약하지 않는다.
- 예약과 회원권 차감이 함께 성공하거나 함께 실패한다.
- 회원에게 예약 상태와 차감 후 잔여 횟수가 표시된다.
6.3 회원의 대기 신청
만석 수업 선택
→ 현재 대기 인원 확인
→ 대기 신청
→ 대기 신청 시각과 등록 순번 저장
→ 내 대기 순번 표시
대기 중에는 회원권을 차감하지 않는다.
완료 조건:
- 같은 회원이 같은 수업에 대기 신청을 중복으로 만들 수 없다.
- 회원에게 다른 회원의 개인정보를 보여주지 않는다.
- 대기 취소나 앞 회원의 상태 변경이 발생하면 순번이 다시 계산된다.
- 원본 등록 순번은 변경하지 않는다.
6.4 예약 취소와 빈자리 발생
내 예약 화면
→ 취소 선택
→ 취소 사유 선택
→ 필요하면 상세 내용 입력
→ 횟수 처리 안내 확인
→ 취소 확정
→ 좌석 반환
→ 취소 시점 판정
→ 회원권 처리
→ 첫 대기 회원에게 문자 발송
12시간 이내 취소의 경우:
예약 취소
→ 좌석은 즉시 반환
→ 회원권 처리 상태는 원장 확인 대상으로 표시
→ 원장이 차감 유지 또는 미차감 선택
→ 이유 기록
→ 미차감이면 예외 복구 이력 생성
대기 안내는 횟수 처리 완료를 기다리지 않고 빈자리가 생긴 즉시 시작한다.
6.5 취소 자리 순차 안내
빈자리 발생
→ 해당 수업에 활성 제안이나 승인 대기 좌석이 있는지 확인
→ 대기 신청 시각·등록 순번이 가장 빠른 회원 선택
→ 응답 마감 시각 계산
→ 문자 수락 링크 발송
→ 회원 상태를 수락 대기로 변경
회원이 기한 내 수락하면:
수락 링크 열기
→ 링크 유효성 확인
→ 수업과 응답 마감 시각 표시
→ 수락
→ 회원권과 중복 예약 확인
→ 승인 필요 여부 판정
├─ 승인 필요: 승인 대기 + 좌석 보류
└─ 승인 불필요: 예약 확정 + 회원권 1회 차감
회원이 응답하지 않으면:
응답 마감
→ 대기 수락 만료
→ 좌석 보류 해제
→ 다음 대기 회원 선택
→ 새 문자 발송
좌석 보류
공정한 순서를 유지하기 위해 다음 상태에서는 해당 좌석을 일반 예약에 다시 노출하지 않는다.
- 회원의 응답을 기다리는
수락 대기 - 원장의 결정을 기다리는
승인 대기
한 수업에서 여러 자리가 동시에 비면 빈자리 수만큼 대기 순번 앞 회원에게 각각 제안할 수 있다. 한 회원에게 같은 수업의 제안을 중복 발송하면 안 된다.
6.6 원장 최종 승인
승인 대기 목록 확인
→ 회원 정보와 수락 시각 확인
→ 회원권 잔여 횟수·만료일 확인
→ 최근 취소·노쇼·예외 이력 확인
→ 승인 또는 반려
승인:
- 예약을 확정한다.
- 보류 좌석을 확정 좌석으로 바꾼다.
- 회원권 1회 차감 이력을 만든다.
- 대기 신청과 제안을 완료 처리한다.
반려:
- 반려 사유를 기록한다.
- 승인 대기 좌석을 해제한다.
- 해당 회원의 제안을 종료한다.
- 다음 대기 회원에게 안내한다.
6.7 출석과 노쇼
수업 종료
→ 원장이 예약자 목록 확인
→ 출석 / 지각 출석 / 노쇼 / 보류 선택
→ 처리자와 처리 시각 기록
→ 회원 상세의 출결 관리 이력에 반영
노쇼 예외가 필요한 경우:
노쇼 기록 유지
→ 예외 처리 선택
→ 복구 사유 입력
→ 원본 예약 차감과 연결된 +1회 이력 생성
6.8 오류 수정
잘못된 예약·대기·회원권 이력 선택
→ 오류 유형 선택
→ 수정 전후 내용 확인
→ 수정 사유 입력
→ 조정 실행
→ 원본 기록과 연결된 새 조정 이력 생성
기존 기록은 삭제하거나 덮어쓰지 않는다.
7. 화면 구성과 완료 조건
7.1 회원용 화면
1) 회원용 휴대폰 인증 화면
화면 ID: member-phone-auth
목적: 별도 회원가입 없이 등록된 회원과 휴대폰 번호를 연결한다.
주요 항목
- 스튜디오명
- 휴대폰 번호 입력
- 인증번호 발송
- 인증번호 입력
- 남은 인증 시간
- 재전송
- 오류 안내
동작
- 인증번호 만료
- 재전송 제한
- 입력 실패 횟수 제한
- 인증 완료 후 원래 열려고 했던 화면으로 복귀
완료 조건
- 등록된 회원 번호와 인증된 번호가 연결된다.
- 인증 전에는 예약·취소·대기 내역을 조회할 수 없다.
- 인증에 실패해도 다른 회원 정보가 노출되지 않는다.
2) 회원용 수업 목록·예약·대기 신청 화면
화면 ID: member-class-list
목적: 회원이 원하는 수업을 찾아 예약하거나 대기 신청한다.
표시 정보
- 날짜
- 수업 시작·종료 시각
- 수업명
- 정원
- 예약 인원 또는 잔여 자리
- 예약 가능, 마감, 대기 가능, 휴강 상태
- 무료 취소 마감 시각
- 예약 또는 대기 버튼
완료 조건
- 자리가 있으면 예약할 수 있다.
- 만석이면 대기 신청할 수 있다.
- 마지막 자리에 여러 요청이 동시에 들어와도 정원을 넘지 않는다.
- 휴강 수업은 예약과 대기 신청을 막는다.
3) 회원용 내 예약·대기 순번·취소 화면
화면 ID: member-reservations
목적: 회원이 예약과 대기 상태를 확인하고 취소한다.
표시 정보
- 예약 확정 수업
- 승인 대기 수업
- 대기 신청 수업
- 현재 내 대기 순번
- 전체 대기 인원
- 무료 취소 마감 시각
- 취소 시 예상 회원권 처리
- 회원권 잔여 횟수
취소 입력
- 취소 사유
- 상세 내용
- 취소 확인
완료 조건
- 모든 취소에서 사유를 제출한다.
- 취소 완료 후 예약 상태와 좌석 수가 즉시 바뀐다.
- 대기 신청 취소와 확정 예약 취소를 구분한다.
- 다른 회원의 이름과 연락처를 보여주지 않는다.
4) 문자 링크에서 여는 빈자리 수락 화면
화면 ID: vacancy-accept
목적: 대기 회원이 취소 자리를 정해진 시간 안에 수락한다.
표시 정보
- 스튜디오명
- 수업 날짜와 시간
- 수업명
- 응답 마감 절대 시각
- 현재 회원권 잔여 횟수
- 수락 후 처리 방식
- 예약 수락 버튼
상태별 안내
- 수락 가능
- 이미 수락함
- 대기 수락 만료
- 다른 처리로 종료됨
- 승인 대기
- 예약 확정
- 원장 반려
- 문자 링크가 유효하지 않음
완료 조건
- 다른 회원이 링크 주소를 알아도 수락할 수 없다.
- 같은 링크를 반복 눌러도 한 번만 처리된다.
- 만료된 링크는 수락을 실행하지 않고 만료 시각을 보여준다.
- 회원권이 부족해도 확인된 흐름에 따라 원장 승인 요청을 만들 수 있다.
7.2 원장용 화면
5) 날짜별 수업·예약 인원·대기 현황 화면
화면 ID: owner-class-status
목적: 원장이 하루 운영 상태와 처리할 일을 한눈에 확인한다.
표시 정보
- 날짜별 수업
- 정원과 예약 인원
- 대기 인원
- 수락 대기 건
- 승인 대기 건
- 응답 마감 임박 건
- 12시간 이내 취소 처리 대기 건
- 출석·노쇼 처리 대기 건
- 문자 발송 실패 건
주요 행동
- 수업 등록·수정
- 수업 상세 열기
- 승인 대기 열기
- 출석 처리
- 문자 실패 확인
완료 조건
- 좌석 수와 각 상태가 서로 일치한다.
- 원장이 우선 처리해야 할 건을 상태별로 구분할 수 있다.
- 상태를 누르면 해당 수업이나 회원 기록으로 이동한다.
6) 수업별 처리 과정 화면
화면 ID: class
목적: 수업에서 발생한 일을 시간순으로 확인한다.
시간순 기록
- 예약 생성
- 예약 취소
- 취소 사유
- 회원권 차감·복구
- 대기 신청
- 빈자리 제안
- 문자 발송 결과
- 회원 수락
- 대기 수락 만료
- 원장 승인·반려
- 출석·노쇼
- 오류 수정
완료 조건
- 누가, 언제, 무엇을 처리했는지 확인할 수 있다.
- 대기 순서 누락 여부를 등록 순번으로 검토할 수 있다.
- 각 기록에서 관련 회원·예약·회원권 이력으로 이동할 수 있다.
7) 회원별 회원권 횟수·취소 예외·노쇼 기록 화면
화면 ID: owner-member-records
목적: 회원별 이용 이력과 원장의 처리 근거를 관리한다.
상단 정보
- 회원 이름
- 마스킹된 휴대폰 번호
- 인증 여부
- 회원권 종류
- 잔여 횟수
- 시작일과 만료일
- 최근 취소와 노쇼 횟수
탭
- 예약·대기
- 출결 관리
- 회원권
- 회원권 이력
- 취소 예외
- 내부 메모
완료 조건
- 현재 잔여 횟수와 회원권 이력의 합계가 일치한다.
- 노쇼 기록과 연결 예약을 확인할 수 있다.
- 차감·복구 이력의 원본 기록을 찾을 수 있다.
8) 수업 등록·수정 화면
화면 ID: MS1
입력 항목
- 수업명
- 날짜
- 시작·종료 시각
- 정원 5~15명
- 예약 가능 여부
- 대기 신청 가능 여부
- 수업 상태
완료 조건
- 정원 범위를 검사한다.
- 이미 예약자가 있는 수업은 예약자 수보다 낮게 정원을 줄이지 못하게 한다.
- 시작 시각 변경 시 무료 취소 마감과 대기 응답 기준을 다시 계산한다.
- 휴강 처리 시 예약과 회원권 복구 대상을 보여준다.
9) 빈자리 수락 승인 화면
화면 ID: MS2
표시 정보
- 회원
- 수업
- 대기 신청 시각과 등록 순번
- 제안 발송 시각
- 회원 수락 시각
- 회원권 잔여 횟수와 만료일
- 최근 노쇼·취소 예외
- 승인 대기 좌석
- 승인 필요 이유
행동
- 예약 승인
- 반려 및 사유 입력
완료 조건
- 이미 다른 처리로 채워진 좌석은 승인할 수 없다.
- 승인과 회원권 차감이 함께 처리된다.
- 반려하면 다음 대기 회원 안내가 이어진다.
- 중복 승인을 방지한다.
10) 오류 수정·조정 이력 화면
화면 ID: MS3
오류 유형 예시
- 중복 예약
- 대기 순서 누락
- 잘못된 취소
- 잘못된 노쇼
- 잘못된 회원권 차감·복구
- 정원 계산 오류
완료 조건
- 원본 기록을 삭제하지 않는다.
- 수정 전후 값, 수정 이유, 처리자, 처리 시각을 남긴다.
- 회원권 수정은 새 조정 이력으로 처리한다.
- 좌석 수가 바뀌면 대기 안내 필요 여부를 다시 검사한다.
11) 회원·회원권 초기 등록 화면
화면 ID: MS4
입력 항목
- 회원 이름
- 휴대폰 번호
- 활성 상태
- 회원권 상품명
- 총 횟수
- 잔여 횟수
- 시작일
- 만료일
- 내부 메모
완료 조건
- 같은 스튜디오 안에서 중복 휴대폰 번호를 검사한다.
- 초기 잔여 횟수도
구매 등록또는초기 등록회원권 이력으로 남긴다. - 번호가 인증되면 해당 회원 기록과 연결된다.
12) 원장 로그인 화면
원장 정보와 회원 개인정보를 보호하려면 원장 인증 화면이 필요하다. 로그인 방식은 확인이 필요하지만, 어떤 방식을 선택하더라도 회원 인증 세션과 분리해야 한다.
8. 상태 설계
수업 상태
- 예약 가능
- 마감
- 진행 완료
- 휴강
예약 상태
- 예약 확정
- 승인 대기
- 무료 취소
- 12시간 이내 취소
- 원장 반려
- 스튜디오 취소
대기 신청 상태
- 대기
- 수락 대기
- 수락
- 대기 수락 만료
- 대기 취소
- 자동 종료
출석 상태
- 미처리
- 출석
- 지각 출석
- 노쇼
- 보류
- 수업 취소
예외 승인 상태
- 처리 대기
- 차감 유지
- 미차감 승인
- 반려
- 취소
문자 상태
- 발송 요청
- 업체 접수
- 발송 성공
- 전달 실패
- 재시도 중
- 최종 실패
주요 상태 전환
대기
→ 수락 대기
├─ 회원 수락 → 승인 대기 또는 예약 확정
└─ 무응답 → 대기 수락 만료 → 다음 대기 회원 안내
예약 확정
├─ 무료 취소 → 좌석 반환 + 회원권 복구
├─ 12시간 이내 취소 → 좌석 반환 + 원장 횟수 처리
├─ 출석
├─ 지각 출석
├─ 노쇼
└─ 휴강 → 좌석 해제 + 회원권 복구
9. 핵심 데이터 구조
모든 운영 데이터에는 studio_id를 저장해 다른 스튜디오의 정보와 섞이지 않게 한다.
| 데이터 | 주요 항목 |
|---|---|
| 스튜디오 | 이름, 시간대, 상태, 예약 링크 |
| 원장 계정 | 로그인 정보, 스튜디오 ID, 권한, 활성 상태 |
| 회원 | 이름, 휴대폰 번호, 인증 상태, 활성 상태, 내부 메모 |
| 회원권 | 상품명, 총 횟수, 현재 잔여 횟수, 시작일, 만료일, 상태 |
| 회원권 이력 | 증감 횟수, 유형, 처리 전후 잔여 횟수, 원본 이력, 사유, 처리자 |
| 수업 | 수업명, 시작·종료 시각, 정원, 상태 |
| 예약 | 회원, 수업, 상태, 확정·취소 시각, 무료 취소 마감, 연결 회원권 |
| 취소 기록 | 취소 사유, 상세 내용, 취소 시각, 횟수 처리 상태 |
| 대기 신청 | 회원, 수업, 신청 시각, 변경 불가능한 등록 순번, 상태 |
| 빈자리 제안 | 대기 신청, 발송 시각, 응답 마감, 수락 시각, 상태 |
| 좌석 보류 | 수업, 제안 또는 승인 요청, 보류 시작·만료 시각, 상태 |
| 승인 요청 | 회원, 수업, 승인 필요 이유, 승인 상태, 처리자, 처리 시각 |
| 출석 기록 | 예약, 출석 상태, 처리자, 처리 시각, 메모 |
| 예외 기록 | 대상 예약·회원권 이력, 요청 사유, 승인 결과, 승인자 |
| 문자 기록 | 메시지 ID, 수신 번호, 발송 유형, 결과, 실패 코드, 재시도 횟수 |
| 오류 수정 기록 | 원본 데이터, 수정 전후 값, 사유, 처리자, 처리 시각 |
| 예약 작업 | 실행 예정 시각, 작업 유형, 실행 상태, 재시도 횟수 |
회원권 이력 유형
- 초기 등록
- 예약 차감
- 무료 취소 복구
- 12시간 이내 취소 예외 복구
- 노쇼 예외 복구
- 휴강 복구
- 수동 추가
- 수동 차감
- 오류 수정
회원권 잔여 횟수는 회원권 이력의 합계와 일치해야 한다.
10. 서버 처리 기준
동시에 처리되어야 하는 작업
다음 작업은 하나의 처리 단위로 묶는다. 일부만 성공한 상태를 남기면 안 된다.
- 예약 확정과 회원권 차감
- 무료 취소와 회원권 복구
- 빈자리 수락과 좌석 보류
- 원장 승인과 예약 확정
- 원장 반려와 다음 대기 안내 예약
- 노쇼 예외 승인과 회원권 복구
- 오류 수정과 조정 이력 생성
중복 실행 방지
모든 변경 요청에 고유한 요청값을 사용한다.
- 예약 버튼 반복 클릭
- 취소 버튼 반복 클릭
- 수락 링크 반복 실행
- 원장 승인 버튼 반복 클릭
- 문자 업체의 동일 결과 반복 전달
동일 요청이 다시 들어오면 새 기록을 만들지 않고 기존 처리 결과를 돌려준다.
정원 검사
좌석 계산 시 다음을 함께 센다.
- 예약 확정
- 유효한 수락 대기 좌석
- 유효한 승인 대기 좌석
어떤 경우에도 이 합계가 정원을 넘으면 안 된다.
예약된 시간에 실행할 작업
다음 작업은 사용자가 화면을 열지 않아도 서버에서 실행되어야 한다.
- 인증번호 만료
- 대기 응답 마감
- 대기 수락 만료 처리
- 다음 대기 회원 문자 발송
- 문자 발송 재시도
- 수업 시작 이후 남은 제안 종료
- 실패하거나 누락된 작업 재확인
서버가 재시작되더라도 실행되지 않은 작업을 다시 찾을 수 있어야 한다.
11. 문자와 링크 기준
빈자리 안내 문자 필수 내용
- 스튜디오명
- 수업 날짜와 시작 시각
- 수업명
- 응답 마감 날짜와 시각
- 수락 링크
예시:
[OO 필라테스]
9월 1일 19:00 기구 필라테스 수업에 자리가 생겼습니다.
9월 1일 18:20까지 아래 링크에서 수락해 주세요.
https://…
수락 링크 조건
- 회원과 빈자리 제안 건을 식별한다.
- 만료 시각이 있다.
- 한 번 처리된 링크는 다시 실행되지 않는다.
- 다른 회원의 인증 상태로 사용할 수 없다.
- 주소에 회원 이름이나 휴대폰 번호를 직접 넣지 않는다.
- 만료 후에도 현재 상태와 처리 시각은 안내한다.
문자 발송 기록
문자 발송 요청 성공과 실제 전달 성공을 구분한다.
- 문자 업체 메시지 ID
- 발송 요청 시각
- 업체 접수 결과
- 실제 전달 결과
- 실패 코드
- 재시도 횟수
- 최종 실패 여부
12. 개인정보와 접근 권한 참고
- 회원 화면에는 다른 회원의 이름과 연락처를 표시하지 않는다.
- 회원은 자신의 예약·대기·회원권 정보만 볼 수 있다.
- 원장 화면에서도 휴대폰 번호는 기본적으로 일부를 가린다.
- 수락 링크만으로 다른 회원 기록을 조회할 수 없어야 한다.
- 스튜디오별 데이터 접근을 분리한다.
- 회원권 조정, 노쇼 확정, 예외 승인, 오류 수정에는 처리자를 남긴다.
- 휴대폰 번호, 예약·취소·노쇼 기록의 보관 기간과 회원 안내 문구는 실제 운영 조건에 맞춰 정해야 한다.
- 문자 발신번호 등록과 인증·안내 문자 비용은 사용할 문자 업체 기준으로 확인해야 한다.
13. 개발 순서
1단계: 운영 기반
- 스튜디오 데이터
- 원장 로그인
- 회원·회원권 초기 등록
- 수업 등록과 정원 관리
- 회원권 이력 구조
2단계: 회원 예약
- 모바일 웹 화면
- 휴대폰 인증
- 수업 목록
- 일반 예약
- 내 예약
- 취소 사유
- 무료 취소와 회원권 복구
3단계: 대기 자동화
- 대기 신청
- 등록 순번
- 내 대기 순번 표시
- 빈자리 감지
- 문자 발송
- 1시간·10분 응답 마감
- 수락 대기와 만료
- 다음 대기 회원 자동 안내
4단계: 원장 승인과 예외
- 승인 대기 좌석
- 승인·반려
- 회원권 부족·만료 표시
- 12시간 이내 취소 처리
- 예외 복구와 사유 기록
5단계: 출결 관리와 수정
- 출석·지각 출석·노쇼·보류
- 회원별 노쇼 이력
- 수업별 시간순 기록
- 오류 수정과 조정 이력
6단계: 시험 운영
- 창업자 스튜디오 회원 등록
- 실제 수업 일정 등록
- 인증 문자 시험
- 취소 자리 순차 안내 시험
- 중복 요청과 문자 실패 시험
- 기존 단체방 운영과 병행 비교
- 오류와 회원 문의 기록
14. 첫 개발의 완료 기준
다음 항목이 모두 실제 모바일 웹과 원장 화면에서 동작해야 첫 개발이 완료된 것으로 본다.
회원 이용
- 회원이 카카오톡의 예약 링크를 휴대폰에서 연다.
- 휴대폰 번호와 인증번호로 본인을 확인한다.
- 인증 후 원래 열려고 했던 화면으로 돌아간다.
- 수업별 날짜·시간·정원·잔여 자리를 확인한다.
- 자리가 있으면 예약한다.
- 만석이면 대기 신청한다.
- 자신의 대기 순번과 전체 대기 인원을 확인한다.
- 모든 취소에서 사유를 선택하고 상세 내용을 추가할 수 있다.
- 무료 취소와 12시간 이내 취소의 횟수 처리 안내가 다르게 표시된다.
- 문자 링크에서 빈자리를 수락한다.
- 만료되거나 이미 처리된 링크의 현재 상태를 확인한다.
대기 순서
- 대기 신청 시각과 등록 순번으로 순서를 정한다.
- 먼저 신청한 회원부터 한 명씩 안내한다.
- 수업 시작 2시간 전까지는 1시간의 응답 시간을 적용한다.
- 그 이후에는 10분의 응답 시간을 적용한다.
- 무응답 시 대기 수락 만료로 처리한다.
- 다음 대기 회원에게 자동으로 문자 링크를 보낸다.
- 수락 대기나 승인 대기 좌석을 일반 회원이 가져갈 수 없다.
- 여러 요청이 동시에 들어와도 정원을 넘지 않는다.
원장 운영
- 수업 날짜·시간·정원을 등록하고 수정한다.
- 날짜별 예약 인원과 대기 현황을 확인한다.
- 취소, 문자 발송, 회원 응답, 승인 결과를 시간순으로 확인한다.
- 빈자리 수락을 승인하거나 반려한다.
- 회원권 부족이나 예외 대상 회원도 승인 여부를 결정할 수 있다.
- 12시간 이내 취소의 차감 유지 또는 미차감을 선택한다.
- 처리 이유를 기록한다.
- 출석·지각 출석·노쇼·보류를 기록한다.
- 회원별 노쇼와 취소 예외 기록을 확인한다.
- 중복 예약이나 잘못된 회원권 처리를 원본 기록을 보존하며 수정한다.
데이터 일관성
- 예약 확정과 회원권 차감이 함께 처리된다.
- 무료 취소와 회원권 복구가 함께 처리된다.
- 같은 요청을 반복해도 한 번만 처리된다.
- 회원권 현재 잔여 횟수와 회원권 이력 합계가 일치한다.
- 복구 이력은 원본 차감 이력과 연결된다.
- 오류 수정 전후 값과 사유가 남는다.
- 다른 스튜디오나 다른 회원의 데이터가 노출되지 않는다.
- 서버 재시작 후에도 대기 만료와 문자 발송 작업이 누락되지 않는다.
시험 운영 완료
- 창업자 스튜디오 회원과 회원권 정보가 등록된다.
- 실제 수업에서 예약부터 취소·대기·빈자리 수락까지 전체 흐름을 완료한다.
- 문자 발송 성공과 실패 상태를 확인한다.
- 대기 순번 누락과 중복 예약 시험을 통과한다.
- 원장이 단체방 재공지 없이 취소 자리 한 건을 최종 예약까지 처리한다.
- 발생한 오류와 수정 결과를 기록으로 확인할 수 있다.