Q&A 개발 명세 (FRD)¶
요지¶
스터디룸 질문/답변을 어떻게 구현하는지 정리한다(5차 스프린트에 완료). 엔티티·상태머신·권한의 단일 기준은 qna 도메인이고, 여기서는 그 위에서 누가 무엇을 할 수 있는지와 화면 진입 규칙을 다룬다.
상위 PRD¶
기획(1:1 질문/답변 CRUD, 비공개 열람, 모범 질문)은 prd이며, 바뀌면 이 문서도 갱신한다.
기술 접근 · 아키텍처¶
CRUD 권한¶
질문은 학생만, 답변은 선생님만 쓴다 — 그리고 둘 다 자기 글만 고치고 지운다. 보호자는 학생이 허락했을 때만 읽고, 비회원은 아무것도 못 한다.
| 주체 | C | R | U | D |
|---|---|---|---|---|
| 선생님 | △ 답변 전용 생성 | O | O 자신의 답변만 | O 자신의 답변만 |
| 학생 | O 질문 작성 | O | O 자신의 질문만 | O 자신의 질문만 |
| 보호자 | X | △ 학생이 권한 부여 시 조회 | X | X |
| 비회원 | X | X | X | X |
질문 리스트 조회¶
- 학생은 다른 학생 질문 조회 불가(목록·상세 모두 X).
- 모범 질문 선정 건은 스터디룸 소속 전원 조회 가능.
- 선생님은 모든 학생 질문 조회 가능.
라우팅·유효성 (FE→BE)¶
질문 생성 진입 시 순차 검증: 1. 로그인 확인 → 미로그인 시 로그인 화면. 2. 스터디룸 접근 권한 확인 → 실패 시 대시보드. 3. 사용자 권한 확인 → 실패 시 스터디룸 조회 화면(수업노트 리스트).
AI 코칭과의 경계¶
이 기능의 답변 주체는 선생님(사람) 1:1이다. AI 사고력 코칭(사고력-답변구조)은 동일 QnaContext/QnaMessage 테이블을 actor=AI로 재사용하지만 별개 흐름(챌린지 막힘 시 진입)이며, Q&A 자체에는 AI가 개입하지 않는다.
API · 데이터 모델¶
질문 하나를 이루는 항목(제목·내용·출처·답변·공개 범위·메타)과 글자 수 같은 입력 규칙은 prd 요구사항 표에 정리돼 있다. 여기서는 구현상 중요한 정책 몇 가지만 짚는다.
한 질문에는 답변이 여러 개 달릴 수 있다(댓글 구조, 개수 제한 없음). 알림은 학생이 질문하면 선생님에게, 선생님이 답하면 학생에게 가는데, 실제 발송은 시스템 알림 기능이 붙을 때 연결된다. 작성자가 탈퇴하거나 내보내져도 글 자체는 스터디룸에 남고, 이름만 '탈퇴한 사용자'·'찾을 수 없는 사용자'로 바뀐다.
엔티티 필드와 DTO, API 요청/응답 예시 같은 코드 세부는 qna 도메인이 단일 기준이다.
의존성 · 영향 범위¶
질문 도메인(qna의 QnaContext/QnaMessage), 공용 첨부(에디터), 진입 권한(studyroom·member)에 기댄다.
주의할 연결고리가 하나 있다. AI 사고력 코칭(사고력-답변구조)이 같은 테이블을 actor=AI로 확장해 쓰기 때문에, 스키마를 바꾸면 양쪽 모두에 영향이 간다.
테스트 계획¶
공통 전략은 qa-playbook을 따른다. 이 기능의 핵심은 권한 격리다 — 비공개 질문이 다른 학생의 목록·상세에 새어 나가지 않아야 하고, 답변을 달면 상태가 '답변 대기 → 답변 완료'로 바뀌며 남의 글은 수정·삭제할 수 없어야 한다. 보호자 열람은 학생이 허락했을 때만 열리고, 로그인→스터디룸 권한→사용자 권한의 순차 검증이 막힐 때 폴백 화면으로 잘 빠지는지도 확인한다.
작업 분해¶
참여 독려를 위한 학생별 질문 개수 집계가 핵심 작업이다. 완료 추적은 GitHub 이슈에서 한다.