TESOL 강의실
CLASS-ONLINE · /my-class/online
기능
7
API 호출
0
가드레일
9
id 가 테스트 이름
구현 단계
11 / 11
개발 스펙
이 화면에서 할 수 있어야 하는 것 (3)
- 유닛 · 레슨 · 강의영상 · 시험 · 교재를 한 표에서 본다.
- Video 버튼으로 강의를 재생한다.
- Quiz 칸에서 점수를 보거나 다음 차수 시험으로 들어간다.
비즈니스 규칙 (3)
- Quiz 칸: 이미 친 차수는 점수 링크로, 아직이면 **다음 한 차수만** 응시 버튼으로. 통과했으면 버튼 없음.근거: myOnlineClass.php:113~135
- 오픈 플래그가 아니면 Quiz 칸 자체를 그리지 않는다.근거: myOnlineClass.php:113,114
- 커리큘럼은 unit · lesson 테이블이 정본이다. 화면에 적어 두지 않는다.
API (2)
| 메서드 | 경로 | 권한 | 모듈 · 설명 |
|---|---|---|---|
GET | /api/learning/courses/{course}/curriculum | 수강생 | 유닛 · 레슨 · 영상 ID. domains:learning:learning-web응답: { units: [{ unitNo, title, lessons: [{ no, title, vimeoId }] }] } |
GET | /api/learning/courses/{course}/progress | 수강생 | 유닛별 응시 현황(차수 점수 · 통과 여부)과 다음 응시 가능 차수. domains:learning:learning-web |
가드레일 (9) — id 가 곧 테스트 이름이다
| id | 반드시 만족해야 하는 것 | 등급 |
|---|---|---|
books-require-login | 로그인하지 않으면 강의 교재를 받을 수 없다. 원본은 교재를 웹 루트 아래(_upload/books · tecbooks · phonics)에 두어 주소만 알면 로그인 없이도 받을 수 있었다(36개 전부 확인). 우리는 웹에서 닿지 않는 자리(upload-root)에 두고 서버가 내려 준다. | critical |
books-require-course-access | 수강 권한이 없는 과정의 교재는 받을 수 없다. 원본은 TESOL 만 검사했고(_download_books.php), TEC · 파닉스는 그 검사를 주석 처리해 두어 로그인만 하면 누구나 받을 수 있었다. 우리 강의실은 세 과정 모두 수강 권한으로 막고 있어, 화면에서 막은 것을 내려받기에서 열어 두면 그대로 우회가 된다. | critical |
books-not-servable-by-asset-path | 교재는 공개 자산 경로로 열리지 않는다. 공개 이미지(ASSET_ROOT)와 교재(upload-root)는 다른 자리에 둔다. 한 자리에 섞으면 주소만 알면 누구나 교재를 받아 간다 — 원본이 그랬다. | critical |
books-download-works | 수강 중인 과정의 교재는 PDF 로 내려온다. | high |
books-unknown-unit-404 | 없는 차수를 지목하면 404 다. | normal |
classroom-next-kind-only-one | 한 유닛에 응시 버튼이 두 개 이상 보이면 안 된다. 다음 차수 하나만. | high |
classroom-no-quiz-when-closed | 수강기간이 아니거나 미결제면 응시 버튼이 나오면 안 된다. | critical |
classroom-lesson-count-matches-db | 화면의 레슨 수가 DB 의 레슨 수와 같아야 한다(TESOL 36, TEC 56). UNIT2 의 첫 레슨이 화면에서 빠져 영상이 한 칸씩 밀렸던 버그. | high |
classroom-video-id-matches-lesson | Video 버튼이 여는 영상이 그 줄의 레슨과 일치해야 한다. | high |
구현 계획 (11/11)
- ●LectureBook — 과정·차수 → 파일 이름. 원본 _Env.php 의 목록 그대로
learning-domain - ●DocumentStorage.read(LectureBook) — 폴더 밖으로 나가지 않는지 확인
learning-infrastructure - ●LearningUseCase.book — 세 과정 모두 수강 자격을 본다
learning-app - ●GET /api/learning/students/me/books?course&unit
learning-web - ●교재 36개를 upload-root 로 이관(scripts/fetch-lecture-books.sh)
wvctesol-server - ●CurriculumUnit · ScoreReport · StudentInfo · 포트 2개
learning-domain - ●LearningUseCase · CourseCatalog
learning-app - ●Curriculum · Learner 어댑터
learning-infrastructure - ●/api/learning/courses/{course}/curriculum 구현
learning-web - ●/api/learning/courses/{course}/progress 구현
learning-web - ●Next.js 를 BFF 로 전환 — Prisma 직접 접근 제거
wvctesol
서버 사이드 구현 계획 — 자바 객체별 요구사항 (5/5)
| 객체 | 모듈 | 책임 · 지켜야 할 것 |
|---|---|---|
● ScoreReportrecord | learning-domain | 성적표 계산. 원본 resultOfCourse.php:99~143.
|
● CourseCatalogclass | learning-app | 과정별 상수(유닛 수 · 차수 순서 · 시험 유무).
|
● LearningUseCaseservice | learning-app | 커리큘럼 · 성적표 · 학생정보 조회.
|
● CurriculumRepositoryAdapterclass | learning-infrastructure | unit · lesson 조회.
|
● LearnerRepositoryAdapterclass | learning-infrastructure | 수강 자격 · 성적 · 학생정보 조회.
|
테스트 방법 (9)
| 가드레일 | 종류 | 확인 방법 |
|---|---|---|
books-require-login | e2e | 토큰 없이 부르면 401 |
books-require-course-access | e2e | 파닉스 미결제 계정 → 403 COURSE_NOT_OPEN |
books-not-servable-by-asset-path | e2e | /_upload/books/... 로 열면 404 |
books-download-works | e2e | TESOL · TEC 교재가 %PDF 로 내려온다 |
books-unknown-unit-404 | e2e | unit=99 → BOOK_NOT_FOUND |
classroom-next-kind-only-one | e2e | 한 유닛 행의 "Start Quiz" 버튼 개수를 세어 1 이하임을 단언 |
classroom-no-quiz-when-closed | e2e | cyber_yn=N 계정으로 강의실 조회 → 응시 버튼이 0개 |
classroom-lesson-count-matches-db | e2e | 화면의 Video 버튼 수와 DB lesson 수를 비교(TESOL 36, TEC 56) |
classroom-video-id-matches-lesson | e2e | 임의 행의 Video 클릭 후 iframe src 의 vimeo id 가 해당 lesson.vimeo_id 와 일치 |
스냅샷
로그인 세션으로 촬영한 실제 화면입니다.

기능 목록 (7)
데이터
- ·조회 조건
notice
상태
- ·화면 상태
activeVideo
미디어
- ·Vimeo 영상
인증
- ·세션 확인
- ·로그인 필요
proxy 가 /login 으로 보냄
하드코딩
- ·하드코딩 데이터
videoColors - ·하드코딩 데이터
tabs
화면 이동
← 이 화면으로 오는 곳
CLASS-LECTURE-VIDEO-DETAIL/my-class/lecture-video/[unit]/[lesson]CLASS-PHONICS-ONLINE/my-class/phonics-onlineCLASS-TEACHING-ONLINE/my-class/teaching-onlineCLASS-TEC-COURSE-OUTLINE/my-class/tec-course-outlineCLASS-TEC-ONLINE/my-class/tec-onlineCLASS-TEC-RESULT-OF-COURSE/my-class/tec-result-of-courseCLASS-TEC-STUDENT-INFORMATION/my-class/tec-student-informationCLASS-TEC-UNIT-QUIZ-DETAIL/my-class/tec-unit-quiz/[unit]/[kind]CLASS-TEC-UNIT-RESULT-DETAIL/my-class/tec-unit-result/[unit]/[kind]
이 화면에서 가는 곳 →
CLASS/my-classCLASS-TEC-ONLINE/my-class/tec-onlineCLASS-UNIVERSITY-REGISTER/my-class/university-registerCLASS-UNIT-RESULT-DETAIL/my-class/unit-result/[unit]/[kind]CLASS-UNIT-QUIZ-DETAIL/my-class/unit-quiz/[unit]/[kind]AUTH-LOGIN/login
연결
API
직접 호출하는 API 가 없습니다
소스
src/app/my-class/online/page.tsx