만들 사람이 기준으로 삼는 문서

기능 요구사항

요구사항마다 주체·시작 조건·정상 흐름·예외 흐름·완료 조건을 적었습니다. 12시간 기준과 그 예외를 어떻게 남기는지가 여기 있습니다.

20,886자 · 시스템이 만든 그대로입니다

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

필라테스 공정 대기 예약 기능 요구사항 문서

1. 제품 목표

정원 5~15명 규모의 기구 필라테스 스튜디오 원장이 회원 약 31~60명의 예약·취소·대기를 관리하는 웹서비스를 만든다.

회원은 카카오톡 등에 공유된 링크를 휴대폰에서 열어 다음 업무를 완료한다.

  • 휴대폰 본인 확인
  • 수업 예약과 취소
  • 대기 신청과 대기 순번 확인
  • 문자 수락 링크를 통한 빈자리 수락

원장은 다음 업무를 완료한다.

  • 수업과 정원 관리
  • 예약자와 대기 순번 확인
  • 대기 제안과 응답 상태 확인
  • 빈자리 수락에 대한 원장 최종 예약 승인
  • 회원권 횟수 차감과 예외 승인
  • 출결 관리와 노쇼 기록
  • 오류 수정 기록 확인

2. 사용자 역할

역할할 수 있는 일
회원휴대폰 본인 확인, 수업 예약, 취소, 대기 신청, 대기 순번 확인, 빈자리 수락
원장회원·회원권 등록, 수업·정원 관리, 예약·대기 현황 확인, 원장 최종 예약 승인, 회원권 이력 관리, 예외 승인, 출결 관리, 노쇼 기록, 오류 수정

강사와 프런트 직원의 별도 역할은 첫 개발 범위에서 확인되지 않았다.

3. 개발 범위

첫 개발 범위

  • 원장과 회원의 접근 권한 구분
  • 회원·회원권 초기 등록
  • 휴대폰 본인 확인
  • 수업 등록과 정원 관리
  • 수업 예약·취소·대기 신청
  • 대기 순번 표시
  • 취소 자리 순차 문자 안내
  • 빈자리 수락과 원장 최종 예약 승인
  • 12시간 이내 취소의 횟수 차감·미차감 처리
  • 예외 승인과 예외 복구
  • 출결 관리와 노쇼 기록
  • 처리 과정 시간순 확인
  • 오류 수정 기록

이어서 만들 범위

  • 스튜디오별 운영 정책 설정
  • 노쇼 기록을 이용한 예약 승인 또는 운영 판단 지원
  • 스튜디오용 월 구독료 결제

첫 개발 범위에 포함하지 않는 항목

사용자가 직접 제외한 범위다.

  • 일반적인 스튜디오 관리 기능 전체
  • 여러 업종으로의 확장
  • 회원의 회원권 결제·충전
  • 강사별 세부 운영 기능
  • 모바일 앱 스토어용 앱

4. 확정된 운영 규칙

  1. 대기 순번은 대기 신청 시각과 변경 불가능한 등록 순번으로 정한다.
  2. 빈자리는 대기 순번이 빠른 회원부터 한 명씩 제안한다.
  3. 대기 제안 시점이 수업 시작 2시간 전까지라면 응답 시간을 1시간 제공한다.
  4. 대기 제안 시점이 수업 시작 2시간 이내라면 응답 시간을 10분 제공한다.
  5. 응답하지 않으면 대기 수락 만료로 처리하고 다음 대기 회원에게 제안한다.
  6. 회원이 빈자리를 수락하면 승인 대기로 전환한다.
  7. 원장이 승인해야 예약이 최종 확정된다.
  8. 회원권 횟수가 부족하거나 사용할 수 없는 상태여도 회원의 빈자리 수락은 받을 수 있다. 이후 원장이 예약 여부를 결정한다.
  9. 무료 취소 마감 시각은 수업 시작 12시간 전이다.
  10. 무료 취소 마감 시각까지 취소하면 회원권 횟수 미차감이 기본이다.
  11. 12시간 이내 취소는 원장이 차감 또는 미차감을 선택하고 이유를 기록한다.
  12. 모든 취소에서 회원은 취소 사유를 선택하고 필요하면 내용을 추가한다.
  13. 회원 화면에는 다른 회원의 개인정보를 표시하지 않고 현재 내 대기 순번과 전체 대기 인원만 표시한다.
  14. 회원의 회원권 결제는 서비스 밖에서 처리한다.

5. 구현 전 확인이 필요한 결정

항목현재 내용확인해야 할 결정
회원권 차감 시점조사 노트에서는 예약 확정 시 1회 차감 후 무료 취소 시 복구하는 방식을 제안했다.예약 확정 시 차감할지, 출석 또는 12시간 이내 취소 시 차감할지 확정 필요
승인 대기 좌석의 보류 시간회원 수락 후 원장 승인까지 좌석을 보류해야 한다.보류 만료 시간과 원장 미응답 시 다음 대기 회원에게 넘길지 확인 필요
수업 직전 응답 마감수업 시작 5분 전에 제안하면 10분 응답 시간이 수업 시작 이후까지 이어질 수 있다.응답 마감을 수업 시작 시각으로 제한할지 확인 필요
문자 발송 실패실패 상태와 재시도 기록은 필요하다.같은 회원에게 재발송할지, 원장이 처리할지, 다음 대기 회원에게 넘길지 확인 필요
일반 예약 시 회원권 부족빈자리 수락의 처리 기준만 확정됐다.자리가 있는 수업을 직접 예약할 때 회원권이 부족한 경우의 처리 방식 확인 필요
부족한 회원권으로 승인원장이 예약 여부를 결정할 수 있다.승인 시 잔여 횟수를 음수로 허용할지, 회원권 정보를 먼저 조정하게 할지 확인 필요
노쇼와 대기 우선순위대기 신청 순서를 지켜야 하지만 노쇼를 대기 우선순위 판단에 반영한다는 내용도 있다.대기 순번은 항상 유지할지, 노쇼 회원에게 별도 제한을 둘지 확인 필요
원장 로그인원장 역할과 접근 제한은 필요하다.원장의 로그인 방식과 계정 복구 방식 확인 필요
월 구독료원장이 월 구독료를 결제한다.가격, 결제 주기, 결제 업체, 실패 시 이용 제한 기준 확인 필요

6. 기능 요구사항

계정·회원·수업

FR-001 원장 접근과 스튜디오 구분

  • 단계: 첫 개발
  • 주체: 원장
  • 시작 조건: 원장이 원장용 웹페이지에 접근한다.
  • 정상 흐름:
    1. 원장의 접근 권한을 확인한다.
    2. 원장이 관리할 기구 필라테스 스튜디오를 식별한다.
    3. 해당 스튜디오의 회원, 수업, 예약, 대기 신청, 회원권 이력만 표시한다.
  • 예외 흐름:
    • 인증되지 않았거나 권한이 없으면 원장용 데이터를 표시하지 않는다.
    • 원장 로그인 방식은 확인 필요다.
  • 완료 조건: 원장이 다른 스튜디오의 데이터에 접근하지 않고 자신의 운영 화면에 들어간다.

FR-002 회원·회원권 초기 등록

  • 단계: 첫 개발
  • 주체: 원장
  • 시작 조건: 기존 회원을 서비스에 등록해야 한다.
  • 정상 흐름:
    1. 원장이 회원 이름과 휴대폰 번호를 입력한다.
    2. 서비스 밖에서 결제한 회원권의 상품명, 총 횟수, 잔여 횟수, 시작일, 만료일을 입력한다.
    3. 회원과 회원권을 연결한다.
    4. 등록 처리자와 등록 시각을 기록한다.
  • 예외 흐름:
    • 같은 스튜디오에 같은 휴대폰 번호가 있으면 중복 후보를 보여주고 저장을 막는다.
    • 잔여 횟수가 총 횟수보다 크거나 날짜가 잘못되면 저장하지 않는다.
    • 기존 회원권 정보를 수정하면 변경 전후 값과 수정 이유를 남긴다.
  • 완료 조건: 등록된 휴대폰 번호로 휴대폰 본인 확인을 한 회원이 자신의 회원권과 예약 정보에 연결된다.

FR-003 회원 휴대폰 본인 확인

  • 단계: 첫 개발
  • 주체: 회원
  • 시작 조건: 회원이 카카오톡 등에 공유된 예약 링크 또는 문자 수락 링크를 연다.
  • 정상 흐름:
    1. 회원이 휴대폰 번호를 입력한다.
    2. 시스템이 인증번호를 문자로 발송한다.
    3. 회원이 유효 시간 안에 인증번호를 입력한다.
    4. 등록된 회원의 휴대폰 번호와 연결한다.
    5. 인증 전 열었던 수업 목록, 내 예약 또는 빈자리 수락 화면으로 돌아간다.
  • 예외 흐름:
    • 등록되지 않은 번호라면 원장에게 등록을 요청하라는 안내를 표시한다.
    • 인증번호가 틀렸거나 만료됐다면 실패 이유와 재전송 가능 여부를 표시한다.
    • 반복 입력 실패와 과도한 재전송을 제한한다.
    • 휴대폰 번호가 변경되면 다시 인증한다.
  • 완료 조건: 인증된 회원만 자신의 예약·대기 정보와 빈자리 수락 기능을 사용할 수 있다.

FR-004 수업 등록과 정원 관리

  • 단계: 첫 개발
  • 주체: 원장
  • 시작 조건: 원장이 새로운 수업을 만들거나 기존 수업을 수정한다.
  • 정상 흐름:
    1. 수업명, 날짜, 시작·종료 시각을 입력한다.
    2. 정원을 5~15명 범위에서 입력한다.
    3. 예약 가능 여부와 대기 신청 가능 여부를 설정한다.
    4. 무료 취소 마감 시각을 수업 시작 12시간 전으로 계산한다.
    5. 수업을 저장하고 회원용 수업 목록에 반영한다.
  • 예외 흐름:
    • 종료 시각이 시작 시각보다 빠르면 저장하지 않는다.
    • 정원을 현재 예약 확정 인원보다 작게 줄이려 하면 저장을 막고 이유를 표시한다.
    • 이미 대기 제안이 진행 중이면 시간·정원 변경이 대기 제안에 미치는 영향을 원장에게 보여준다.
  • 완료 조건: 회원과 원장 화면에 동일한 수업 날짜·시각·정원·신청 상태가 표시된다.

FR-005 회원용 수업 목록 조회

  • 단계: 첫 개발
  • 주체: 회원
  • 시작 조건: 회원이 휴대폰 본인 확인을 완료하고 수업 목록에 들어간다.
  • 정상 흐름:
    1. 날짜별 수업을 표시한다.
    2. 수업명, 시작·종료 시각, 정원, 예약 가능 여부, 대기 신청 가능 여부를 표시한다.
    3. 자리가 있으면 예약 행동을 제공한다.
    4. 만석이고 대기 신청이 가능하면 예상 대기 순번과 대기 신청 행동을 제공한다.
  • 예외 흐름:
    • 마감되거나 시작한 수업은 새로운 예약 행동을 제공하지 않는다.
    • 예약과 대기 신청이 모두 중지된 수업은 그 상태와 이유를 표시한다.
  • 완료 조건: 회원이 원하는 수업의 예약 가능 여부를 확인하고 예약 또는 대기 신청 단계로 이동한다.

FR-006 자리가 있는 수업 예약

  • 단계: 첫 개발
  • 주체: 회원
  • 시작 조건: 회원이 자리가 있는 수업에서 예약을 선택한다.
  • 정상 흐름:
    1. 회원의 동일 수업 예약 여부를 확인한다.
    2. 현재 예약 확정 인원이 정원보다 적은지 다시 확인한다.
    3. 회원권의 상태와 잔여 횟수를 확인한다.
    4. 예약을 확정하고 예약 시각을 기록한다.
    5. 회원권 차감 시점이 확정되면 해당 기준에 따라 회원권 이력을 생성한다.
    6. 예약 결과와 무료 취소 마감 시각을 회원에게 표시한다.
  • 예외 흐름:
    • 마지막 좌석이 다른 회원에게 먼저 확정됐다면 예약하지 않고 대기 신청을 안내한다.
    • 같은 회원의 동일 수업 중복 예약을 막는다.
    • 회원권이 부족하거나 만료된 일반 예약의 처리 방식은 확인 필요다.
  • 완료 조건: 정원을 초과하지 않는 예약 한 건이 생성되고 회원과 원장 화면에 같은 상태가 표시된다.

대기 신청·취소

FR-007 대기 신청과 대기 순번 부여

  • 단계: 첫 개발
  • 주체: 회원
  • 시작 조건: 수업이 만석이고 대기 신청이 가능하다.
  • 정상 흐름:
    1. 회원이 대기 신청을 선택한다.
    2. 같은 수업에 기존 예약이나 대기 신청이 없는지 확인한다.
    3. 대기 신청 시각과 변경 불가능한 등록 순번을 저장한다.
    4. 두 값을 기준으로 대기 순번을 계산한다.
    5. 신청 후 현재 내 대기 순번과 전체 대기 인원을 표시한다.
  • 예외 흐름:
    • 이미 예약한 수업에는 대기 신청을 허용하지 않는다.
    • 동일 회원의 같은 수업 중복 대기 신청을 막는다.
    • 저장 직전에 자리가 생긴 경우 예약 전환 여부를 임의로 결정하지 않고 현재 수업 상태를 다시 표시한다.
  • 완료 조건: 대기 신청이 한 번만 저장되고 회원과 원장 화면에 같은 대기 순번이 표시된다.

FR-008 내 예약·대기 현황 확인

  • 단계: 첫 개발
  • 주체: 회원
  • 시작 조건: 회원이 내 예약·대기 화면을 연다.
  • 정상 흐름:
    1. 예약 확정, 승인 대기, 취소된 예약을 구분해 표시한다.
    2. 대기 신청별 현재 내 대기 순번과 전체 대기 인원을 표시한다.
    3. 수락 대기 중이면 응답 마감의 날짜와 시각을 표시한다.
    4. 대기 수락 만료, 반려 등 처리가 끝난 상태와 처리 시각을 표시한다.
  • 예외 흐름:
    • 다른 회원의 이름, 휴대폰 번호, 신청 시각은 표시하지 않는다.
    • 삭제되거나 찾을 수 없는 수업은 기록을 숨기지 않고 변경된 상태를 안내한다.
  • 완료 조건: 회원이 자신의 예약 확정 여부와 대기 순번을 별도 문의 없이 확인한다.

FR-009 예약 취소와 취소 사유 제출

  • 단계: 첫 개발
  • 주체: 회원
  • 시작 조건: 취소할 수 있는 예약이 존재한다.
  • 정상 흐름:
    1. 무료 취소 마감 시각과 예상 회원권 처리 결과를 표시한다.
    2. 회원이 지각·건강·개인 사정 등의 취소 사유를 선택한다.
    3. 필요한 경우 상세 내용을 추가한다.
    4. 회원이 취소를 최종 확인한다.
    5. 취소 시각, 사유, 상세 내용, 무료 취소 또는 12시간 이내 취소 여부를 저장한다.
    6. 예약 좌석을 해제하고 빈자리 처리를 시작한다.
  • 예외 흐름:
    • 취소 사유를 선택하지 않으면 완료하지 않는다.
    • 이미 취소됐거나 다른 요청에서 처리된 예약은 다시 취소하지 않는다.
    • 승인 대기 예약의 취소 방식은 현재 상태에 맞춰 좌석 보류를 해제한다.
  • 완료 조건: 예약이 한 번만 취소되고 회원권 처리 대상과 빈자리 발생이 기록된다.

FR-010 취소 횟수 차감과 예외 승인

  • 단계: 첫 개발
  • 주체: 원장
  • 시작 조건: 회원의 예약 취소가 접수된다.
  • 정상 흐름:
    1. 취소 시각과 무료 취소 마감 시각을 비교한다.
    2. 무료 취소 마감 시각까지의 취소는 미차감 결과를 적용한다.
    3. 12시간 이내 취소는 원장 처리 대상으로 표시한다.
    4. 원장이 차감 또는 미차감을 선택하고 이유를 입력한다.
    5. 기존 차감이 있다면 미차감 결정 시 원본 이력과 연결된 예외 복구를 생성한다.
    6. 처리자, 처리 시각, 사유, 변경 전후 잔여 횟수를 기록한다.
  • 예외 흐름:
    • 원본 이력이 필요한 예외 복구에 원본 연결이 없으면 저장하지 않는다.
    • 같은 취소에 예외 복구가 중복 생성되지 않게 한다.
    • 회원권 차감 시점이 확정되기 전까지 예약 확정 차감 방식은 가정으로 두지 않는다.
  • 완료 조건: 취소 기록과 회원권 이력이 연결되고 잔여 횟수가 이력 합계와 일치한다.

빈자리 제안·문자·승인

FR-011 빈자리 발생과 대기 제안 생성

  • 단계: 첫 개발
  • 주체: 시스템
  • 시작 조건: 예약 취소 등으로 수업의 예약 확정 인원이 정원보다 적어진다.
  • 정상 흐름:
    1. 해당 수업의 유효한 대기 신청을 조회한다.
    2. 대기 신청 시각과 등록 순번이 가장 빠른 회원을 선택한다.
    3. 하나의 빈자리에 하나의 대기 제안만 생성한다.
    4. 대기 제안을 수락 대기로 설정한다.
    5. 응답 마감 시각을 계산한다.
    6. 순차 문자 안내를 요청한다.
  • 예외 흐름:
    • 대기 회원이 없으면 빈자리 상태만 원장 화면에 표시한다.
    • 같은 회원에게 같은 수업의 대기 제안이 중복 생성되지 않게 한다.
    • 승인 대기 좌석이 있으면 같은 좌석에 다음 대기 제안을 만들지 않는다.
  • 완료 조건: 대기 순번을 건너뛰지 않은 대기 제안 한 건이 생성된다.

FR-012 순차 문자 안내와 발송 결과 관리

  • 단계: 첫 개발
  • 주체: 시스템
  • 시작 조건: 수락 대기 상태의 대기 제안이 생성된다.
  • 정상 흐름:
    1. 수업 날짜·시각, 수업명, 응답 마감 시각을 포함한 문자를 만든다.
    2. 해당 회원만 사용할 수 있는 만료 시간이 있는 수락 링크를 포함한다.
    3. 문자 발송 업체에 발송을 요청한다.
    4. 메시지 ID, 요청 시각, 발송 결과, 전달 상태를 저장한다.
    5. 회원과 원장 화면에 발송 상태를 반영한다.
  • 예외 흐름:
    • 발송 실패 시 실패 코드와 재시도 횟수를 저장한다.
    • 같은 회원에게 재발송할지 다음 대기 회원에게 넘길지는 확인 필요다.
    • 재시도 후에도 실패하면 최종 실패 상태로 표시하고 원장이 확인할 수 있게 한다.
  • 완료 조건: 문자 발송 성공 여부를 대기 제안과 연결해 추적할 수 있다.

FR-013 응답 마감과 다음 대기 회원 안내

  • 단계: 첫 개발
  • 주체: 시스템
  • 시작 조건: 대기 제안이 수락 대기 상태다.
  • 정상 흐름:
    1. 제안 시점에 수업 시작까지 2시간 이상 남았다면 응답 마감을 1시간 후로 설정한다.
    2. 2시간 미만 남았다면 응답 마감을 10분 후로 설정한다.
    3. 응답 마감을 날짜가 포함된 절대 시각으로 저장하고 표시한다.
    4. 회원이 마감까지 응답하지 않으면 대기 수락 만료로 바꾼다.
    5. 다음 대기 순번 회원에게 새로운 대기 제안을 생성한다.
  • 예외 흐름:
    • 만료 처리와 회원의 수락 요청이 동시에 들어오면 먼저 확정된 한 처리만 적용한다.
    • 서버 재시작 후에도 만료되지 않은 작업을 다시 찾아 실행한다.
    • 계산된 마감이 수업 시작 이후가 되는 경우의 기준은 확인 필요다.
  • 완료 조건: 무응답 회원의 제안이 종료되고 다음 회원에게 순서대로 안내된다.

FR-014 빈자리 수락과 거절

  • 단계: 첫 개발
  • 주체: 회원
  • 시작 조건: 회원이 문자 수락 링크를 연다.
  • 정상 흐름:
    1. 링크의 회원, 대기 제안, 만료 시각을 확인한다.
    2. 수업 정보와 응답 마감 시각을 표시한다.
    3. 회원이 빈자리 수락 또는 이번 제안 거절을 선택한다.
    4. 수락하면 빈자리 수락 기록을 만들고 승인 대기로 전환한다.
    5. 거절하면 해당 대기 제안을 종료하고 다음 대기 회원에게 제안한다.
  • 예외 흐름:
    • 만료된 링크는 수락할 수 없으며 대기 수락 만료 시각을 보여준다.
    • 이미 처리된 링크는 현재 결과만 표시하고 다시 처리하지 않는다.
    • 다른 회원이 링크를 열면 수락할 수 없다.
    • 회원권 횟수가 부족하거나 만료돼도 수락 자체는 허용하고 원장 확인 대상으로 표시한다.
  • 완료 조건: 회원의 응답이 한 번만 저장되고 수락은 승인 대기, 거절은 다음 안내로 연결된다.

FR-015 원장 최종 예약 승인과 좌석 보류

  • 단계: 첫 개발
  • 주체: 원장
  • 시작 조건: 회원이 빈자리를 수락해 승인 대기 상태가 된다.
  • 정상 흐름:
    1. 해당 좌석을 임시 보류한다.
    2. 다음 대기 회원 안내를 멈춘다.
    3. 원장에게 승인 대기 건이 있음을 표시한다.
    4. 회원 정보, 회원권 잔여 횟수, 만료일, 최근 취소 예외와 노쇼, 응답 시각을 보여준다.
    5. 원장이 승인 또는 반려를 선택한다.
    6. 승인하면 정원을 다시 확인하고 예약을 확정한다.
    7. 반려하면 사유를 기록하고 좌석 보류를 해제한 뒤 다음 대기 회원에게 제안한다.
  • 예외 흐름:
    • 승인 직전에 정원이 찼다면 승인을 완료하지 않고 오류 상태로 표시한다.
    • 회원권 횟수가 부족하거나 사용할 수 없으면 원장이 예약 여부를 결정하고 이유를 기록한다.
    • 부족한 회원권으로 승인할 때의 회원권 처리 방식은 확인 필요다.
    • 원장이 응답하지 않을 때의 좌석 보류 만료 기준은 확인 필요다.
  • 완료 조건: 하나의 빈자리에 예약 한 건만 확정되고 대기 제안, 원장 승인, 예약, 회원권 이력이 서로 연결된다.

원장 운영·회원권·출결

FR-016 수업별 예약·대기 처리 과정 확인

  • 단계: 첫 개발
  • 주체: 원장
  • 시작 조건: 원장이 날짜별 수업 또는 특정 수업을 선택한다.
  • 정상 흐름:
    1. 수업의 정원, 예약 확정 인원, 빈자리, 대기 인원을 표시한다.
    2. 예약자와 대기 순번을 표시한다.
    3. 취소 사유, 빈자리 발생, 대기 제안 생성, 문자 발송, 회원 응답, 승인·반려를 시간순으로 표시한다.
    4. 수락 대기와 승인 대기의 마감 또는 경과 시간을 표시한다.
    5. 관련 회원과 회원권 기록으로 이동할 수 있게 한다.
  • 예외 흐름:
    • 문자 발송 실패, 순번 누락, 중복 예약 등 이상 상태를 숨기지 않고 표시한다.
    • 삭제된 원본 기록이 있으면 오류로 표시한다.
  • 완료 조건: 원장이 단톡방이나 수첩을 확인하지 않고 수업별 처리 경과를 설명할 수 있다.

FR-017 회원권과 회원권 이력 관리

  • 단계: 첫 개발
  • 주체: 원장
  • 시작 조건: 예약, 취소, 예외 승인, 노쇼 또는 수동 조정으로 회원권 횟수가 바뀐다.
  • 정상 흐름:
    1. 변동 유형과 증감 횟수를 기록한다.
    2. 변경 전후 잔여 횟수를 계산한다.
    3. 관련 회원, 회원권, 수업, 예약, 취소 또는 출석 상태를 연결한다.
    4. 자동 처리인지 원장 처리인지 기록한다.
    5. 복구나 수정은 원본 이력을 연결한 새로운 회원권 이력으로 추가한다.
  • 예외 흐름:
    • 기존 회원권 이력을 직접 수정하거나 삭제하지 않는다.
    • 현재 잔여 횟수와 회원권 이력 합계가 다르면 오류로 표시한다.
    • 동일한 요청으로 회원권 이력이 두 번 생성되지 않게 한다.
  • 완료 조건: 모든 횟수 변경의 원인, 처리자, 처리 시각, 변경 전후 값을 확인할 수 있다.

FR-018 출결 관리와 노쇼 기록

  • 단계: 첫 개발
  • 주체: 원장
  • 시작 조건: 수업이 시작됐거나 종료돼 실제 참여 결과를 기록할 수 있다.
  • 정상 흐름:
    1. 예약 확정 회원 목록을 표시한다.
    2. 회원별 출석 상태를 출석, 지각 출석, 노쇼, 보류 중 하나로 기록한다.
    3. 노쇼에는 확인 시각, 처리자, 내부 메모를 기록한다.
    4. 회원별 노쇼 횟수와 최근 기록에 반영한다.
    5. 예약 확정 시 이미 차감됐다면 노쇼로 인한 중복 횟수 차감을 만들지 않는다.
    6. 노쇼 예외를 승인하면 원본 이력에 연결된 예외 복구를 추가한다.
  • 예외 흐름:
    • 수업 전에는 노쇼를 확정하지 않는다.
    • 판단이 어려우면 보류로 저장한다.
    • 노쇼를 다른 출석 상태로 수정하면 오류 수정 기록과 변경 이유를 남긴다.
  • 완료 조건: 수업별 출석 상태와 회원별 노쇼 기록이 연결되고 중복 차감이 발생하지 않는다.

FR-019 회원별 이용·예외·노쇼 기록 확인

  • 단계: 첫 개발
  • 주체: 원장
  • 시작 조건: 원장이 특정 회원을 선택한다.
  • 정상 흐름:
    1. 회원의 회원권 총 횟수, 잔여 횟수, 시작일, 만료일을 표시한다.
    2. 예약, 취소, 대기 신청, 빈자리 수락, 출석 상태를 시간순으로 표시한다.
    3. 12시간 이내 취소와 예외 승인 기록을 표시한다.
    4. 회원별 노쇼 횟수와 최근 노쇼를 표시한다.
    5. 원장이 승인 판단 시 최근 기록을 확인할 수 있게 한다.
  • 예외 흐름:
    • 노쇼 기록을 자동으로 대기 순번에 반영할지는 확인 필요다.
    • 노쇼 때문에 대기 신청 시각과 등록 순번을 임의로 변경하지 않는다.
  • 완료 조건: 원장이 회원별 운영 이력을 한곳에서 확인하고 승인·예외 판단의 근거로 사용할 수 있다.

FR-020 오류 수정과 조정 이력

  • 단계: 첫 개발
  • 주체: 원장
  • 시작 조건: 중복 예약, 대기 순서 누락, 잘못된 취소·노쇼·회원권 처리가 발견된다.
  • 정상 흐름:
    1. 원장이 오류 유형과 대상 기록을 선택한다.
    2. 수정 전 값을 표시한다.
    3. 수정 내용과 수정 사유를 입력한다.
    4. 원본 기록을 유지한 채 새로운 오류 수정 기록이나 조정 이력을 추가한다.
    5. 처리자, 처리 시각, 수정 전후 값, 원본 이력을 저장한다.
  • 예외 흐름:
    • 수정 사유가 없으면 완료하지 않는다.
    • 이미 취소되거나 복구된 회원권 이력을 다시 복구하려 하면 경고하고 중복 처리를 막는다.
    • 수정으로 정원을 초과하거나 회원권 이력이 어긋나면 저장하지 않는다.
  • 완료 조건: 원본을 삭제하지 않고 무엇을 왜 수정했는지 다시 확인할 수 있다.

FR-021 휴강 처리

  • 단계: 첫 개발 포함 여부 확인 필요
  • 주체: 원장
  • 시작 조건: 스튜디오 사정으로 수업이 열리지 않는다.
  • 정상 흐름:
    1. 원장이 수업을 휴강으로 변경하고 이유를 입력한다.
    2. 해당 수업의 예약, 수락 대기, 승인 대기, 대기 신청을 확인한다.
    3. 진행 중인 대기 제안과 좌석 보류를 종료한다.
    4. 기존 횟수 차감이 있다면 원본 이력에 연결해 복구한다.
  • 예외 흐름:
    • 이미 완료된 수업은 일반 휴강으로 변경하지 않고 오류 수정 절차를 사용한다.
    • 회원 안내 방식은 확인 필요다.
  • 완료 조건: 휴강 수업에 새로운 예약이나 대기 제안이 발생하지 않고 회원권 처리 결과가 일치한다.

이후 기능

FR-022 운영 정책 설정

  • 단계: 이어서 만들 기능
  • 주체: 원장
  • 시작 조건: 스튜디오별로 기본 운영 기준을 변경해야 한다.
  • 정상 흐름:
    1. 무료 취소 마감 기준을 설정한다.
    2. 대기 제안 응답 시간과 다음 대기 회원 처리 기준을 설정한다.
    3. 노쇼와 예외 승인 기준을 설정한다.
    4. 정책 변경 시각과 변경자를 기록한다.
    5. 기존 수업에는 기존 기준을 유지하고 변경 이후 생성된 수업부터 적용할지 선택한다.
  • 예외 흐름:
    • 첫 기본값은 무료 취소 12시간, 2시간 전까지 1시간 응답, 이후 10분 응답이다.
    • 정책 변경이 이미 발송된 대기 제안의 마감을 소급 변경하지 않게 한다.
  • 완료 조건: 각 처리 기록에서 어떤 운영 정책이 적용됐는지 확인할 수 있다.

FR-023 스튜디오용 월 구독료 결제

  • 단계: 이어서 만들 기능
  • 주체: 원장
  • 시작 조건: 원장이 유료 이용을 시작하거나 갱신한다.
  • 정상 흐름:
    1. 스튜디오용 월 구독 상품과 결제 금액을 표시한다.
    2. 원장이 결제를 완료한다.
    3. 구독 시작일, 다음 결제일, 결제 상태를 기록한다.
    4. 원장이 결제 내역과 현재 구독 상태를 확인한다.
  • 예외 흐름:
    • 결제 실패, 재결제, 해지, 환불, 이용 제한 기준은 확인 필요다.
    • 회원의 회원권 결제·충전 기능과 섞이지 않게 한다.
  • 완료 조건: 원장의 스튜디오용 구독 결제만 기록되고 회원 결제 기능은 생성되지 않는다.

7. 화면 요구사항

UIR-001 회원 화면

  • 사용자: 회원
  • 목적: 자신의 대기 신청 순서와 현재 내 대기 순번을 확인한다.
  • 진입: 회원용 내 예약·대기 순번·취소 화면
  • 핵심 표시: 수업 정보, 대기 신청 시각, 현재 내 대기 순번, 전체 대기 인원, 현재 상태
  • 예외 상태: 대기 수락 만료, 승인 대기, 반려, 대기 종료
  • 완료 조건: 다른 회원의 개인정보를 보지 않고 자신의 순번을 확인한다.

UIR-002 수업별 화면

  • 사용자: 원장
  • 목적: 수업의 취소, 대기 제안, 회원 응답, 최종 처리 상태를 시간순으로 확인한다.
  • 진입: 원장용 날짜별 수업·예약 인원·대기 현황 화면
  • 핵심 표시: 정원, 예약자, 대기 순번, 빈자리, 문자 상태, 응답 마감, 승인 상태, 시간순 이력
  • 핵심 행동: 승인 화면 이동, 회원 기록 이동, 오류 수정 화면 이동
  • 완료 조건: 특정 빈자리가 어떤 회원에게 어떤 순서로 제안됐는지 확인한다.

UIR-003 회원용 휴대폰 인증 화면

  • 사용자: 회원
  • 목적: 휴대폰 번호와 인증번호로 휴대폰 본인 확인을 한다.
  • 진입: 카카오톡 예약 링크, 내 예약 링크, 문자 수락 링크
  • 핵심 입력: 휴대폰 번호, 인증번호
  • 예외 상태: 미등록 번호, 인증번호 오류·만료, 재전송 제한, 입력 횟수 초과
  • 완료 조건: 인증 성공 후 원래 요청한 화면으로 이동한다.

UIR-004 회원용 수업 목록·예약·대기 신청 화면

  • 사용자: 회원
  • 목적: 수업을 고르고 예약하거나 대기 신청한다.
  • 진입: 회원용 휴대폰 인증 화면, 회원용 내 예약·대기 순번·취소 화면
  • 핵심 표시: 날짜, 수업명, 시작·종료 시각, 정원, 예약·대기 가능 상태
  • 핵심 행동: 예약, 대기 신청, 내 예약 보기
  • 완료 조건: 예약 확정 또는 대기 신청 완료 결과와 다음 행동을 확인한다.

UIR-005 회원용 내 예약·대기 순번·취소 화면

  • 사용자: 회원
  • 목적: 본인의 예약, 승인 대기, 대기 순번을 확인하고 예약을 취소한다.
  • 진입: 회원용 수업 목록·예약·대기 신청 화면
  • 핵심 표시: 예약 상태, 대기 순번, 전체 대기 인원, 무료 취소 마감 시각, 회원권 처리 상태
  • 핵심 행동: 예약 취소, 취소 사유 선택, 상세 내용 입력, 회원 화면 이동
  • 완료 조건: 회원이 취소 결과와 횟수 처리 상태를 확인한다.

UIR-006 문자 링크에서 여는 빈자리 수락 화면

  • 사용자: 회원
  • 목적: 제안받은 빈자리를 수락하거나 거절한다.
  • 진입: 문자 수락 링크
  • 핵심 표시: 수업 정보, 응답 마감 절대 시각, 회원권 잔여 횟수, 승인 대기 안내
  • 핵심 행동: 빈자리 수락, 이번 제안 거절
  • 예외 상태: 만료된 링크, 이미 처리된 링크, 다른 회원의 링크, 인증 필요
  • 완료 조건: 수락은 승인 대기로, 거절은 다음 대기 회원 안내로 연결된다.

UIR-007 원장용 날짜별 수업·예약 인원·대기 현황 화면

  • 사용자: 원장
  • 목적: 날짜별 수업과 예약 인원, 대기 현황을 관리한다.
  • 진입: 원장용 수업 등록·수정, 빈자리 수락 승인, 오류 수정 화면
  • 핵심 표시: 날짜별 수업, 정원 대비 예약 인원, 대기 인원, 수락 대기, 승인 대기, 문자 실패
  • 핵심 행동: 수업 등록·수정, 수업별 화면 이동, 승인 처리, 회원 기록 이동
  • 완료 조건: 원장이 오늘 처리해야 할 수업과 승인 대기 건을 한눈에 확인한다.

UIR-008 원장용 회원별 회원권 횟수·취소 예외·노쇼 기록 화면

  • 사용자: 원장
  • 목적: 회원별 회원권, 취소 예외, 노쇼 기록을 확인하고 처리한다.
  • 진입: 원장용 날짜별 현황, 오류 수정 화면, 회원·회원권 초기 등록 화면
  • 핵심 표시: 회원권 총 횟수·잔여 횟수·만료일, 회원권 이력, 취소, 예외 승인, 노쇼
  • 핵심 행동: 예외 승인, 예외 복구, 출석 상태 수정, 오류 수정, 회원권 등록·조정
  • 완료 조건: 회원별 횟수 변경과 운영 판단의 근거를 확인한다.

UIR-009 원장용 수업 등록·수정 화면

  • 사용자: 원장
  • 목적: 수업 날짜·시각·수업명·정원·신청 상태를 관리한다.
  • 진입: 원장용 날짜별 수업·예약 인원·대기 현황 화면
  • 핵심 입력: 수업명, 날짜, 시작·종료 시각, 정원 5~15명, 예약·대기 가능 상태
  • 예외 상태: 잘못된 시각, 정원 범위 오류, 현재 예약 인원보다 작은 정원
  • 완료 조건: 저장한 수업 정보가 회원과 원장 화면에 동일하게 반영된다.

UIR-010 원장용 빈자리 수락 승인 화면

  • 사용자: 원장
  • 목적: 빈자리 수락 회원의 예약을 최종 승인하거나 반려한다.
  • 진입: 원장용 날짜별 현황, 수업별 화면, 원장 확인 링크
  • 핵심 표시: 회원, 수업, 수락 시각, 회원권 잔여 횟수·만료일, 최근 예외·노쇼, 승인 대기 좌석
  • 핵심 행동: 승인, 반려, 사유 입력, 회원 기록 이동
  • 완료 조건: 승인 또는 반려 결과가 예약, 대기 제안, 좌석, 회원권 이력에 함께 반영된다.

UIR-011 원장용 오류 수정·조정 이력 화면

  • 사용자: 원장
  • 목적: 잘못된 처리를 원본 기록을 보존한 채 수정한다.
  • 진입: 수업별 화면, 회원별 기록 화면, 날짜별 현황 화면
  • 핵심 표시: 오류 유형, 원본 이력, 수정 전후 값, 연결 수업·회원·예약
  • 핵심 입력: 수정 내용, 수정 사유
  • 완료 조건: 원본을 삭제하지 않고 새로운 오류 수정 기록이 추가된다.

UIR-012 원장용 회원·회원권 초기 등록 화면

  • 사용자: 원장
  • 목적: 기존 회원과 서비스 밖에서 결제한 회원권 정보를 등록한다.
  • 진입: 원장용 회원별 회원권 횟수·취소 예외·노쇼 기록 화면
  • 핵심 입력: 이름, 휴대폰 번호, 회원권 상품명, 총 횟수, 잔여 횟수, 시작일, 만료일
  • 예외 상태: 중복 번호, 잘못된 날짜, 총 횟수와 잔여 횟수 불일치
  • 완료 조건: 인증된 휴대폰 번호가 정확한 회원과 회원권에 연결된다.

8. 비기능 요구사항

NFR-001 웹 환경과 모바일 사용성

  • 서비스는 Next.js 기반 웹으로 구현한다.
  • 회원 화면은 휴대폰 브라우저를 우선으로 설계한다.
  • 별도 앱 설치 없이 카카오톡 또는 문자 링크에서 사용할 수 있어야 한다.
  • 인증 후 처음 열었던 화면의 주소를 보존하고 해당 화면으로 복귀해야 한다.
  • 원장 화면은 휴대폰과 데스크톱 웹에서 핵심 업무를 처리할 수 있어야 한다.

NFR-002 정원 초과와 중복 처리 방지

  • 마지막 좌석 예약, 빈자리 수락, 원장 승인, 회원권 횟수 변경은 일부만 성공하지 않도록 하나의 처리 단위로 묶는다.
  • 동시에 여러 요청이 들어와도 예약 확정 인원이 정원을 넘지 않아야 한다.
  • 동일 회원의 동일 수업 중복 예약과 중복 대기 신청을 막아야 한다.
  • 하나의 빈자리에 둘 이상의 예약이 승인되지 않아야 한다.
  • 동일 요청이 반복 전송돼도 한 번만 처리하도록 요청별 고유값을 사용한다.

NFR-003 예약 작업과 장애 복구

  • 대기 수락 만료와 다음 순차 문자 안내는 예약된 시간에 실행되는 백그라운드 작업으로 처리한다.
  • 서버가 재시작돼도 실행되지 않은 만료·발송 작업을 다시 찾을 수 있어야 한다.
  • 처리 중 실패한 작업은 실패 이유와 재시도 횟수를 남겨야 한다.
  • 동일 작업의 재실행으로 중복 문자나 중복 대기 제안이 생성되지 않아야 한다.

NFR-004 날짜·시각 계산

  • 수업 시작 시각, 무료 취소 마감 시각, 2시간 기준, 1시간·10분 응답 시간을 동일한 스튜디오 시간대로 계산한다.
  • 데이터에는 시간대 정보를 포함해 저장한다.
  • 회원과 원장 화면에는 날짜를 포함한 절대 시각을 표시한다.
  • 운영 중 스튜디오 시간대가 변경되더라도 기존 처리 이력의 시각이 바뀌지 않아야 한다.

NFR-005 휴대폰 본인 확인 보안

  • 인증번호에는 만료 시간이 있어야 한다.
  • 인증번호 재전송과 입력 실패 횟수를 제한해야 한다.
  • 인증 성공 전에는 회원의 예약·회원권·대기 정보를 표시하지 않는다.
  • 인증 세션 유지 기간과 재인증 기준은 구현 전에 확정해야 한다.
  • 휴대폰 번호 변경 시 기존 인증을 그대로 사용하지 않는다.

NFR-006 빈자리 수락 링크 보안

  • 수락 링크는 회원과 대기 제안을 식별할 수 있어야 한다.
  • 링크에는 만료 시간이 있어야 한다.
  • 다른 회원이 링크 주소를 알아도 수락할 수 없어야 한다.
  • 만료되거나 처리된 링크는 현재 상태와 처리 시각만 보여주고 같은 처리를 다시 실행하지 않아야 한다.
  • 링크 원문이나 인증 정보가 원장 화면의 일반 이력에 노출되지 않아야 한다.

NFR-007 개인정보와 접근 권한

  • 회원 화면에는 다른 회원의 이름과 휴대폰 번호를 표시하지 않는다.
  • 원장 화면의 휴대폰 번호는 기본적으로 필요한 범위만 표시한다.
  • 스튜디오별 회원, 수업, 예약, 대기 신청, 회원권 이력을 분리한다.
  • 회원은 자신의 기록만 조회하고 원장은 자신이 관리하는 스튜디오 기록만 조회해야 한다.
  • 민감한 변경 작업은 원장 권한을 확인한 뒤 실행한다.

NFR-008 원본 이력 보존

  • 회원권 이력, 예외 승인, 노쇼, 오류 수정 기록은 기존 기록을 덮어쓰거나 삭제하는 방식으로 수정하지 않는다.
  • 복구와 조정은 원본 이력을 가리키는 새로운 기록으로 추가한다.
  • 변경 작업에는 처리자, 처리 시각, 사유, 수정 전후 값을 남긴다.
  • 삭제가 필요한 경우에도 운영 화면에서 보이지 않게 하는 처리와 실제 기록 삭제를 구분해야 한다.

NFR-009 회원권 데이터 일치

  • 회원권 잔여 횟수는 회원권 이력의 합계와 일치해야 한다.
  • 현재 잔여 횟수를 별도 저장하는 경우 이력 합계와 자동 비교할 수 있어야 한다.
  • 불일치가 발견되면 원장에게 오류로 표시하고 오류 수정 절차로 연결한다.
  • 예약·취소·예외 처리 실패 시 회원권 이력만 단독으로 남지 않아야 한다.

NFR-010 문자 발송 추적

  • 인증번호 문자와 순차 문자 안내를 구분해 기록한다.
  • 문자별 메시지 ID, 발송 요청 시각, 전달 상태, 실패 코드, 재시도 횟수를 저장한다.
  • 문자 발송 업체의 요청 성공과 실제 전달 성공을 다른 상태로 관리한다.
  • 원장이 최종 실패 건을 조회할 수 있어야 한다.

NFR-011 접근성

  • 모든 입력 항목에 항목명을 제공한다.
  • 오류가 발생한 입력 항목과 해결 방법을 함께 표시한다.
  • 색상만으로 예약, 대기, 만료, 오류 상태를 구분하지 않는다.
  • 키보드만으로 원장용 핵심 기능을 사용할 수 있어야 한다.
  • 응답 마감과 무료 취소 마감은 남은 시간만 표시하지 않고 날짜와 시각을 함께 표시한다.

NFR-012 운영 기록 조회 성능

  • 첫 시험 규모인 회원 약 50명과 수업당 정원 최대 15명에서 수업 목록, 날짜별 현황, 회원별 이력 조회가 운영을 방해하지 않아야 한다.
  • 긴 회원권 이력과 처리 과정은 날짜 범위 또는 나누어 보기 방식으로 조회할 수 있어야 한다.
  • 문자 발송 업체의 응답이 늦어도 예약 취소 기록 자체가 유실되지 않아야 한다.
  • 구체적인 화면 응답 시간 목표는 시험 운영 환경을 측정한 뒤 확정한다.

9. 핵심 검수 시나리오

시나리오 1: 만석 수업 대기 신청

  1. 정원 8명 수업에 예약 8명이 있다.
  2. 회원이 대기 신청한다.
  3. 대기 신청 시각과 등록 순번이 저장된다.
  4. 회원 화면에 현재 내 대기 순번이 표시된다.
  5. 다른 회원의 개인정보는 보이지 않는다.

통과 조건: 회원과 원장 화면의 대기 순번이 같다.

시나리오 2: 수업 3시간 전 취소

  1. 예약 회원이 수업 시작 3시간 전에 취소한다.
  2. 회원이 취소 사유를 선택한다.
  3. 첫 번째 대기 회원에게 문자 수락 링크가 발송된다.
  4. 응답 마감은 발송 시각부터 1시간 후로 설정된다.
  5. 회원이 응답하지 않으면 대기 수락 만료가 된다.
  6. 다음 대기 회원에게 문자가 발송된다.

통과 조건: 대기 신청 순번을 건너뛰지 않고 한 명씩 안내된다.

시나리오 3: 수업 90분 전 취소

  1. 예약 회원이 수업 시작 90분 전에 취소한다.
  2. 첫 번째 대기 회원에게 대기 제안을 보낸다.
  3. 응답 마감은 발송 시각부터 10분 후다.
  4. 만료 후 다음 대기 회원에게 안내한다.

통과 조건: 2시간 기준이 정확히 적용되고 화면에 절대 시각이 표시된다.

시나리오 4: 회원권 부족 회원의 빈자리 수락

  1. 잔여 횟수가 부족한 회원이 빈자리 수락 링크를 연다.
  2. 회원은 빈자리를 수락할 수 있다.
  3. 상태가 승인 대기로 바뀐다.
  4. 좌석이 보류되고 다음 대기 회원 안내가 멈춘다.
  5. 원장이 회원권 상태를 보고 승인 또는 반려한다.

통과 조건: 회원 수락만으로 예약이 확정되지 않고 원장 결정이 기록된다.

시나리오 5: 12시간 이내 취소 예외

  1. 회원이 무료 취소 마감 시각 이후 취소한다.
  2. 건강 사유와 상세 내용을 제출한다.
  3. 원장 화면에 12시간 이내 취소 처리 대상으로 표시된다.
  4. 원장이 미차감과 이유를 기록한다.
  5. 기존 차감이 있다면 원본 이력에 연결된 예외 복구가 생성된다.

통과 조건: 기존 기록은 남아 있고 처리 이유와 변경 전후 횟수를 확인할 수 있다.

시나리오 6: 동시 마지막 좌석 예약

  1. 두 회원이 마지막 한 자리를 거의 동시에 예약한다.
  2. 한 회원의 예약만 확정된다.
  3. 다른 회원에게는 만석 상태와 대기 신청 행동을 표시한다.

통과 조건: 예약 확정 인원이 정원을 넘지 않는다.

시나리오 7: 같은 수락 링크 반복 실행

  1. 회원이 빈자리 수락 버튼을 여러 번 누른다.
  2. 네트워크 재전송으로 같은 요청이 반복된다.
  3. 빈자리 수락과 승인 대기 기록은 한 번만 생성된다.

통과 조건: 중복 승인 대기, 중복 예약, 중복 횟수 차감이 발생하지 않는다.

시나리오 8: 노쇼 기록

  1. 수업 종료 후 원장이 예약 회원을 노쇼로 기록한다.
  2. 회원별 노쇼 횟수와 최근 기록에 반영된다.
  3. 예약 확정 시 이미 횟수를 차감했다면 추가 차감하지 않는다.
  4. 예외 승인 시 원본 이력과 연결된 예외 복구를 추가한다.

통과 조건: 노쇼 기록과 회원권 이력이 연결되고 중복 차감이 없다.


10. 연동·운영 참고

  • 휴대폰 본인 확인은 휴대폰 번호 소유 여부를 확인하는 절차다. 법정 의미의 본인확인과 같은 수준이 필요한지는 별도로 확인해야 한다.
  • 문자 발신번호 등록, 인증번호 문자와 안내 문자 비용, 전달 결과 확인 방식은 실제 문자 발송 업체를 기준으로 확정해야 한다.
  • 회원 연락처, 예약·취소·노쇼 기록의 수집 목적, 보관 기간, 회원 안내 문구를 실제 운영 기준에 맞게 정해야 한다.
  • 원장 로그인, 문자 발송, 월 구독료 결제에 사용할 업체와 비용은 확인 필요다.
기능 요구사항 — 동네 필라테스 예약과 대기 순번 | Prometheon