콘텐츠로 이동
✍️ 수정가능누구나 고쳐도 됩니다. 고치면 하단 frontmatter의 갱신일·작성자·변경요약을 남겨 주세요.작성 Claude · 2026-06-04 · v12 재편·raw 컴파일·인간화

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 도메인이 단일 기준이다.

의존성 · 영향 범위

질문 도메인(qnaQnaContext/QnaMessage), 공용 첨부(에디터), 진입 권한(studyroom·member)에 기댄다.

주의할 연결고리가 하나 있다. AI 사고력 코칭(사고력-답변구조)이 같은 테이블을 actor=AI로 확장해 쓰기 때문에, 스키마를 바꾸면 양쪽 모두에 영향이 간다.

테스트 계획

공통 전략은 qa-playbook을 따른다. 이 기능의 핵심은 권한 격리다 — 비공개 질문이 다른 학생의 목록·상세에 새어 나가지 않아야 하고, 답변을 달면 상태가 '답변 대기 → 답변 완료'로 바뀌며 남의 글은 수정·삭제할 수 없어야 한다. 보호자 열람은 학생이 허락했을 때만 열리고, 로그인→스터디룸 권한→사용자 권한의 순차 검증이 막힐 때 폴백 화면으로 잘 빠지는지도 확인한다.

작업 분해

참여 독려를 위한 학생별 질문 개수 집계가 핵심 작업이다. 완료 추적은 GitHub 이슈에서 한다.