전체 얼개를 볼 때 읽는 문서

시스템 구성

화면·서버·저장소가 각각 무엇을 맡는지 적었습니다.

11,655자 · 시스템이 만든 그대로입니다

사람이 손댄 곳 2군데
  • · 문서와 화면 목록은 손대지 않았습니다. 이 사례에서 사람이 한 일은 수정 요청을 적어 보낸 것과, 검토가 되물은 것에 답한 것뿐입니다.
  • · 아래 ‘고쳐 가는 과정’의 요청문·검토문은 실제로 오간 원문입니다. 줄이거나 다듬지 않았습니다.

시스템 구성 문서 — 필라테스 공정 대기 예약

1. 시스템 목표

정원 5~15명 규모의 기구 필라테스 스튜디오에서 원장이 예약·취소·대기 신청을 직접 관리할 수 있는 웹서비스입니다.

회원은 휴대폰 웹페이지에서 수업을 예약하거나 대기 신청합니다. 취소로 빈자리가 생기면 대기 순번에 따라 한 명씩 문자 수락 링크를 받고, 수락한 회원은 승인 대기 상태가 됩니다. 원장이 최종 승인하면 예약이 확정됩니다.

핵심 목표는 다음과 같습니다.

  • 단톡방에 빈자리를 공지하고 개별 답변하는 일을 줄인다.
  • 대기 신청 시각과 변경 불가능한 등록 순번을 기준으로 공정한 대기 순번을 운영한다.
  • 무료 취소 마감 시각, 12시간 이내 취소, 예외 복구를 일관되게 기록한다.
  • 회원권 이력, 취소 사유, 노쇼, 오류 수정 이력을 남겨 원장이 처리 근거를 확인할 수 있게 한다.

2. 사용자와 권한

역할할 수 있는 일
회원휴대폰 본인 확인, 수업 조회, 예약, 대기 신청, 내 대기 순번 확인, 예약 취소, 취소 사유 제출, 빈자리 수락 또는 거절
원장회원·회원권 초기 등록, 수업 등록·수정, 예약·대기 현황 확인, 빈자리 수락 승인·반려, 회원권 횟수 처리, 예외 복구, 출석 상태·노쇼 기록, 오류 수정 이력 확인

첫 개발 범위에서는 강사·프런트 직원용 별도 권한을 만들지 않습니다.


3. 시스템 구성

3-1. 구성 원칙

  • 회원과 원장은 같은 웹서비스를 사용하되, 역할에 따라 접근 가능한 화면과 기능을 나눕니다.
  • 회원은 앱 설치 없이 카카오톡 등에 공유된 링크를 열어 모바일 웹에서 이용합니다.
  • 서버는 예약 확정, 취소, 대기 순번, 회원권 횟수 차감처럼 데이터가 어긋나면 안 되는 처리를 담당합니다.
  • 문자 발송과 휴대폰 본인 확인은 외부 문자 서비스와 연동합니다.
  • 응답 만료, 다음 대기 회원 안내는 예약된 시간에 자동 실행되는 작업으로 처리합니다.
  • 회원권 결제와 충전은 서비스 밖에서 처리하며, 서비스에는 원장이 등록한 회원권 정보와 회원권 이력만 저장합니다.

3-2. 시스템 구성도

그림을 그리는 중…

회원과 원장은 각자 필요한 웹 화면을 통해 서버에 요청합니다. 서버는 예약·대기·회원권 처리 결과를 데이터 저장소에 기록하고, 휴대폰 인증번호와 빈자리 수락 링크는 문자 서비스로 보냅니다.

응답 만료와 다음 대기 회원 안내는 사용자가 화면을 열지 않아도 서버 작업이 정해진 시각에 실행해야 합니다.


4. 구성 요소별 책임

구성 요소책임구현 기준
회원용 모바일 웹수업 조회, 예약, 대기 신청, 대기 순번 확인, 취소 사유 제출, 빈자리 수락모바일 화면을 우선으로 구성한다. 다른 회원의 이름과 휴대폰 번호는 보여주지 않는다.
원장용 웹수업 관리, 대기 현황 확인, 승인·반려, 회원권 이력과 예외 복구, 노쇼, 오류 수정원장만 회원 전체 정보와 처리 이력을 볼 수 있다. 휴대폰 번호는 기본적으로 마스킹한다.
예약·취소·대기 서버 기능정원 확인, 중복 예약 방지, 대기 순번 부여, 취소 처리, 빈자리 생성마지막 좌석 처리와 대기 순번 변경은 한 번에 저장한다.
원장 승인·회원권 이력 서버 기능승인 대기 좌석 보류, 예약 확정, 회원권 횟수 차감, 예외 복구, 노쇼·오류 조정 기록기존 회원권 이력을 덮어쓰거나 삭제하지 않고 새 이력을 추가한다.
응답 만료·순차 문자 작업대기 제안 발송, 수락 마감 확인, 대기 수락 만료 처리, 다음 대기 회원 안내, 문자 실패 재확인서버 재시작 뒤에도 미처리 작업을 다시 찾을 수 있어야 한다.
인증·권한 확인휴대폰 번호 인증, 인증 세션 유지, 회원·원장 접근 구분인증번호 만료, 재전송 제한, 입력 실패 제한을 둔다.
관계형 데이터 저장소회원, 수업, 예약, 대기 신청, 대기 제안, 회원권 이력, 출석 상태, 오류 수정 기록 저장서로 연결되는 기록은 ID로 연결하고, 처리 시각과 처리자를 남긴다.
문자 발송·인증번호 서비스인증번호 문자, 빈자리 수락 링크 문자 발송 및 결과 제공발송 요청과 실제 전달 상태를 구분해 저장한다.

5. 핵심 업무 규칙

5-1. 예약과 정원

  • 수업마다 정원은 5~15명으로 등록합니다.
  • 예약 확정 인원이 정원보다 많아질 수 없습니다.
  • 같은 회원은 같은 수업에 중복 예약할 수 없습니다.
  • 수업에 자리가 있으면 회원은 예약을 요청할 수 있습니다.
  • 예약 확정 시 회원권 사용 가능 여부와 잔여 횟수를 확인합니다.
  • 예약 확정과 회원권 횟수 차감은 하나의 처리로 저장합니다.

5-2. 대기 신청과 대기 순번

  • 수업이 마감된 경우 회원은 대기 신청을 할 수 있습니다.
  • 대기 순번은 다음 두 값으로 결정합니다.
    1. 대기 신청 시각
    2. 같은 시각에도 순서를 구분할 수 있는 변경 불가능한 등록 순번
  • 회원 화면에는 본인의 대기 순번과 전체 대기 인원을 보여줍니다.
  • 회원 화면에는 다른 회원의 개인정보를 보여주지 않습니다.
  • 대기 신청 중에는 회원권 횟수를 차감하지 않습니다.

5-3. 빈자리와 순차 문자 안내

취소 등으로 빈자리가 생기면 다음 흐름으로 처리합니다.

  1. 해당 수업의 대기 순번 1번 회원을 찾습니다.
  2. 대기 제안을 만들고 상태를 수락 대기로 변경합니다.
  3. 수락 링크와 응답 마감 시각이 담긴 문자 메시지를 발송합니다.
  4. 수업 시작 2시간 전까지는 응답 시간을 1시간으로 계산합니다.
  5. 수업 시작 2시간 이내에는 응답 시간을 10분으로 계산합니다.
  6. 회원이 응답하지 않으면 상태를 대기 수락 만료로 변경합니다.
  7. 다음 대기 순번 회원에게 같은 방식으로 안내합니다.
  8. 회원이 거절한 경우에도 다음 대기 순번 회원에게 안내합니다.

문자에는 수업 날짜, 시작 시각, 수업명, 수락 마감의 절대 시각을 포함합니다.

5-4. 빈자리 수락과 원장 최종 예약 승인

회원이 문자 링크에서 빈자리를 수락해도 즉시 예약 확정하지 않습니다.

  • 회원이 수락하면 해당 좌석은 임시 보류됩니다.
  • 대기 제안은 수락 상태가 되고 예약은 승인 대기가 됩니다.
  • 원장은 빈자리 수락 승인 화면에서 회원권 잔여 횟수, 만료 여부, 예외 대상 여부, 응답 시각을 확인합니다.
  • 원장이 승인하면 예약이 확정되고 회원권 횟수 차감 이력이 생성됩니다.
  • 원장이 반려하면 좌석 보류를 해제하고 다음 대기 회원 안내를 진행합니다.
  • 승인 대기 좌석의 보류 만료 시간과 만료 후 처리 기준은 확인 필요입니다.

회원권 횟수가 부족하거나 회원권이 만료된 회원도 수락할 수 있습니다. 이 경우에도 원장이 예약 여부를 직접 결정합니다.

5-5. 취소와 회원권 횟수 처리

취소 시점예약 처리회원권 횟수 처리
무료 취소 마감 시각 전무료 취소예약 확정 때 차감된 횟수가 있으면 복구
12시간 이내 취소취소 기록 생성원장이 차감 또는 미차감을 선택하고 이유 기록
휴강수업 취소 처리기존 차감이 있으면 복구
노쇼출석 상태를 노쇼로 기록기존 예약 차감이 있는지 확인하며 중복 차감 방지

모든 취소에서 회원은 지각, 건강, 개인 사정 등의 취소 사유를 선택하고 필요하면 추가 내용을 입력합니다.

12시간 이내 취소에서 원장이 미차감 처리하는 경우에는 기본 횟수 차감 기록을 지우지 않고, 연결된 예외 복구 이력을 추가합니다.

5-6. 출결 관리와 노쇼

  • 수업 종료 후 원장은 예약 확정 회원의 출석 상태를 출석, 지각 출석, 노쇼, 보류 중 하나로 처리합니다.
  • 노쇼는 예약 취소와 별도로 기록합니다.
  • 노쇼 확정 시 처리자와 처리 시각을 남깁니다.
  • 회원별 노쇼 이력은 원장이 이후 예약 승인, 대기 운영, 회원권 횟수 판단에 참고할 수 있습니다.
  • 노쇼에 대한 횟수 차감 또는 예외 복구도 회원권 이력으로 남깁니다.

6. 핵심 기능 흐름도: 취소 후 대기 제안부터 원장 승인까지

그림을 그리는 중…

기존 예약 회원의 취소로 빈자리가 생기면, 서버는 대기 순번상 다음 회원에게만 수락 링크를 보냅니다. 대기 회원이 수락하면 좌석은 승인 대기 상태로 보류되며, 원장이 승인해야 예약 확정과 회원권 횟수 차감이 함께 완료됩니다.

무응답인 경우에는 만료 작업이 대기 수락 만료 처리 후 다음 회원에게 순차 문자 안내를 실행합니다.


7. 화면과 서버 기능 연결

화면주요 사용자 행동서버 처리완료 조건
회원용 휴대폰 인증 화면휴대폰 번호 입력, 인증번호 입력인증번호 발송·검증, 인증 세션 생성인증 완료 후 원래 진입한 수업 또는 수락 화면으로 돌아간다.
회원용 수업 목록·예약·대기 신청 화면수업 선택, 예약 또는 대기 신청정원·중복 예약·회원권 상태 확인, 예약 또는 대기 신청 생성예약 확정 또는 대기 순번이 화면에 표시된다.
회원용 내 예약·대기 순번·취소 화면내 예약 확인, 취소 사유 입력, 취소무료 취소 마감 시각 판정, 취소·회원권 처리 기록, 빈자리 생성취소 결과와 횟수 처리 상태가 표시된다.
문자 링크에서 여는 빈자리 수락 화면수락 또는 거절대기 제안 유효성 확인, 수락 시 좌석 보류·승인 대기 생성처리 결과 또는 만료된 제안 상태가 표시된다.
원장용 날짜별 수업·예약 인원·대기 현황 화면수업별 예약·대기·수락 대기 확인날짜별 수업, 정원, 예약 수, 대기 현황 조회원장이 당일 처리할 수업과 대기 제안을 확인한다.
원장용 수업 등록·수정 화면수업 일정·정원·상태 등록 또는 변경수업 생성·수정, 예약 가능 상태 변경수업 날짜·시간·정원·상태가 저장된다.
원장용 빈자리 수락 승인 화면수락 건 승인 또는 반려좌석 보류 확인, 예약 확정 또는 반려, 회원권 이력 생성승인 시 예약 확정, 반려 시 다음 대기 회원 안내 준비 상태가 된다.
원장용 회원별 회원권 횟수·취소 예외·노쇼 기록 화면회원권 확인, 예외 복구, 노쇼 처리회원권 이력·예외 승인·출석 상태 저장변경 전후 값, 사유, 처리자, 처리 시각이 남는다.
원장용 오류 수정·조정 이력 화면잘못된 처리 수정원본 이력 연결, 새 조정 이력 생성원본 이력은 보존되고 수정 사유가 남는다.
원장용 회원·회원권 초기 등록 화면기존 회원·회원권 등록회원, 휴대폰 번호, 회원권 생성인증된 휴대폰 번호를 해당 회원 기록과 연결할 수 있다.

8. 데이터 저장 구조

관계형 데이터 저장소를 사용합니다. 예약, 대기 순번, 회원권 횟수처럼 여러 기록이 함께 바뀌는 업무에 적합하기 때문입니다.

데이터주요 저장 항목연결 대상
기구 필라테스 스튜디오스튜디오명, 운영 상태회원, 수업
회원이름, 휴대폰 번호, 인증 상태, 활성 상태, 내부 메모회원권, 예약, 대기 신청
회원권회원권명, 총 횟수, 잔여 횟수, 시작일, 만료일, 상태회원, 회원권 이력, 예약
수업날짜, 시작·종료 시각, 수업명, 정원, 예약·대기 가능 상태, 휴강 여부예약, 대기 신청
예약회원, 수업, 예약 상태, 확정·취소 시각, 무료 취소 마감 시각, 출석 상태회원권, 취소, 회원권 이력
취소취소 사유, 추가 내용, 취소 시각, 무료 취소 또는 12시간 이내 취소 여부예약, 예외 승인
대기 신청회원, 수업, 신청 시각, 등록 순번, 현재 상태대기 제안
대기 제안대상 대기 신청, 수락 링크, 발송 시각, 응답 마감 시각, 수락·거절 시각, 상태문자 발송 기록, 빈자리 수락
빈자리 수락수락 시각, 좌석 보류 상태대기 제안, 원장 최종 예약 승인
원장 최종 예약 승인승인 또는 반려 상태, 사유, 처리자, 처리 시각빈자리 수락, 예약
회원권 이력증감 횟수, 처리 전후 잔여 횟수, 유형, 사유, 처리자, 처리 시각회원권, 예약, 원본 이력
출결 관리 기록출석 상태, 노쇼 여부, 처리자, 처리 시각, 메모예약, 회원권 이력
오류 수정 기록수정 대상, 수정 전후 값, 사유, 처리자, 처리 시각예약, 대기 신청, 회원권 이력
문자 발송 기록메시지 ID, 발송 요청 시각, 발송 상태, 전달 상태, 실패 코드, 재시도 횟수휴대폰 본인 확인, 대기 제안

회원권 이력 저장 원칙

회원권 잔여 횟수는 단순 숫자 하나만 수정하지 않습니다.

예를 들어 12시간 이내 취소를 원장이 예외 처리할 때는 다음처럼 기록합니다.

  1. 기존 12시간 이내 취소 차감 이력은 유지합니다.
  2. 원장이 예외 복구 이력을 새로 만듭니다.
  3. 예외 복구 이력은 어떤 기존 차감 기록을 복구했는지 원본 이력으로 연결합니다.

이 방식이면 원장은 나중에 차감·복구 이유를 확인할 수 있습니다.


9. 데이터 처리 안전 기준

9-1. 동시에 요청이 들어오는 경우

다음 처리는 하나의 처리 단위로 묶어 일부만 저장되는 상황을 막아야 합니다.

  • 마지막 좌석 예약 확정
  • 빈자리 수락
  • 원장 최종 예약 승인
  • 회원권 횟수 차감 또는 예외 복구
  • 대기 수락 만료 후 다음 대기 회원 안내

예를 들어 마지막 좌석을 두 회원이 동시에 예약 요청해도 한 명만 예약 확정되어야 합니다.

9-2. 중복 요청 방지

통신 문제로 같은 요청이 여러 번 전송될 수 있으므로 다음 요청에는 요청별 고유값을 둡니다.

  • 예약 요청
  • 취소 요청
  • 대기 신청 요청
  • 빈자리 수락 요청
  • 원장 승인·반려 요청
  • 회원권 조정 요청

같은 고유값의 요청은 한 번만 처리하고, 이후 요청에는 이미 처리된 결과를 돌려줍니다.

9-3. 수락 링크 보호

빈자리 수락 링크는 다음 조건을 만족해야 합니다.

  • 특정 회원과 특정 대기 제안에만 연결된다.
  • 응답 마감 시각이 지나면 사용할 수 없다.
  • 수락 또는 거절이 끝난 링크는 다시 처리할 수 없다.
  • 다른 회원이 링크 주소를 알아도 수락할 수 없도록 휴대폰 본인 확인 또는 인증 세션을 확인한다.
  • 만료되거나 처리 완료된 링크를 열면 현재 상태와 처리 시각을 보여준다.

10. 시간 계산 기준

모든 시간은 스튜디오가 운영되는 동일한 시간대 기준으로 계산합니다.

서버가 계산하고 화면에는 날짜가 포함된 절대 시각으로 표시합니다.

기준계산 방식
무료 취소 마감 시각수업 시작 시각에서 12시간 전
12시간 이내 취소무료 취소 마감 시각 이후의 취소
대기 제안 응답 시간수업 시작 2시간 전까지는 1시간
임박 수업 응답 시간수업 시작 2시간 이내에는 10분
대기 수락 만료대기 제안의 응답 마감 시각이 지나도록 수락·거절하지 않은 상태

회원에게는 “1시간 내 응답”처럼 상대 시간만 보여주지 않고, 예를 들어 2026년 8월 31일 18:20까지처럼 정확한 시각을 함께 보여줍니다.


11. 기술 구성 제안

구분초기 선택선택 이유운영 시 주의점
웹 화면·서버Next.js회원용 모바일 웹과 원장용 웹, 서버 요청 처리를 한 프로젝트에서 관리할 수 있다.회원·원장 화면의 권한 검사를 서버에서도 다시 수행해야 한다.
데이터 저장소PostgreSQL 등 관계형 데이터 저장소예약, 정원, 대기 순번, 회원권 이력의 일관된 저장에 적합하다.예약 확정과 회원권 이력을 같은 처리 단위로 저장해야 한다.
예약 작업예약된 작업 실행 서비스 또는 작업 큐응답 만료와 다음 대기 회원 안내를 정해진 시각에 실행할 수 있다.서버가 재시작되어도 미처리 대기 제안을 다시 확인해야 한다.
문자 연동인증번호·안내 문자 발송 서비스휴대폰 본인 확인과 빈자리 수락 링크 전송에 필요하다.발송 요청 성공과 실제 전달 성공을 구분해 기록해야 한다.
접속 관리인증 세션 또는 서명된 접속 정보별도 회원가입을 줄이면서 회원별 예약 정보 접근을 보호한다.인증 세션 만료, 휴대폰 번호 변경 재인증 기준을 정해야 한다.
파일 저장필요 시 별도 파일 저장소예외 승인에 증빙 첨부를 허용하는 경우 사용한다.첫 개발에서 증빙 첨부를 넣을지는 확인 필요하다.

12. 운영상 확인 필요 항목

다음 내용은 구현 전에 원장이 운영 기준을 확정해야 합니다.

항목확인할 내용
승인 대기 좌석 보류 만료회원이 수락한 뒤 원장이 일정 시간 승인하지 않으면 좌석 보류를 언제 해제할지
원장 반려 후 처리승인 반려 즉시 다음 대기 회원에게 문자 안내할지, 원장이 확인 후 진행할지
문자 발송 실패 처리문자 실패 시 같은 회원에게 재발송할지, 몇 회 재시도할지, 언제 다음 대기 회원에게 넘길지
회원권 부족·만료 회원 승인 기준원장이 어떤 경우에 승인하고 어떤 경우에 반려할지
예약 시 회원권 횟수 차감 기준일반 예약 확정 시 즉시 1회 차감하는 방식으로 구현할지 최종 확인 필요
휴대폰 본인 확인 수준휴대폰 번호 소유 확인용 인증번호로 운영할지, 별도 법정 본인확인이 필요한지
문자 발신번호와 비용사용할 문자 업체, 발신번호 등록, 인증번호 문자와 안내 문자 비용
개인정보 보관휴대폰 번호, 취소 사유, 노쇼 기록, 문자 발송 기록의 보관 기간과 회원 안내 문구
원장 월 구독료 결제스튜디오용 월 구독료 결제 기능은 이어서 만들 기능으로 분류되어 있어, 결제수단과 과금 시점을 별도로 확정해야 함

13. 첫 개발 완료 조건

첫 버전은 아래 조건을 모두 만족하면 실제 스튜디오 시험 운영이 가능한 상태로 봅니다.

회원 기능

  • 회원이 공유된 예약 링크에서 휴대폰 본인 확인을 완료할 수 있다.
  • 회원이 수업 목록에서 예약 가능한 수업을 예약할 수 있다.
  • 회원이 마감 수업에 대기 신청하고 본인의 대기 순번을 확인할 수 있다.
  • 회원이 모든 취소에서 취소 사유를 선택하고 추가 내용을 입력할 수 있다.
  • 회원이 무료 취소 마감 시각과 12시간 이내 취소 여부를 확인할 수 있다.
  • 회원이 문자 링크에서 빈자리를 수락 또는 거절할 수 있다.
  • 회원이 만료되거나 이미 처리된 수락 링크를 열었을 때 현재 상태를 확인할 수 있다.

원장 기능

  • 원장이 수업 날짜, 시간, 수업명, 정원, 예약·대기 가능 상태를 등록·수정할 수 있다.
  • 원장이 날짜별 수업의 예약 인원, 대기 순번, 수락 대기, 승인 대기 상태를 확인할 수 있다.
  • 원장이 대기 회원 수락 건을 승인 또는 반려할 수 있다.
  • 원장이 회원권 잔여 횟수와 회원권 이력을 확인할 수 있다.
  • 원장이 12시간 이내 취소의 차감 또는 미차감을 처리하고 이유를 남길 수 있다.
  • 원장이 예외 복구를 원본 이력과 연결해 기록할 수 있다.
  • 원장이 출석 상태와 노쇼를 기록할 수 있다.
  • 원장이 중복 예약, 대기 순서 누락, 잘못된 회원권 처리 등의 오류를 원본 이력을 보존한 채 조정할 수 있다.

자동 처리

  • 취소로 빈자리가 생기면 대기 순번상 다음 회원에게 문자 수락 링크가 발송된다.
  • 수업 시작 2시간 전까지는 1시간, 이후에는 10분의 응답 시간이 적용된다.
  • 회원이 응답하지 않으면 대기 수락 만료로 처리되고 다음 대기 회원에게 안내된다.
  • 정원이 초과되지 않고 동일 회원의 동일 수업 중복 예약이 막힌다.
  • 예약 확정, 원장 승인, 회원권 횟수 차감이 서로 어긋나지 않게 함께 저장된다.
시스템 구성 — 동네 필라테스 예약과 대기 순번 | Prometheon