Supabase에 자동 연결됨. 관리자 암호를 입력하세요.
| 이름 | 아이디 | 닉네임 | 정답률 | 공부한 책 | 푼 회차 | 틀린 횟수 | 공부시간 | 출석 | 통과 | 마지막 활동 |
|---|
| 유형 | 정답률 | 푼 회차 | 출제 항목 | 학생 수 | 회차당 평균 |
|---|
출제 대비 몇 번 틀렸는지로 줄 세웁니다. 정의·오답 선지를 손볼 후보예요.
| # | 단어 | 오답률 | 틀린 회차 | 출제 회차 | 틀린 학생 | 푼 학생 |
|---|
| 책 | 유닛 | 정답률 | 통과율 | 평균 통과 회차 | 학생 수 | 시도 |
|---|
학생은 시험 페이지(vocab_quiz.html)에서 이 아이디 + PIN으로 로그인해요. PIN은 만들 때만 보여요(잊으면 재설정).
닉네임은 학생이 앱에서 직접 정하는 표시명이에요 — 랭킹·공지에는 실명 대신 닉네임(없으면 아이디)이 나갑니다.
| 이름 | 아이디 | 닉네임 | 상태 | 학습기록 | 마지막 활동 |
|---|
이 관리자 암호 하나로 전 학생의 이름·전화번호·생일이 열려요. 학생 비밀번호보다 훨씬 길어야 합니다.
학생 스스로 한 재설정이에요. 본인 확인이 아이디 + 이름 + 생일이라 같은 반 친구도 셋 다 알 수 있어요. 모르는 재설정이 보이면 그 학생 암호를 바꿔 주세요.
불러오는 중…
휴대폰 본인확인(KCP)을 가입에 어떻게 걸지 정해요.
같은 아이는 «보호자 + 이름 + 생년월일»이 모두 같은 경우예요. 한 부모님이 아이 둘을
각각 자기 폰으로 인증해 주는 건 정상이라 막지 않아요.
자녀 수 상한은 0을 넣으면 제한 없음이고, «같은 아이만 막기»와 «표시만»에서만 걸려요
(«보호자당 한 명만»은 이미 1명으로 막히고, «제한 없음»은 세지 않아요).
본인인증은 서버 환경변수가 다 있어야 돌아요. 하나라도 비면 [휴대폰 본인인증] 이 «설정이 아직 끝나지 않았어요» 로 끝납니다. 어느 값이 비었는지 여기서 확인하세요 — 값은 표시되지 않고 이름만 나와요.
최근 인증한 순서예요. 보호자 이름·전화번호는 가려서 보여요.
불러오는 중…
실기기 테스트용이에요. 인증이 안 되면 어느 단계에서 깨졌는지와
KCP가 준 결과코드·메시지가 여기 남아요. KCP에 문의할 땐 주문번호를 알려 주세요.
이름·생년월일·휴대폰·CI는 여기에 나오지 않아요 — 진단에 필요 없어서 서버가 아예 빼고 줍니다.
불러오는 중…
학생이 닉네임을 정할 때 이 목록에 있는 표현이 들어가면 저장이 막혀요. 공백·특수문자를 지우고 검사하니 "시 발"처럼 띄어 써도 잡혀요. 완벽하진 않아요 — 새 우회 표현을 발견하면 여기서 바로 추가해 주세요.
불러오는 중…
학생 앱 공지사항 맨 위에 고정으로 뜨는 영상이에요. 유튜브 주소를 넣고 저장하면 바로 반영돼요. 비우고 저장하면 영상 칸이 사라져요.
로그인하기 전 화면 "둘러보기"에서 위 영상과 나란히 뜨는 두 번째 영상이에요. 비우고 저장하면 그 칸이 사라지고 위 영상만 남아요.
매주 일요일 저녁 7시에, 지난번 알린 뒤로 새로 올라온 책·유닛이 있으면
알림을 켠 학생·선생님 기기 전부에 한 번 보내요. 없으면 안 보내요.
[이번에 뭐가 나가나] 는 아무것도 보내지 않고 내용만 보여줘요 —
눌러도 «다음에 보낼 것»이 없어지지 않아요.
meaning_ko 열을 추가해서 한 번에 업로드.
한국어 뜻이 없는 단어는 그 단어만 조용히 "단어 → 뜻(영어)" 유형으로 대체돼요(에러 없음) —
그래서 책 전체에서 단 1개만 채워도 학생 화면의 유형 버튼은 열리지만,
나머지 단어에서 실제로 한글 뜻 문제가 나오게 하려면 그 단어들도 채워야 해요.
목록에서 책을 고른 뒤 움직여요. 같은 분류 안에서만 이동합니다.
분류 묶음 자체의 차례도 바꿀 수 있어요. 고른 책이 속한 분류가 움직입니다.
파일을 올리면 최대 800px로 자동 리사이즈되어 저장돼요 (JPEG). 이미지 없이 이 학원에서 자체 호스팅하는 URL을 붙여도 돼요.
엑셀/구글시트에서 단어 · 품사 · 영어뜻 · 예문 · 한국어 뜻 5칸을 복사해 아래에 붙여넣으세요 (한 줄에 한 단어, 탭으로 구분). 품사·뜻·예문·한국어 뜻은 비워도 돼요 — 한국어 뜻은 "단어 → 한글 뜻" 문제 유형에만 쓰여요. 맨 위 제목줄(headword…)은 자동으로 건너뜁니다.
구글시트에서 파일 → 다운로드 → 쉼표로 구분된 값(.csv)으로 받은 파일을 올리면, 검사(미리보기)를 거쳐 한 번에 등록해요. 열 제목으로 인식: headword · pos · definition_en · example_sentence + 선택으로 distractor1~3(채운 단어만 빈칸 퀴즈 오답이 이 3개로 고정돼요 — 유의어가 겹쳐 정답이 여러 개 될 수 있는 단어에만 쓰세요) + 선택으로 meaning_ko(한국어 뜻 — "단어 → 한글 뜻" 문제 유형에 쓰여요. 열 제목은 meaning_ko·한국어 뜻·한글 뜻 중 아무거나 써도 인식해요). 그 외 열(플래그 등 참고용)은 자동으로 무시돼요. 행 순서가 곧 유닛 배정이에요 (1~24행 = Unit 1, 25~48행 = Unit 2 …). 한글이 깨져 보이면 엑셀 저장본 대신 구글시트에서 받은 CSV를 사용하세요.
학생이 「예문 빈칸」을 골랐을 때, 예문에서 그 단어를 못 찾으면 앱은 그 문항만 말없이 「뜻 → 단어」로 바꿉니다(종이 시험지 Part 1 에서도 빠져요). 에러가 안 나서 지금까지는 학생이 말해 줘야 알 수 있었어요. 아래에 걸리는 단어를 모아 둡니다.
영상은 유튜브/링크로 추가해요. 영상 파일 업로드는 보안상 service_role 이 필요해 기존 admin.html 에서 하세요.
그림은 발음 mp3 와 같은 규칙이에요 — Storage word-image 버킷에
철자를 소문자로 한 파일명(happy.jpg)으로 올리면 칸을 비워 둬도 저절로 붙어요.
(.png·.webp 도 찾아요. Storage 는 대소문자를 구분하니 Happy.jpg 는 안 붙어요.)
파일 이름을 다르게 썼을 때만 그 이름을 적고 «그림 저장»을 누르세요.
붙여넣기(data URL)는 안 돼요 — 목록이 무거워져 앱이 느려집니다.
학생에게는 정답을 맞힌 뒤에 보여요(먼저 보이면 답이 새요).
각 유닛의 5×5 표지 정가운데 칸에 나오는 핵심 단어와 이미지예요. 유닛은 단어 24개마다 자동으로 하나씩 생겨요. 이미지를 올리면 최대 800px로 자동 리사이즈돼서 DB에 저장돼요 — 별도 호스팅 필요 없음.
유닛 하나(단어 24개)를 네 유형(단어→한글 뜻 · 예문 빈칸 · 뜻→단어 · 단어→뜻)으로 각각 24문항씩 총 96문항을 A4 한 면에 8문항씩(12장) 만들어요. '시험지 생성'을 누르면 미리보기가 뜨고 거기서 인쇄/PDF 저장을 할 수 있어요.
뜻별 발음(이형태)이 아닌 평범한 단어의 기본 발음만 자동으로 만들어요.
단어 추가 · 여러 개 한꺼번에 추가 · 시트 업로드로 새 단어를 넣을 때마다 자동으로 이 생성이 같이 돌아요 —
따로 이 버튼을 누를 필요는 없고, 아래 상태 칸에 진행 상황이 표시돼요.
버튼은 그 자동 생성을 놓쳤거나 실패한 게 있을 때 수동으로 다시 돌리는 용도예요.
이형태(record, bow 같은 단어)는
바로 아래 「🔊 뜻별 발음」 카드에서 기존 방식대로 처리하세요.
발음 파일은 철자 하나당 하나예요. 그래서 present(명 ˈprezənt / 동 prɪˈzent),
record, bow처럼 뜻에 따라 소리가 다른 단어는 한쪽 발음만 나갑니다.
「✨ 자동 채우기」를 먼저 누르세요. 품사를 보고 파일 이름과 문장을 알아서 만듭니다
(The [present] was right there. / They [present] it every day.).
이미 채워 둔 칸은 건드리지 않아요. 그다음 ▶ 로 들어 보고 이상한 것만 고치면 됩니다.
직접 고칠 때 지킬 것 3가지 —
· 대괄호 안 단어는 문장에 나온 그대로여야 해요([record]인데 문장엔 records → 못 찾음)
· 문장 끝에 두지 마세요. 끝 단어는 음이 떨어져서 축 처진 소리로 잘립니다
· 문장은 짧게(5~8단어). 길면 그 안에서 단어가 흐려져요
· 대괄호 없이 다른 철자만 줘도 돼요: lead(납) → led
· 비워 두면 지금과 똑같이 동작합니다(철자 파일 → 음성합성).
· 저장 뒤 mp3 만들기·올리기는 직접 하세요(자동화 안 함):
python scripts/generate_audio.py --audio-keys 로 만들어 들어 보고,
괜찮으면 --upload-missing 을 붙여 올립니다. 자르려면 ffmpeg가 필요해요.
학생이 문제를 신고하면 여기 쌓여요. 보기는 매번 섞이니까, 신고한 순간의 보기와 그 직전(틀렸을 때) 보기를 함께 남겨 뒀어요. 고친 뒤 '처리완료'를 누르면 목록에서 빠져요.
로그인 화면·대시보드의 '💬 문의하기'로 온 문의예요. 로그인한 학생의 문의는 계정 정보로, 로그인 전(비로그인) 문의는 남겨준 이름·연락처로 표시돼요. 응답은 학생 앱 안이 아니라 직접(전화 등) 연락으로 하고, 확인했으면 '처리완료'를 눌러 목록에서 빼세요.
가입하고 N주차에 하루라도 학습한 학생의 비율이에요. 분모에는 그 주차가 이미 지난 학생만 넣습니다 — 지난주에 가입한 학생이 12주차 미달로 잡혀 숫자가 낮아지는 걸 막기 위해서예요.
열심 = 주 3일 이상 · 보통 = 주 1.5일 이상 · 저조 = 그 미만 · 이탈위험 = 14일 넘게 출석 0(가입 14일 미만은 아직 판단하지 않아요).
| 이름 | 아이디 | 닉네임 | 반 | 최근 4주 출석 | 주 평균 | 마지막 출석 | 경과 | 등급 |
|---|
여기 숫자가 위 통계와 학생 랭킹 점수를 함께 좌우해요. 바꾸면 지난 기록도 새 기준으로 다시 계산됩니다.
맞힌 단어 개수 — 랭킹 목록에 찍히는 숫자와 순서가 같아요. 학생이 바로 납득합니다.
종합점수 — 정답률·속도·복습까지 반영하지만, 목록에는 «맞힌 단어 N개»가 찍혀서
많이 맞힌 학생이 아래에 오는 일이 생겨요. 켜려면 목록 표시도 점수로 바꿔야 합니다.
왼쪽은 종합점수 100점 순, 오른쪽은 첫 시도 정답 개수 순이에요. 같은 학생이 두 표에서 몇 등씩 차이 나는지가 곧 «기준을 바꾸면 무슨 일이 생기는가»입니다.
산식 자체의 구조적 편향과, 그 점수를 랭킹에 적용하는 방식의 편향을 나눠서 짚습니다.
— 로 표시된 항목은 «해당 없음»이에요. 그 항목은 만점에서도 빠져 100점으로 환산되므로, 만점 분모가 학생마다 다릅니다(맨 오른쪽 «환산 분모» 칸).
| 점수 순위 |
첫시도 순위 |
변동 | 이름 | 아이디 | 반 | 종합 점수 |
학습량 /35 |
정답률 /30 |
정복 /20 |
유지 /15 |
속도 계수 |
첫시도 정답 |
맞힌 개수 |
출제 항목 |
환산 분모 |
|---|
본문에 {units} 를 쓰면 아래 «통과 유닛 수» 값이 그 자리에 들어갑니다.
줄바꿈은 학생 화면에도 그대로 나갑니다.
통과 유닛 수는 준회원이 «고른 첫 책»에서 통과해야 하는 유닛 수예요.
고른 책의 유닛이 그보다 적으면(예: 59단어 = 유닛 3개짜리 책)
그 책의 전체 유닛 수로 자동으로 낮춰집니다 — 안 그러면 그 학생은 리뷰를 영영 못 씁니다.
회원가입을 마친 직후 뜹니다. 자동 활성화가 켜져 있으면 바로 로그인된 상태로
팝업이 뜨고, 꺼져 있으면 로그인 화면 위에 «승인 대기» 안내로 뜹니다.
{code} = 방금 만든 아이디, {units} = 위 통과 유닛 수.
그림을 담을 word-image 안 폴더 이름이에요(소문자·숫자·하이픈만).
이 주제의 단어 그림은 전부 이 폴더 기준 파일 이름만 적으면 돼요 — 폴더는 여기서 한 번만 정합니다.
책과 유닛을 고르고 받을 반·학생을 정해요. 학생이 그 유닛을 다 맞혀 끝내면 자동으로 «완료» 가 됩니다 — 따로 채점하지 않아요. 과제를 낸 뒤에 푼 것만 셉니다(지난 기록으로 저절로 완료되지 않아요).