AI 개발 에이전트가 따르는 기준

기능 요구사항

기능마다 번호를 붙이고 무엇이 되면 다 만든 것인지 적었습니다.

17,595자 · 시스템이 만든 그대로입니다

사람이 손댄 곳 3군데
  • · 3단계 ‘추론 확인’에서 두 곳을 고쳤습니다. 인터뷰에 서류 만료 알림을 첫 버전에 넣겠다고 적었는데, 정작 서류 관리 자체는 후속 버전이었습니다. 그대로 두면 없는 데이터를 읽어 알림을 보내는 문서가 되므로, 첫 버전 알림을 시간표 변경 하나로 줄이고 필수 화면 목록에 알림함을 넣었습니다.
  • · 4단계에서 확인할 사용 흐름 세 가지를 다시 묶었습니다. 처음 제안된 묶음은 화면 열한 개를 순서대로 셋으로 나눈 것이라 운영자 화면과 강사 화면이 한 흐름에 섞여 있었습니다. 흐름은 “이 순서로 막힘없이 이어지는가”를 보는 자리이므로 역할별로 다시 나누고 이름도 업체가 실제로 하는 일로 바꿨습니다.
  • · 문서 본문은 손대지 않았습니다. 위 두 가지는 모두 인터뷰 답변과 화면 목록을 고친 것이고, 그 뒤 문서는 고쳐진 답변으로 다시 만들어졌습니다.

방과후 운영 한눈에 기능 요구사항 문서

1. 문서 목적

여러 초등학교·중학교에 방과후·늘봄 강사를 보내는 위탁업체가 학교별 수업과 강사를 배정하고, 같은 강사의 시간 중복을 개강 전에 발견해 수정한 뒤 확정 시간표를 강사에게 공개할 수 있는 웹 서비스를 정의한다.

  • 대상 플랫폼: Next.js 기반 웹
  • 첫 검증 규모: 강사 약 35명, 학교 약 20곳
  • 주요 사용자: 위탁업체 대표·운영 담당자, 소속 강사
  • 목표 제작 기간: 외부 개발자 또는 개발사 선정 후 4~6개월

2. 첫 개발 범위

포함

  • 위탁업체 계정 시작과 운영자 로그인
  • 학교·강사 등록 및 수정
  • 학교별 학기·교시 템플릿 설정
  • 수업 계획 직접 등록 및 수정
  • 지정 엑셀 양식 다운로드와 일괄 등록
  • 엑셀 업로드 전 행별 오류 확인과 화면 수정
  • 실제 시작·종료 시각 기준 강사 시간 중복 검사
  • 서로 다른 학교의 시간 중복 저장 차단
  • 중복된 두 수업을 나란히 확인하고 현장에서 수정
  • 같은 학교 시간 겹침 예외와 사유 기록
  • 전체 시간표 확인
  • 확정 시간표 공개
  • 강사 초대와 강사 정보 연결
  • 강사 개인 시간표 확인
  • 시간표 공개·변경 알림과 강사 알림함

첫 개발에서 제외

  • 성범죄 경력·아동학대 전력 조회 회신서 등 서류 상태와 만료일 관리
  • 민감한 서류 원본 파일 저장
  • 서류 만료 알림
  • 대체강사 탐색
  • 강사료·재료비 정산과 지급 예정액
  • 민원 기록
  • 카카오톡 연동
  • 서비스 내 구독 결제
  • 정산 확정 알림
  • 직전 학기 시간표 복사
  • 이동시간 부족 자동 검사
  • 휴강·보강·수업 회차 관리
  • 학교 공고 파일 자동 해석

업체 구독료는 서비스 밖에서 별도 청구하고 계좌이체로 받는다.


3. 사용자와 권한

사용자할 수 있는 일볼 수 없는 정보
대표·운영 담당자업체, 학교, 강사, 학기, 교시 템플릿, 수업 계획을 관리한다. 시간 중복을 해결하고 시간표를 확정·공개한다.다른 위탁업체의 모든 정보
강사초대받은 위탁업체에 연결된 후 자신의 공개된 개인 시간표와 알림함을 확인한다.다른 강사의 시간표, 전체 시간표, 운영자 설정 화면

모든 학교, 강사, 수업 계획, 공개본, 알림에는 위탁업체 식별값을 적용한다. 이름이 같아도 학교와 강사는 위탁업체 안에서 발급한 고유 식별값으로 구분한다.


4. 기능 요구사항

FR-001 업체 계정 시작

  • 주체: 위탁업체 대표
  • 시작 조건: 대표가 업체 계정을 가지고 있지 않다.
  • 정상 흐름:
    1. 대표가 운영자 계정을 만든다.
    2. 위탁업체 기본 정보를 입력한다.
    3. 서비스가 위탁업체 식별값을 발급한다.
    4. 대표 계정에 해당 위탁업체의 운영자 권한을 부여한다.
    5. 학교·강사 등록을 시작할 수 있는 운영자 화면으로 이동한다.
  • 예외 흐름:
    • 필수 정보가 빠지면 빠진 항목을 표시하고 완료를 막는다.
    • 이미 사용 중인 로그인 정보라면 기존 계정으로 로그인하도록 안내한다.
    • 계정은 생성되었지만 위탁업체 생성에 실패하면 불완전한 업체 데이터가 남지 않도록 전체 처리를 취소한다.
  • 완료 조건: 대표가 자신의 위탁업체 운영자 화면에 로그인하고 학교·강사 정보를 등록할 수 있다.

FR-002 역할별 로그인과 화면 접근

  • 주체: 대표·운영 담당자, 강사
  • 시작 조건: 사용자가 운영자 계정을 만들었거나 강사 초대를 통해 계정을 연결했다.
  • 정상 흐름:
    1. 사용자가 로그인한다.
    2. 서비스가 계정의 역할과 연결된 위탁업체를 확인한다.
    3. 운영자는 운영자 화면으로 이동한다.
    4. 강사는 강사 개인 화면으로 이동한다.
    5. 요청할 때마다 해당 화면에 접근할 권한이 있는지 다시 확인한다.
  • 예외 흐름:
    • 로그인 정보가 맞지 않으면 계정 존재 여부를 과도하게 노출하지 않고 실패를 안내한다.
    • 초대 연결이 끝나지 않은 강사는 개인 시간표 대신 초대 연결 화면으로 이동한다.
    • 강사가 운영자 주소로 직접 접근하면 접근을 차단한다.
  • 완료 조건: 사용자는 자신의 역할에 허용된 화면과 데이터만 볼 수 있다.

FR-003 학교 정보 관리

  • 주체: 대표·운영 담당자
  • 시작 조건: 운영자가 위탁업체에 로그인했다.
  • 정상 흐름:
    1. 운영자가 학교를 새로 등록한다.
    2. 서비스가 학교 고유 식별값을 발급한다.
    3. 운영자가 등록된 학교 목록을 확인한다.
    4. 학교 표시 정보를 수정한다.
    5. 학교를 선택해 학기와 교시 템플릿 설정으로 이동한다.
  • 예외 흐름:
    • 학교명이 비어 있으면 저장하지 않는다.
    • 같은 이름의 학교가 이미 있으면 기존 학교인지 확인하도록 경고한다.
    • 학교 이름을 바꾸더라도 연결된 수업 계획은 고유 식별값을 기준으로 유지한다.
  • 완료 조건: 운영자가 시간표를 등록할 모든 학교를 목록에서 선택할 수 있다.

FR-004 강사 정보 관리

  • 주체: 대표·운영 담당자
  • 시작 조건: 운영자가 위탁업체에 로그인했다.
  • 정상 흐름:
    1. 운영자가 강사 정보를 등록한다.
    2. 서비스가 강사 고유 식별값을 발급한다.
    3. 운영자가 강사 목록과 강사 초대 상태를 확인한다.
    4. 강사 표시 정보를 수정한다.
    5. 등록된 강사를 수업 계획의 담당 강사로 선택한다.
  • 예외 흐름:
    • 강사 이름이 비어 있으면 저장하지 않는다.
    • 이름이 같은 강사가 있어도 서로 다른 고유 식별값으로 저장한다.
    • 이름이 같은 강사는 엑셀 업로드에서 자동 선택하지 않고 운영자가 직접 구분하게 한다.
  • 완료 조건: 운영자가 모든 강사를 목록에서 구분하고 수업 계획에 배정할 수 있다.

FR-005 학교별 학기·교시 템플릿 관리

  • 주체: 대표·운영 담당자
  • 시작 조건: 학교가 등록되어 있다.
  • 정상 흐름:
    1. 운영자가 학교와 학기를 선택한다.
    2. 학기의 시작일과 종료일을 등록한다.
    3. 교시 템플릿 이름과 적용 기간을 입력한다.
    4. 요일별 교시명과 실제 시작·종료 시각을 등록한다.
    5. 서비스가 시간과 적용 기간을 검증한다.
    6. 검증을 통과한 교시 템플릿을 저장한다.
  • 예외 흐름:
    • 종료 시각이 시작 시각과 같거나 빠르면 저장하지 않는다.
    • 적용 종료일이 시작일보다 빠르면 저장하지 않는다.
    • 동일한 학교·학기·요일·적용 범위에서 적용할 교시 템플릿을 한 가지로 결정할 수 없으면 저장을 막는다.
    • 이미 등록된 수업 계획에 영향을 주는 교시 템플릿을 변경하면 영향받는 수업 수를 먼저 보여준다.
    • 공개된 수업의 실제 시간이 바뀌는 경우에는 충돌 검사를 다시 통과해야 한다.
  • 완료 조건: 수업 계획에서 선택한 학교·학기·요일·교시를 실제 시작·종료 시각으로 바꿀 수 있다.

FR-006 엑셀 시간표 양식 다운로드

  • 주체: 대표·운영 담당자
  • 시작 조건: 운영자가 수업 및 강사 배정 등록 화면에 들어왔다.
  • 정상 흐름:
    1. 운영자가 엑셀 양식 다운로드를 선택한다.
    2. 서비스가 현재 지원하는 열 이름과 입력 예시가 포함된 파일을 제공한다.
    3. 운영자가 파일을 내려받아 학교별 수업 내용을 작성한다.
  • 예외 흐름:
    • 양식 생성에 실패하면 빈 파일을 내려받게 하지 않고 다시 시도하도록 안내한다.
  • 완료 조건: 내려받은 양식에 학교명, 운영 기간, 요일, 과목, 강사명, 교시명 또는 시작·종료 시각을 입력할 수 있다.

FR-007 엑셀 파일 임시 읽기와 미리보기

  • 주체: 대표·운영 담당자
  • 시작 조건: 운영자가 지정 엑셀 양식에 수업 정보를 작성했다.
  • 정상 흐름:
    1. 운영자가 엑셀 파일을 선택해 올린다.
    2. 서비스가 파일 내용을 시간표에 바로 저장하지 않고 임시 데이터로 읽는다.
    3. 문자열 시간과 엑셀 시간 형식을 같은 형식으로 변환한다.
    4. 읽은 행을 표 형태로 보여준다.
    5. 각 행에 정상, 경고 또는 오류 상태를 표시한다.
  • 예외 흐름:
    • 지원하지 않는 파일이거나 필수 열을 읽을 수 없으면 업로드를 중단한다.
    • 파일의 일부 행을 읽지 못하면 행 번호와 원인을 표시한다.
    • 파일 자체를 읽을 수 없으면 기존 시간표에는 아무 데이터도 저장하지 않는다.
  • 완료 조건: 운영자가 저장 전에 업로드된 모든 행과 행별 검증 결과를 확인할 수 있다.

FR-008 엑셀 행 검증·수정·확정

  • 주체: 대표·운영 담당자
  • 시작 조건: 엑셀 파일이 임시 데이터로 읽혀 미리보기 표에 표시되어 있다.
  • 정상 흐름:
    1. 서비스가 각 행의 필수값을 검사한다.
    2. 학교명과 강사명을 등록된 고유 식별값 후보와 연결한다.
    3. 교시명만 입력된 경우 학교·학기·요일에 맞는 실제 시간을 찾는다.
    4. 실제 시작·종료 시각이 모두 입력된 경우 해당 시간을 충돌 검사 기준으로 사용한다.
    5. 문제가 있는 행을 빨간색과 오류 문구로 표시한다.
    6. 운영자가 해당 행을 화면에서 직접 수정한다.
    7. 모든 저장 차단 오류가 해결되면 전체 데이터를 확정한다.
  • 예외 흐름:
    • 등록되지 않은 학교명은 오류로 처리한다.
    • 같은 이름의 강사가 여러 명이면 운영자가 올바른 강사를 선택할 때까지 오류로 처리한다.
    • 시간과 교시명 모두 없거나 교시명으로 시간을 찾을 수 없으면 오류로 처리한다.
    • 종료 시각이 시작 시각보다 늦지 않으면 오류로 처리한다.
    • 교시명과 직접 입력한 실제 시간이 다르면 경고를 표시하고 사용할 값을 확인하게 한다.
    • 확정 시점에 다른 저장 요청 때문에 새로운 시간 중복이 생기면 전체 확정을 중단하고 해당 행을 다시 표시한다.
  • 완료 조건: 모든 행이 고유한 학교와 강사에 연결되고, 저장 차단 오류 없이 수업 계획으로 저장된다.

FR-009 수업 계획 직접 등록 및 수정

  • 주체: 대표·운영 담당자
  • 시작 조건: 학교, 강사, 학기 정보가 등록되어 있다.
  • 정상 흐름:
    1. 운영자가 학교와 학기를 선택한다.
    2. 운영 기간, 요일, 교시 또는 실제 시작·종료 시각, 과목, 담당 강사를 입력한다.
    3. 교시를 선택하면 해당 교시 템플릿의 실제 시간이 자동으로 표시된다.
    4. 서비스가 필수값과 시간 중복을 검사한다.
    5. 문제가 없으면 임시 배정으로 저장한다.
    6. 운영자가 기존 수업 계획을 열어 같은 방식으로 수정한다.
  • 예외 흐름:
    • 운영 기간이 학기 범위를 벗어나면 확인할 항목을 표시한다.
    • 실제 종료 시각이 시작 시각보다 늦지 않으면 저장하지 않는다.
    • 선택한 교시를 실제 시간으로 바꿀 수 없으면 교시 템플릿 등록이나 직접 시간 입력을 요구한다.
    • 시간 중복이 발견되면 FR-010과 FR-011의 처리로 연결한다.
  • 완료 조건: 수업 계획에 위탁업체, 학교, 학기 또는 운영 기간, 요일, 교시명, 실제 시작·종료 시각, 과목, 강사, 공개 상태가 저장된다.

FR-010 동일 강사 시간 중복 검사와 저장 차단

  • 주체: 서비스, 대표·운영 담당자
  • 시작 조건: 운영자가 수업 계획을 새로 저장하거나 기존 수업의 시간·요일·운영 기간·강사를 변경한다.
  • 정상 흐름:
    1. 서비스가 같은 위탁업체의 동일한 강사 고유 식별값을 가진 수업을 찾는다.
    2. 요일이 같고 운영 기간이 겹치는 수업만 비교한다.
    3. 실제 시작·종료 시각이 겹치는지 검사한다.
    4. 서로 다른 학교의 수업이 겹치면 저장을 차단한다.
    5. 충돌한 두 수업의 정보를 운영자에게 보여준다.
  • 예외 흐름:
    • 14:00~14:4014:40~15:20처럼 종료 시각과 다음 시작 시각이 같으면 시간 중복으로 처리하지 않는다.
    • 실제 시간이 같아도 운영 기간이 겹치지 않으면 저장을 막지 않는다.
    • 강사 이름이 같더라도 고유 식별값이 다른 강사라면 충돌로 처리하지 않는다.
    • 같은 학교 안의 시간 중복은 FR-012에 따른 예외 저장만 허용한다.
  • 완료 조건: 같은 강사가 실제 시간이 겹치는 서로 다른 학교 수업에 저장되지 않는다.

시간 중복 계산식은 다음과 같다.

기존 수업 시작 < 새 수업 종료
그리고
새 수업 시작 < 기존 수업 종료

FR-011 중복된 두 수업 현장 수정

  • 주체: 대표·운영 담당자
  • 시작 조건: 시간 중복 검사에서 저장 차단 충돌이 발견되었다.
  • 정상 흐름:
    1. 서비스가 충돌한 두 수업을 나란히 펼친다.
    2. 각 수업의 학교, 요일, 교시, 실제 시간, 과목, 강사를 보여준다.
    3. 운영자가 수정할 수업 한쪽을 선택한다.
    4. 시간, 교시 또는 담당 강사를 변경한다.
    5. 서비스가 변경된 내용으로 충돌을 다시 검사한다.
    6. 충돌이 해소되면 수업을 저장한다.
  • 예외 흐름:
    • 변경 후 다른 수업과 새로운 충돌이 발생하면 새 충돌 대상을 표시하고 계속 저장을 막는다.
    • 수정을 취소하면 원래 저장되지 않은 상태로 돌아간다.
    • 서로 다른 학교의 시간 중복에는 사유 입력을 통한 강제 저장을 제공하지 않는다.
  • 완료 조건: 운영자가 전체 시간표를 처음부터 다시 작성하지 않고 충돌한 수업 한쪽만 바꿔 저장할 수 있다.

FR-012 같은 학교 시간 겹침 예외 저장

  • 주체: 대표·운영 담당자
  • 시작 조건: 동일한 강사의 수업 두 건이 같은 학교 안에서 실제 시간이 겹친다.
  • 정상 흐름:
    1. 서비스가 같은 학교의 시간 겹침임을 표시한다.
    2. 운영자가 예외 저장을 선택한다.
    3. 운영자가 예외 사유를 입력한다.
    4. 서비스가 사유, 처리한 운영자, 처리 시각, 관련 수업 식별값을 저장한다.
    5. 수업을 저장하고 전체 시간표에 예외 표시를 남긴다.
  • 예외 흐름:
    • 사유가 비어 있으면 예외 저장을 허용하지 않는다.
    • 두 수업의 학교가 다르면 예외 저장을 허용하지 않는다.
    • 이후 수업의 학교나 시간이 바뀌면 예외 적용 가능 여부를 다시 검사한다.
  • 완료 조건: 운영자가 같은 학교 안의 의도된 시간 겹침을 사유와 함께 저장하고 나중에 다시 확인할 수 있다.

FR-013 전체 시간표 확인

  • 주체: 대표·운영 담당자
  • 시작 조건: 한 건 이상의 수업 계획이 등록되어 있다.
  • 정상 흐름:
    1. 운영자가 전체 시간표를 연다.
    2. 서비스가 학교, 요일, 교시, 실제 시간, 과목, 강사, 배정 상태를 표로 보여준다.
    3. 운영자가 학기, 학교, 강사, 요일을 기준으로 필요한 수업을 찾는다.
    4. 시간 중복과 같은 학교 시간 겹침 예외를 해당 수업에 표시한다.
    5. 수업을 선택하면 등록·수정 화면 또는 충돌 수정 영역을 연다.
  • 예외 흐름:
    • 등록된 수업이 없으면 첫 수업 직접 등록과 엑셀 업로드로 이동할 수 있는 빈 화면을 보여준다.
    • 필터 결과가 없으면 시간표 전체가 없는 것으로 오해하지 않도록 적용 중인 조건을 표시한다.
  • 완료 조건: 운영자가 여러 학교의 수업 배정 상태와 해결할 충돌을 한 화면에서 확인할 수 있다.

FR-014 확정 시간표 생성과 공개

  • 주체: 대표·운영 담당자
  • 시작 조건: 수업 계획이 등록되어 있고 시간 충돌 검사를 수행할 수 있다.
  • 정상 흐름:
    1. 운영자가 공개할 학기와 수업 범위를 선택한다.
    2. 서비스가 서로 다른 학교의 시간 중복을 다시 검사한다.
    3. 같은 학교의 시간 중복에는 예외 사유가 있는지 확인한다.
    4. 조건을 통과한 수업을 확정 시간표로 처리한다.
    5. 운영자가 시간표 공개를 실행한다.
    6. 서비스가 공개본 식별값과 공개 시각을 저장한다.
    7. 해당 강사가 자신의 개인 시간표에서 공개된 수업을 볼 수 있게 한다.
  • 예외 흐름:
    • 해결되지 않은 시간 중복이 있으면 확정과 공개를 막고 충돌 수업으로 이동시킨다.
    • 같은 학교 시간 중복의 예외 사유가 빠져 있으면 공개하지 않는다.
    • 공개 처리 중 일부만 반영되는 오류가 발생하면 공개본을 생성하지 않는다.
  • 완료 조건: 충돌 검사를 통과한 최신 시간표가 공개본으로 기록되고 해당 강사에게 보인다.

FR-015 강사 초대와 강사 정보 연결

  • 주체: 대표·운영 담당자, 강사
  • 시작 조건: 운영자가 강사 정보를 등록했다.
  • 정상 흐름:
    1. 운영자가 등록된 강사에 대한 초대 링크를 생성한다.
    2. 서비스가 초대 전, 초대됨, 연결 완료 상태를 표시한다.
    3. 강사가 초대 링크를 연다.
    4. 강사가 계정을 만들거나 기존 계정으로 로그인한다.
    5. 서비스가 초대 대상 강사 정보와 로그인 계정을 연결한다.
    6. 강사가 개인 시간표와 알림함으로 이동한다.
  • 예외 흐름:
    • 이미 다른 계정과 연결된 초대는 중복 연결하지 않는다.
    • 유효하지 않은 초대 링크는 연결하지 않고 운영자에게 새 초대를 요청하도록 안내한다.
    • 한 계정이 다른 사람의 강사 정보에 임의로 연결되지 않도록 초대 대상을 확인한다.
  • 완료 조건: 강사 계정이 위탁업체에 등록된 정확한 강사 고유 식별값과 연결된다.

초대 링크를 강사에게 전달할 채널은 확인 필요이다. 첫 버전에는 카카오톡 자동 발송을 포함하지 않으며, 링크 복사 방식은 지원해야 한다.

FR-016 강사 개인 시간표 확인

  • 주체: 강사
  • 시작 조건: 강사 계정이 위탁업체의 강사 정보와 연결되어 있고 시간표가 공개되었다.
  • 정상 흐름:
    1. 강사가 로그인한다.
    2. 서비스가 연결된 강사 고유 식별값을 확인한다.
    3. 해당 강사에게 공개된 최신 수업만 조회한다.
    4. 학교, 요일, 교시, 실제 시작·종료 시각, 과목을 보여준다.
    5. 강사가 알림함에서 변경된 시간표로 이동할 수 있다.
  • 예외 흐름:
    • 공개된 수업이 없으면 “공개된 시간표가 없습니다”라는 상태를 보여준다.
    • 임시 배정과 공개 전 확정 시간표는 강사에게 보여주지 않는다.
    • 강사가 다른 강사의 주소나 식별값으로 접근해도 해당 데이터를 반환하지 않는다.
  • 완료 조건: 강사가 운영자에게 별도로 묻지 않고 자신의 최신 공개 시간표를 확인할 수 있다.

FR-017 시간표 공개·변경 알림 생성

  • 주체: 서비스
  • 시작 조건: 운영자가 시간표를 처음 공개하거나 공개된 시간표를 변경해 다시 저장했다.
  • 정상 흐름:
    1. 서비스가 직전 공개본과 새 공개본을 비교한다.
    2. 추가, 변경 또는 제외된 수업과 영향을 받는 강사를 찾는다.
    3. 영향을 받는 강사별로 서비스 안 알림을 한 번 생성한다.
    4. 알림에 변경된 학교, 요일, 교시명, 실제 시간, 과목, 변경 시각을 포함한다.
    5. 여러 수업이 한 번에 바뀌면 한 변경 작업 안에서 해당 강사의 변경 목록을 함께 제공한다.
  • 예외 흐름:
    • 같은 공개 또는 변경 작업을 다시 처리하더라도 같은 강사에게 중복 알림을 만들지 않는다.
    • 강사 계정이 아직 연결되지 않았으면 강사 정보에 알림을 연결해 두고 계정 연결 후 확인할 수 있게 한다.
    • 변경 저장이 실패하면 알림을 생성하지 않는다.
  • 완료 조건: 시간표 공개 또는 변경에 영향을 받은 강사의 알림함에 정확히 한 번 알림이 생성된다.

FR-018 강사 알림함 확인

  • 주체: 강사
  • 시작 조건: 강사 계정에 하나 이상의 시간표 공개·변경 알림이 연결되어 있다.
  • 정상 흐름:
    1. 강사가 알림함을 연다.
    2. 서비스가 읽지 않은 알림과 읽은 알림을 구분해 보여준다.
    3. 강사가 알림을 선택한다.
    4. 서비스가 해당 알림을 읽음으로 처리한다.
    5. 변경된 개인 시간표 위치로 이동한다.
  • 예외 흐름:
    • 알림에 포함된 수업이 이후 제외되었으면 현재 최신 시간표와 제외 사실을 함께 이해할 수 있게 표시한다.
    • 다른 강사의 알림 주소에 접근하면 내용을 보여주지 않는다.
  • 완료 조건: 강사가 자신에게 온 시간표 공개·변경 알림을 확인하고 최신 개인 시간표로 이동할 수 있다.

FR-019 공개본과 예외 기록 조회

  • 주체: 대표·운영 담당자
  • 시작 조건: 시간표를 공개했거나 같은 학교 시간 겹침 예외를 저장했다.
  • 정상 흐름:
    1. 운영자가 수업 상세 또는 전체 시간표에서 기록을 연다.
    2. 서비스가 공개본 식별값과 공개 시각을 보여준다.
    3. 같은 학교 시간 겹침 예외가 있으면 사유, 처리한 운영자, 처리 시각, 관련 수업을 보여준다.
    4. 공개된 시간표가 변경된 경우 변경 전후 값을 확인할 수 있게 한다.
  • 예외 흐름:
    • 기록과 연결된 운영자 계정의 표시 정보가 바뀌어도 당시 처리한 계정 식별값과 처리 시각은 유지한다.
    • 수업 표시 정보가 수정되어도 예외 기록이 다른 수업에 잘못 연결되지 않게 한다.
  • 완료 조건: 운영자가 시간표가 언제 공개되었고 시간 겹침을 어떤 사유로 허용했는지 나중에 확인할 수 있다.

5. 화면 요구사항

UIR-001 운영자 로그인 및 업체 시작 화면

  • 화면 ID: admin-login-start
  • 사용 목적: 대표가 업체 계정을 만들거나 로그인해 운영을 시작한다.
  • 주요 구성:
    • 계정 생성 및 로그인 영역
    • 위탁업체 기본 정보 입력
    • 업체 시작 완료 후 학교·강사 등록 이동
  • 예외 표시: 빠진 필수값, 로그인 실패, 업체 생성 실패를 해당 입력 영역에 표시한다.
  • 완료 조건: 운영자가 자신의 위탁업체 운영자 화면에 들어간다.
  • 연결 기능: FR-001, FR-002

UIR-002 운영자 화면

  • 화면 ID: operator
  • 사용 목적: 운영자가 학교·강사·수업 배정·전체 시간표로 이동한다.
  • 주요 구성:
    • 학교·강사 목록
    • 학기·교시표 설정
    • 수업 직접 등록
    • 엑셀 등록
    • 전체 시간표
    • 로그아웃
  • 예외 표시: 업체 연결이 없는 운영자는 업체 시작 화면으로 이동한다.
  • 완료 조건: 운영자가 학기 시작 전 업무에 필요한 각 관리 화면으로 이동할 수 있다.
  • 연결 기능: FR-002, FR-003, FR-004, FR-013

UIR-003 학교·강사 목록 관리 화면

  • 화면 ID: school-instructor-list
  • 사용 목적: 운영자가 수업 배정에 필요한 학교와 강사를 등록·수정한다.
  • 주요 구성:
    • 학교 목록과 등록·수정
    • 강사 목록과 등록·수정
    • 강사 초대 상태와 초대 링크 생성
    • 학교별 학기·교시표 설정 이동
    • 수업 배정 등록 이동
  • 예외 표시: 같은 이름 후보, 빠진 이름, 저장 실패를 항목별로 표시한다.
  • 완료 조건: 운영 대상 학교와 강사를 수업 계획에서 선택할 수 있다.
  • 연결 기능: FR-003, FR-004, FR-015

UIR-004 학교별 학기·교시표 설정 화면

  • 화면 ID: school-term-period-settings
  • 사용 목적: 학교별 학기와 교시 템플릿의 적용 기간, 교시명, 실제 시간을 설정한다.
  • 주요 구성:
    • 학교와 학기 선택
    • 학기 시작일·종료일
    • 교시 템플릿 이름과 적용 기간
    • 요일별 교시명·시작 시각·종료 시각 입력 표
    • 기존 수업 영향 건수
  • 예외 표시: 종료 시각 오류, 적용 기간 오류, 적용 범위가 겹쳐 템플릿을 결정할 수 없는 상태를 표시한다.
  • 완료 조건: 모든 교시의 종료 시각이 시작 시각보다 늦고, 동일 적용 범위에서 사용할 교시 템플릿이 한 가지로 결정된다.
  • 연결 기능: FR-005

UIR-005 학교별 수업 및 강사 배정 등록 화면

  • 화면 ID: class-assignment
  • 사용 목적: 운영자가 수업 계획을 한 건씩 등록하고 학기 중 변경 사항을 수정한다.
  • 주요 구성:
    • 학교·학기
    • 운영 기간
    • 요일
    • 교시명
    • 실제 시작·종료 시각
    • 과목
    • 담당 강사
    • 임시 배정 저장
    • 엑셀 양식 다운로드 및 업로드 이동
  • 예외 표시: 필수값 누락, 시간 오류, 교시 해석 오류, 시간 중복을 구체적인 원인과 함께 표시한다.
  • 완료 조건: 충돌이 없는 수업 계획이 임시 배정으로 저장된다.
  • 연결 기능: FR-006, FR-009, FR-010

UIR-006 엑셀 업로드 확인 및 수정 화면

  • 화면 ID: excel-import-preview
  • 사용 목적: 지정 엑셀 양식의 내용을 저장 전에 확인하고 문제가 있는 행만 수정한다.
  • 주요 구성:
    • 업로드 파일 정보
    • 행 번호
    • 학교, 운영 기간, 요일, 과목, 강사, 교시, 실제 시간
    • 행별 정상·경고·오류 상태
    • 오류 행 직접 수정
    • 전체 검증
    • 확정 저장
  • 예외 표시: 오류 행은 빨간색만 사용하지 않고 오류 아이콘과 원인 문구를 함께 표시한다.
  • 완료 조건: 모든 저장 차단 오류가 해결된 후 전체 행이 수업 계획으로 확정된다.
  • 연결 기능: FR-007, FR-008, FR-010

UIR-007 전체 시간표와 중복 배정 경고 화면

  • 화면 ID: master-timetable
  • 사용 목적: 운영자가 여러 학교의 전체 시간표와 해결되지 않은 시간 중복을 한 화면에서 확인한다.
  • 주요 구성:
    • 학기, 학교, 강사, 요일 찾기 조건
    • 학교, 요일, 교시명, 실제 시간, 과목, 강사, 상태가 포함된 표
    • 시간 중복 표시
    • 같은 학교 시간 겹침 예외 표시
    • 충돌한 두 수업의 나란히 보기
    • 한쪽 수업 바로 수정
    • 확정 및 공개
  • 예외 표시: 서로 다른 학교의 시간 중복에는 예외 저장 버튼을 제공하지 않는다.
  • 완료 조건: 운영자가 모든 저장 차단 충돌을 해결하고 시간표를 확정·공개할 수 있다.
  • 연결 기능: FR-010, FR-011, FR-012, FR-013, FR-014, FR-019

UIR-008 강사 로그인 및 초대 연결 화면

  • 화면 ID: instructor-login-invite
  • 사용 목적: 초대받은 강사가 계정을 만들거나 로그인하고 등록된 강사 정보와 연결한다.
  • 주요 구성:
    • 초대 대상 위탁업체와 강사 정보 확인
    • 계정 생성 또는 로그인
    • 연결 완료 안내
    • 개인 시간표 이동
    • 알림함 이동
  • 예외 표시: 유효하지 않은 초대, 이미 사용된 초대, 다른 계정에 연결된 상태를 표시한다.
  • 완료 조건: 로그인 계정과 위탁업체의 강사 고유 식별값이 연결된다.
  • 연결 기능: FR-002, FR-015

UIR-009 강사 개인 화면

  • 화면 ID: instructor
  • 사용 목적: 강사가 개인 시간표와 알림함으로 이동한다.
  • 주요 구성:
    • 개인 시간표
    • 읽지 않은 알림 표시
    • 알림함
    • 로그아웃
  • 예외 표시: 연결된 강사 정보가 없으면 초대 연결 화면으로 이동한다.
  • 완료 조건: 강사가 다른 강사의 정보 없이 자신의 기능만 사용할 수 있다.
  • 연결 기능: FR-002, FR-016, FR-018

UIR-010 강사 개인 시간표 화면

  • 화면 ID: instructor-timetable
  • 사용 목적: 강사가 자신의 최신 공개 시간표를 확인한다.
  • 주요 구성:
    • 학교
    • 요일
    • 교시명
    • 실제 시작·종료 시각
    • 과목
    • 최신 공개 시각
    • 알림함 이동
  • 예외 표시: 공개된 시간표가 없으면 빈 상태와 안내 문구를 보여준다.
  • 완료 조건: 강사가 자신이 어느 학교의 어느 시간에 어떤 과목을 담당하는지 확인한다.
  • 연결 기능: FR-016

UIR-011 강사 알림함 화면

  • 화면 ID: instructor-notifications
  • 사용 목적: 강사가 시간표 공개·변경 알림을 모아 보고 최신 개인 시간표로 이동한다.
  • 주요 구성:
    • 읽지 않음·읽음 상태
    • 공개 또는 변경 구분
    • 학교, 요일, 교시명, 실제 시간, 과목
    • 변경 시각
    • 개인 시간표 이동
  • 예외 표시: 삭제되거나 제외된 수업의 알림은 현재 시간표에 없다는 사실을 표시한다.
  • 완료 조건: 강사가 알림을 읽고 변경된 개인 시간표를 확인할 수 있다.
  • 연결 기능: FR-017, FR-018

6. 비기능 요구사항

NFR-001 위탁업체별 데이터 분리

  • 모든 학교, 강사, 학기, 교시 템플릿, 수업 계획, 공개본, 예외 기록, 알림에는 위탁업체 식별값을 저장한다.
  • 화면 접근과 서버 요청에서 모두 위탁업체와 사용자 역할을 검사한다.
  • 주소나 요청값을 바꾸더라도 다른 위탁업체의 데이터가 조회·수정되지 않아야 한다.
  • 강사는 자신의 강사 고유 식별값에 연결된 공개 시간표와 알림만 볼 수 있어야 한다.

NFR-002 중복 배정의 서버·데이터베이스 차단

  • 시간 중복 검사는 화면에서 먼저 수행하고 서버에서 다시 수행한다.
  • 동시에 두 개의 저장 요청이 들어와도 서로 다른 학교의 시간 중복이 만들어지지 않도록 데이터베이스 저장 과정에서 재검사한다.
  • 충돌 검사와 저장은 중간 상태가 남지 않는 하나의 처리로 수행한다.
  • 엑셀 확정 과정에서도 개별 화면 등록과 같은 충돌 규칙을 사용한다.

NFR-003 시간 처리 일관성

  • 모든 시간은 한국 표준시를 기준으로 저장하고 표시한다.
  • 실제 시간 비교는 시작 시각을 포함하고 종료 시각을 제외한다.
  • 날짜와 시간은 화면, 엑셀 업로드, 서버 검사에서 같은 규칙으로 변환한다.
  • 운영 기간의 시작일과 종료일은 충돌 검사에 포함한다.

NFR-004 인증과 전송 보안

  • 로그인 상태가 필요한 모든 화면은 인증되지 않은 접근을 차단한다.
  • 비밀번호를 사용하는 경우 원문 그대로 저장하지 않는다.
  • 로그인 정보와 서비스 데이터는 암호화된 웹 연결을 통해 전송한다.
  • 강사 초대는 임의로 추측하기 어려운 초대 링크를 사용한다.
  • 초대 연결 완료 후 같은 링크로 다른 계정을 추가 연결할 수 없어야 한다.

NFR-005 민감정보 최소화

  • 첫 버전에는 성범죄 경력·아동학대 전력 조회 회신서 등 민감한 원본 파일을 저장하는 입력란, 업로드 영역, 데이터 저장소를 만들지 않는다.
  • 첫 버전에는 서류 종류, 제출 상태, 만료일도 저장하지 않는다.
  • 시간표 운영에 필요하지 않은 강사 개인정보는 필수 입력으로 요구하지 않는다.

NFR-006 엑셀 업로드 안전성

  • 업로드된 파일을 실행 가능한 프로그램으로 처리하지 않고 데이터 읽기 용도로만 사용한다.
  • 파일을 읽지 못하거나 양식이 다르면 기존 시간표를 변경하지 않는다.
  • 엑셀 데이터는 임시 상태로 검증한 후 운영자가 확정해야 실제 수업 계획에 반영한다.
  • 확정 실패 시 일부 행만 저장된 상태가 남지 않아야 한다.

NFR-007 접근성과 오류 표현

  • 시간 중복과 엑셀 오류를 색상만으로 구분하지 않고 아이콘과 문구를 함께 사용한다.
  • 입력 오류 문구는 어떤 항목이 잘못되었고 어떻게 고쳐야 하는지 설명한다.
  • 로그인, 수업 입력, 엑셀 행 수정, 공개, 알림 확인의 주요 기능은 키보드로 이동하고 실행할 수 있어야 한다.
  • 입력 항목에는 화면에서 의미를 알 수 있는 이름을 제공한다.

NFR-008 검증 데이터 규모

  • 첫 MVP는 강사 약 35명, 학교 약 20곳의 실제 학기 데이터를 이용해 검수한다.
  • 해당 규모에서 전체 시간표 조회, 수업 저장과 충돌 검사, 엑셀 미리보기와 확정 작업을 완료할 수 있어야 한다.
  • 대량 데이터 처리 중 화면이 멈추거나 일부 데이터가 사라지는 오류가 없어야 한다.
  • 구체적인 응답 시간 기준은 개발 계약 전에 실제 엑셀 행 수를 확인해 확정한다.

NFR-009 웹 제공 기준

  • 서비스는 Next.js 기반 웹으로 제공한다.
  • 운영자 시간표 편집은 표를 충분히 볼 수 있는 데스크톱 웹을 우선 기준으로 한다.
  • 별도 모바일 앱과 앱 스토어 배포는 첫 개발 범위에 포함하지 않는다.
  • 강사 개인 시간표와 알림함의 좁은 화면 최적화 수준은 확인 필요이다.

7. MVP 최종 검수 시나리오

검수 상황통과 기준
운영자가 업체를 시작하고 학교·강사를 등록한다.학교와 강사가 고유 식별값으로 저장되고 수업 등록에서 선택된다.
A학교 화요일 14:00~14:40과 B학교 화요일 14:20~15:00에 같은 강사를 배정한다.저장이 차단되고 두 수업이 나란히 표시된다.
A학교 화요일 14:00~14:40과 B학교 화요일 14:40~15:20에 같은 강사를 배정한다.실제 시간은 겹치지 않으므로 저장된다. 이동시간 부족은 첫 버전에서 판단하지 않는다.
실제 시간은 같지만 두 수업의 운영 기간이 겹치지 않는다.시간 중복으로 차단하지 않는다.
같은 학교에서 동일 강사의 시간이 겹친다.사유 없이는 저장되지 않고, 사유 입력 후 예외 기록과 함께 저장된다.
엑셀에 미등록 학교, 같은 이름의 강사, 비어 있는 시간을 포함한다.해당 행이 오류로 표시되고 화면에서 수정하기 전에는 확정되지 않는다.
충돌이 없는 시간표를 공개한다.공개본 식별값과 공개 시각이 저장되고 강사 개인 시간표에 나타난다.
공개된 수업의 학교·요일·교시·시간·과목을 변경한다.영향을 받는 강사에게 변경 알림이 한 번 생성되고 최신 시간표로 이동한다.
강사가 다른 강사의 시간표 주소로 접근한다.접근이 차단되고 다른 강사의 데이터가 반환되지 않는다.
두 운영자가 동시에 같은 강사를 겹치는 시간에 저장한다.데이터베이스 저장 단계에서 하나의 요청이 차단되어 서로 다른 학교의 시간 중복이 남지 않는다.

8. 구현 전 확인 필요 항목

  • 운영자와 강사의 구체적인 로그인 방식
  • 강사 초대 링크의 기본 전달 방식
  • 교시 템플릿 변경 시 기존 수업 시간을 유지할지 새 시간으로 바꿀지 선택하는 상세 화면
  • 운영 기간이 여러 교시 템플릿 적용 기간을 가로지르는 경우의 입력 방식
  • 강사 개인 시간표와 알림함의 좁은 모바일 웹 화면 최적화 수준
  • 실제 검증에 사용할 한 학기 엑셀 행 수와 이에 따른 응답 시간 기준
  • 직전 학기 복사 기능의 후속 개발 시점
  • 이동시간 부족, 단축수업, 재량휴업일, 휴강·보강·수업 회차의 후속 처리 범위
기능 요구사항 — 방과후·늘봄 강사 배정 관리 서비스 | Prometheon