TeachingNote¶
1. 한 줄 정의¶
선생님이 작성·공유하는 수업/학습 기록(수업 로그). 그룹 단위로 묶고, 세밀한 공개 범위로 학생·보호자에게 노출한다. 선생님 포트폴리오·브랜드, 학생 복습, 학부모 학습 현황 확인이 목적.
2. 핵심 개념¶
- TeachingNote — 노트 본체.
title(30자),content(text, 3,000자),taught_at,view_count,visibility(6단계 enum),study_room_id/teaching_note_group_idFK - TeachingNoteGroup — 노트 묶음.
title(15자),study_room_idFK (룸 삭제 시 CASCADE) - TeachingNoteStudent — 특정 학생 공개 시 매핑 테이블 (학생별 접근 권한)
- TeachingNoteImage — 이미지 첨부.
image_id(unique),mime_type,s3key,size_bytes,teacher_idFK - Visibility 6단계 —
TEACHER_ONLY/SPECIFIC_STUDENTS_ONLY/SPECIFIC_STUDENTS_AND_PARENTS/STUDY_ROOM_STUDENTS_ONLY/STUDY_ROOM_STUDENTS_AND_PARENTS/PUBLIC
3. 관련 코드¶
mvp-back:domain/teachingnotemvp-back:application/service/teachingnote- DDL:
teaching_note,teaching_note_group,teaching_note_student,teaching_note_image(teams/engineering/infra/db-ddl) GET /teaching-notes/{teachingNoteId}— content 리소스 상세조회 시 image_id → presigned URL 변환 (teams/engineering/guides/image-media-api)mvp-front:src/app/(private)/learn-log
4. 상태/생명주기¶
조회 로직(접근권한): PUBLIC이면 join 없이 룸 전원 조회, SPECIFIC_STUDENTS_*면 teaching_note_student join해 지정 학생만. 룸 삭제 시 그룹/노트 cascade 소프트 딜리트 (teams/engineering/guides/soft-delete).
5. 외부 의존¶
- S3 (이미지 첨부 — image_id 기반 presigned URL 변환)
- Tiptap (프론트 에디터)
6. UI 노출¶
- 학습노트 작성/수정: Tiptap 에디터, 대상 학생 선택 flow
- 학습노트 상세 + 조회수(가능하면 동일 IP 1일 1회)
- 로그 리스트: 검색(제목/이름), 정렬(최신 default / 오래된 / 가나다 / 조회수)
7. 결정 이력¶
- 수업 노트 관리 FRD — 2차 스프린트 DONE
- Entity 변환은 엔티티/도메인이 서로 모르게 어댑터에서 책임 (teams/engineering/guides/jpa-query 어댑터 패턴)
8. 정책 요약¶
- 사용자당 생성 제한 5,000개 / 룸당 1,000개
- 회원 탈퇴 시 자동 삭제 안 됨
- 동적 항목: 수정 시 참조 항목 모두 업데이트
- CRUD: 선생님 전부 O, 학생/보호자/비회원 R만 (선생님이 visibility로 권한 부여)
9. 열린 질문 / TODO¶
- 뷰카운트 정교화(중복 방지) 구현 비용 검토 — 3일+ 예상 시 단순 카운트만
- 수업노트별 숙제 다는 기능, 학생 읽음 확인 (팔로우업)
- 사고력 답변 구조가 노트 답변 형태에 도입될 수 있는지 → teams/engineering/concepts/사고력-답변구조-v0.2