Skip to content

feat(wiki,vocabulary): 문법 위키 + 학년별 단어장 교체 - #19

Merged
likell1 merged 1 commit into
mainfrom
feat/wiki-and-grade-vocab
Sep 15, 2026
Merged

likell1 merged 1 commit into
mainfrom
feat/wiki-and-grade-vocab

Conversation

@likell1

@likell1 likell1 commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

문법 위키

교재 PDF 30챕터 253용어를 DB 에 넣고 조회 API 를 붙였습니다.

GET /api/wiki/chapters        목차 (용어 수 포함)
GET /api/wiki/chapters/{id}   장 본문
GET /api/wiki/search          이름·영문명·설명 검색
GET /api/wiki/terms?ids=      즐겨찾기 복원

파싱에서 걸린 것 세 가지입니다.

  • 목차 페이지에도 1. 문장의 기본 구조 가 있어 챕터가 60개로 잡혔습니다
  • 8장 조동사만 영문명이 없습니다. 위치로 고정하면 15개가 통째로 날아갑니다
  • 설명이 여러 줄로 쪼개지고, 비교 예문은 예문·뜻이 2줄씩 짝을 이룹니다

examples/meanings 는 짝이라 DB 제약으로 길이를 맞췄습니다. 어긋나면 화면에서
해석이 밀립니다.

목차의 챕터별 개수와 대조해 253개 전수 일치를 확인했습니다.

학년별 단어장

BEGINNER/INTERMEDIATE/ADVANCED → GRADE_1/2/3. 실제 교재가 고1·고2·고3 세 벌로
만들어져 이름을 맞춥니다.

users.vocab_level 은 그대로 둡니다. 이름만 학년을 따를 뿐 users.grade 와는
여전히 별개입니다 — 고3 학생에게 고1 단어장을 지정할 수 있어야 합니다. V5 에서
둘을 분리한 이유가 그것입니다.

기존 3,998단어를 지우고 새 6,000배치(고유 4,063행)를 넣습니다. 고2·고3 에 1,450개가
겹치는데 뜻·예문이 대개 달라 행이 갈립니다. word_day_items 를 걸 때 headword 만
쓰면 엉뚱한 행이 걸리므로 뜻까지 지정합니다.

questions.ref_word_day_id 는 CASCADE 가 아니라 참조만 끊습니다. 사라진 교재를
가리켰다고 학생 질문을 지울 수는 없습니다.

확인

  • 로컬에서 V7·V8 마이그레이션 적용 후 적재 → 레벨별 50 DAY × 2,000단어
  • 단어장·퀴즈 출제·위키 검색 API 실제 호출 확인
  • ./gradlew test 통과

.gitignore

디렉터리를 jungwoon-api → purut-api 로 옮길 때 무시 경로를 같이 고치지 않아
단어 데이터가 다시 추적됐습니다. 경로를 고치고 위키 데이터도 함께 막았습니다.
히스토리에 올라갔던 것은 별도로 제거했습니다.

## 문법 위키

교재 PDF 30챕터 253용어를 DB 에 넣고 조회 API 를 붙였다.

  GET /api/wiki/chapters        목차 (용어 수 포함)
  GET /api/wiki/chapters/{id}   장 본문
  GET /api/wiki/search          이름·영문명·설명 검색
  GET /api/wiki/terms?ids=      즐겨찾기 복원

파싱에서 걸린 것 세 가지.
- 목차 페이지에도 "1. 문장의 기본 구조" 가 있어 챕터가 60개로 잡혔다
- 8장 조동사만 영문명이 없다. 위치로 고정하면 15개가 통째로 날아간다
- 설명이 여러 줄로 쪼개지고, 비교 예문은 예문·뜻이 2줄씩 짝을 이룬다

examples/meanings 는 짝이라 DB 제약으로 길이를 맞춘다. 어긋나면 화면에서
해석이 밀린다.

검색은 pg_trgm 인덱스로 받친다. 253행이라 성능 문제는 아니지만 앞뒤
와일드카드가 순차 스캔을 타지 않게 한다.

## 학년별 단어장

BEGINNER/INTERMEDIATE/ADVANCED → GRADE_1/2/3. 실제 교재가 고1·고2·고3
세 벌로 만들어져 이름을 맞춘다.

users.vocab_level 은 그대로 둔다. 이름만 학년을 따를 뿐 users.grade 와는
여전히 별개다 — 고3 학생에게 고1 단어장을 지정할 수 있어야 한다.

기존 3998단어를 지우고 새 6000배치(고유 4063행)를 넣는다. 고2·고3 에 1450개가
겹치는데 뜻·예문이 대개 달라 행이 갈린다. word_day_items 를 걸 때 headword 만
쓰면 엉뚱한 행이 걸리므로 뜻까지 지정한다.

questions.ref_word_day_id 는 CASCADE 가 아니라 참조만 끊는다. 사라진 교재를
가리켰다고 학생 질문을 지울 수는 없다.

품사는 tags 배열이 아니라 part_of_speech 컬럼에 둔다. 기존 tags 의
headword/derived 와는 의미가 다르다.

## .gitignore

디렉터리를 jungwoon-api → purut-api 로 옮길 때 무시 경로를 같이 고치지 않아
단어 데이터가 다시 추적됐다. 경로를 고치고 위키 데이터도 함께 막는다.
@likell1
likell1 merged commit 09ecd98 into main Sep 15, 2026
1 check passed
@likell1
likell1 deleted the feat/wiki-and-grade-vocab branch September 15, 2026 05:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant