관심 분야
일상과 생활
여러 학습 과정을 하나의 주제로 묶습니다.- 책
- 3권
- 레슨
- 9개
DDEGURRR
단어장단어장 구조 보기
관심 분야를 담은 카테고리에서 시작해 책과 레슨, 한 장의 단어 카드로 좁혀집니다. 화면의 구성과 실제 데이터가 같은 네 단계로 움직입니다.
큰 주제에서 실제로 학습하는 한 장의 카드까지 좁혀갑니다.
관심 분야
입문 · 150단어
03 · 레슨
초급 · 90단어
03 · 레슨
중급 · 150단어
03 · 레슨
뜻과 예문뿐 아니라 출처와 학습 상태까지 한 장에 보존합니다.
새 단어 · 예문 1개
새 단어 · 예문 1개
새 단어 · 예문 1개
콘텐츠, 화면 상태, 내보내기 데이터가 하나의 식별자로 연결됩니다.
데이터 모델
app.mjscatalog[]
└─ category { order, status, progress }
└─ books[]
└─ book { level, access, progress }
└─ lessons[]
└─ lesson { access, source, progress }
└─ wordCards[]
└─ WordCardData { content, study, source }
각 단계는 고유한 id와 운영 속성을 가지며, 최하위 데이터는 WordCardData로 통일됩니다.
운영 속성 · A
app.mjscategory { order, status, theme,
createdAt, updatedAt }
book { categoryId, order, status,
level, access, coverTheme }
lesson { bookId, order, status,
access, estimatedMinutes }
order로 정렬하고 status로 공개 여부를 관리합니다. 난이도와 무료·구독 범위는 책과 레슨에 명시해 화면 정책과 콘텐츠를 분리합니다.
학습 상태 · B
model.mjssummarizeProgress(wordCards)
→ newCount / shortTermCount
→ longTermCount / masteredCount
→ studiedPercent / masteredPercent
→ lastStudiedAt
Lesson → Book → Category 순으로 집계
진도 숫자를 여러 단계에 따로 입력하지 않습니다. 카드의 study.deck과 lastTestedAt을 기준으로 레슨·책·카테고리의 요약값을 계산합니다.
출처 보존
model.mjssourceAdapters.curated(input)
sourceAdapters.wordExtractor(input)
↓ normalizeSource()
{ provider, title, url,
generatedAt, context }
특정 사이트 구조는 어댑터 안에서만 처리합니다. 레슨과 개별 카드가 원본 제목·URL·제공자·생성 시점·문맥을 잃지 않도록 같은 출처 계약을 사용합니다.
기존 모델 연결
WordCardData.as → model.mjswIdx / lessonIdx→id / lessonId
eng / kor / diction→english / korean / pronunciation
speech / remark / example→wordClass / remark / examples[]
soundIdx / soundUrl→sound { id, url }
deck / prevDeck / lastTest→study { deck, previousDeck, lastTestedAt }
isReview / isPin / cntCorrect→study { isReview, isPinned, correctCount }
검증과 문제 데이터 연결
model.mjsvalidateCatalog()고유 ID, 부모 ID, 운영 속성, 진도 합계와 레슨당 30·50개 카드 규칙을 검사합니다.
createWordCardData()콘텐츠, 예문, 음원, 학습 상태와 출처를 정규화합니다.
createStudyExport()정식 wordCards와 기존 문제 어댑터용 words 호환 뷰를 함께 만듭니다.
schemaVersion: 2WordStudyQuestionAdapter가 WordCardData 입력임을 명시합니다.
기존 앱 모델에서 확인한 값과 현재 웹 작업실의 요구를 합쳤습니다.
order status theme createdAt updatedAt
progress lastStudiedAt estimatedMinutes
categoryId order status level access coverTheme
progress lastStudiedAt estimatedMinutes
bookId order status access estimatedMinutes
source progress lastStudiedAt
english korean pronunciation wordClass examples sound
study.deck isReview isPinned correctCount wrongCount source
index.html구조와 접근성
styles.css단계별 시각 표현
app.mjs데이터와 화면 상태
model.mjs검증·어댑터·내보내기
현재 구조에는 자리를 열어두되, 동작과 저장 규칙이 정해질 때 추가합니다.
slug, tags, 기존 subCategory의 운영 방식
version, publishedAt, 개정·보관 이력
회원별 진도 저장, 기기 간 동기화, 초기화 정책
단기·장기·마스터 덱 이동 규칙과 다음 복습일 계산
실제 음원 업로드·재생, 파일 검증과 대체 발음 처리
빈칸 예문, 복수 정답, 두 번째 예문과 문제 유형별 옵션
첫 번째 선택
책 고르기