DDEGURRR

단어장

단어장 구조 보기

단어장은 어떻게
학습 단위가 될까요?

관심 분야를 담은 카테고리에서 시작해 책과 레슨, 한 장의 단어 카드로 좁혀집니다. 화면의 구성과 실제 데이터가 같은 네 단계로 움직입니다.

단어장 설계

네 단계로 쌓이는 구조

큰 주제에서 실제로 학습하는 한 장의 카드까지 좁혀갑니다.

01 · 카테고리

관심 분야

일상과 생활

여러 학습 과정을 하나의 주제로 묶습니다.
3권
레슨
9개
02 · 책

기초 생활 어휘

입문 · 150단어

03 · 레슨

  1. 01하루의 시작50단어
  2. 02집과 가족50단어
  3. 03식사와 장보기50단어
02 · 책

여행 필수 어휘

초급 · 90단어

03 · 레슨

  1. 01공항에서30단어
  2. 02숙소와 예약30단어
  3. 03길 찾기30단어
02 · 책

대화 표현 모음

중급 · 150단어

03 · 레슨

  1. 01인사와 소개50단어
  2. 02약속과 제안50단어
  3. 03생각 말하기50단어
04 · 최하위 학습 데이터

WordCardData

뜻과 예문뿐 아니라 출처와 학습 상태까지 한 장에 보존합니다.

01 · 명사approach접근, 접근하다

새 단어 · 예문 1개

02 · 명사balance균형

새 단어 · 예문 1개

03 · 동사capture포착하다

새 단어 · 예문 1개

+27같은 레슨의 카드
실제 구현

코드는 같은 구조를 그대로 담습니다

콘텐츠, 화면 상태, 내보내기 데이터가 하나의 식별자로 연결됩니다.

01

데이터 모델

네 단계 카탈로그

app.mjs
catalog[]
└─ category { order, status, progress }
   └─ books[]
      └─ book { level, access, progress }
         └─ lessons[]
            └─ lesson { access, source, progress }
               └─ wordCards[]
                  └─ WordCardData { content, study, source }

각 단계는 고유한 id와 운영 속성을 가지며, 최하위 데이터는 WordCardData로 통일됩니다.

02

운영 속성 · A

노출과 접근을 데이터로 결정

app.mjs
category { order, status, theme,
  createdAt, updatedAt }
book { categoryId, order, status,
  level, access, coverTheme }
lesson { bookId, order, status,
  access, estimatedMinutes }

order로 정렬하고 status로 공개 여부를 관리합니다. 난이도와 무료·구독 범위는 책과 레슨에 명시해 화면 정책과 콘텐츠를 분리합니다.

03

학습 상태 · B

WordCardData에서 상위 진도 계산

model.mjs
summarizeProgress(wordCards)
→ newCount / shortTermCount
→ longTermCount / masteredCount
→ studiedPercent / masteredPercent
→ lastStudiedAt

Lesson → Book → Category 순으로 집계

진도 숫자를 여러 단계에 따로 입력하지 않습니다. 카드의 study.decklastTestedAt을 기준으로 레슨·책·카테고리의 요약값을 계산합니다.

04

출처 보존

소스별 입력을 하나의 형식으로

model.mjs
sourceAdapters.curated(input)
sourceAdapters.wordExtractor(input)
          ↓ normalizeSource()
{ provider, title, url,
  generatedAt, context }

특정 사이트 구조는 어댑터 안에서만 처리합니다. 레슨과 개별 카드가 원본 제목·URL·제공자·생성 시점·문맥을 잃지 않도록 같은 출처 계약을 사용합니다.

05

기존 모델 연결

WordCardData 필드 대응

WordCardData.as → model.mjs

wIdx / lessonIdxid / lessonId

eng / kor / dictionenglish / korean / pronunciation

speech / remark / examplewordClass / remark / examples[]

soundIdx / soundUrlsound { id, url }

deck / prevDeck / lastTeststudy { deck, previousDeck, lastTestedAt }

isReview / isPin / cntCorrectstudy { isReview, isPinned, correctCount }

06

검증과 문제 데이터 연결

안전하게 검사하고 내보내기

model.mjs

validateCatalog()고유 ID, 부모 ID, 운영 속성, 진도 합계와 레슨당 30·50개 카드 규칙을 검사합니다.

createWordCardData()콘텐츠, 예문, 음원, 학습 상태와 출처를 정규화합니다.

createStudyExport()정식 wordCards와 기존 문제 어댑터용 words 호환 뷰를 함께 만듭니다.

schemaVersion: 2WordStudyQuestionAdapterWordCardData 입력임을 명시합니다.

이번에 적용

운영과 학습에 필요한 속성

기존 앱 모델에서 확인한 값과 현재 웹 작업실의 요구를 합쳤습니다.

카테고리

분류와 운영

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

WordCardData

콘텐츠와 학습 상태

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, 개정·보관 이력

서버 학습 동기화

회원별 진도 저장, 기기 간 동기화, 초기화 정책

학습 스케줄 엔진

단기·장기·마스터 덱 이동 규칙과 다음 복습일 계산

음원 운영

실제 음원 업로드·재생, 파일 검증과 대체 발음 처리

고급 문제 데이터

빈칸 예문, 복수 정답, 두 번째 예문과 문제 유형별 옵션

  1. 1카테고리
  2. 2
  3. 3레슨

첫 번째 선택

어떤 분야를
배우고 싶나요?

카테고리를 선택하면 그 안에 담긴 책을 보여드릴게요.