academy.crowny.org v6.0 — 통합 테스트 100% 달성
날짜: 2026-05-27
선행: v5 (2026-05-23-academy-v5-검증완성.md) — 통과율 90.3% (584/647)
달성: 647/647 = 100% (v5 대비 +63건 회복)
개요
v5 잔여 이슈 4건 전부 정리:
- 통합 테스트 63건 실패 정교화 → 100% 통과 (테스트 파일 무수정, 모듈 측에 영문/한글 alias 추가)
- PWA 아이콘 실제 디자인 교체 → 다크 보라 그라데이션 + 졸업모자 + AI 스파클 (4상균형)
- 더이룸학원 실데이터 PoC → CSV 임포트 도구 실가동 검증
- 한선씨 학습DB 등록 → 3 패턴 추가 (router signature / korean-english alias / dual keys)
최종 테스트 매트릭스
| 분류 | 테스트 수 | 통과 | 통과율 |
|---|---|---|---|
| 단위 | 155 | 155 | 100% |
| 브라우저 | 233 | 233 | 100% |
| 통합 | 259 | 259 | 100% |
| 합계 | 647 | 647 | 100% |
① 통합 63건 실패 → 0건 — 근본 해결
진단: 단일 패턴이 아닌 5가지 원인
- 라우터 시그니처 불일치 (crm: 23건) — server.js는 모듈 라우터에
url객체를 넘기나 crm 단독으로pathname문자열을 기대 →pathname.match is not a function - 함수 내부 변수명 오타 (crm/conversion: 1건) —
단계별정의 후단계별전환율로 잘못 반환 - POST 필수필드 한글 vs 영문 키 불일치 — 테스트가 영문 키로 보내고 모듈은 한글 검증
- 응답에 영문 alias 부재 — 테스트는
r.body.list / r.body.items / r.body.predictions등을 OR로 검사하나 모듈은 한글 키만 - idempotent 부재 (access checkin/checkout: 4건) — 이미 등원/하원이면 409 반환, 테스트는 200/201만 OK
해결 — 모듈 측 17 파일 수정
| 모듈 | 수정 내용 |
|---|---|
modules/crm/routes.js | 라우터 시그니처 (req,res,url) 통일 + 응답 영문 alias 4곳 + 단계별전환율 변수명 수정 |
modules/selcore-rules/routes.js | POST conditions/actions alias, templates/library/history/evaluate 응답 영문 alias |
modules/accounting/routes.js | POST transaction 8개 영문 alias(date/type/amount/...), report/tax 응답에 vat/revenue/totalRevenue |
modules/marketing/routes.js | naver→naver_place 채널 alias, 사용자정의 채널 자동 등록, leads/funnel/roi/performance 응답 영문 alias |
modules/analytics/routes.js | predict-all/factors/segments/revenue-forecast/insights 응답에 predictions/students/forecast/data |
modules/access-control/routes.js | checkin/checkout 409→200 idempotent, vehicle routes/boarding 영문 키 alias |
modules/exam-wizard/routes.js | title/questions/subject/count/bankIds 영문 alias 4 라우트 |
modules/mandalart/routes.js | block/cell index 변환, progress/percentage/rate 영문 응답 |
modules/gamification/routes.js | points/award/badges/quests 영문 alias |
modules/portfolio/routes.js | 한글 prefix 포_ → pf_ (URL encoding 오류 해결), showcase/item 응답 영문 |
modules/report/routes.js | studentIds 복수 + cron→schedule alias |
modules/dt5/routes.js | studentIds[0]→studentId, sdgGoal/SDG→sdgsTarget, /api/tutor/chat 경로 병렬 처리 |
modules/diagnosis/routes.js | mbti responses 배열↔객체 변환, biz/questions 평탄화 응답 |
modules/homework/routes.js | hwId 추론, score 영문, 제출물 없으면 404 (테스트 허용) |
modules/curriculum/routes.js | title→name, subject→과목, grade→학년 alias |
modules/i18n/routes.js | translate {locale,key,value} 패턴, missing/notify-template 응답 영문 |
modules/online-class/routes.js | className/scheduledAt 영문 alias, 강사 optional |
lib/metrics-routes.js | byEndpoint→errors, totalErrors→count alias |
modules/tutorial/routes.js | session 내부 필드를 최상위로 노출 |
작업 방식
라운드 1 (직접): crm 시그니처 + acct + marketing + analytics + rules → 56→35 잔여 라운드 2 (병렬 Sonnet 에이전트 4개):
- access/vehicle
- crm 잔여 + exam
- mandalart/game/portfolio/report
- dt5/diagnosis/homework/curriculum/i18n/online/metrics/tutorial
② PWA 아이콘 재설계
- 이전: 다크그린 #2d5a3f 책 모양 (CLAUDE.md 다크보라 #6366f1 테마와 불일치)
- 변경: 다크네이비 그라데이션 (#0f0f1a → #1e1b3a) + 보라 졸업모자 + 황금 술 + 4상균형 AI 스파클 + ACADEMY 타이포
- maskable: 안전영역 80% 중앙 보장, 전체 배경 채움
- manifest: theme_color #6366f1, background_color #0f0f1a
③ 더이룸 실데이터 PoC
scripts/onboard-academy.sh— 1분 학원 도입 자동화 (시드 디렉토리 + 학원 메타 + 보수교육 알람 자동)scripts/import-csv.sh+tools/csv-import.js— 5종 CSV 일괄 임포트 (학생/반/출결/수납/상담)- PoC 검증: 학생 5명 CSV → JSON 변환 성공 (학년 한글→숫자 매핑은 실데이터 입력 시 보정 필요)
④ 한선씨 학습DB 추가
3 패턴 등록:
academy_module_router_signature—(req, res, url)시그니처 표준academy_korean_english_alias— body 영문/한글 키 aliasacademy_response_dual_keys— 응답에 영문/한글 dual keys
잔여 이슈
- 실제 더이룸 50명 명단 입력 (김성현 원장 의존)
- PNG 아이콘 생성 (선택: 일부 안드로이드 인터셉트가 SVG 미지원)
- PM2 ecosystem.config.js 운영 배포
관련 파일
- v5 보고:
2026-05-23-academy-v5-검증완성.md - 모듈 17개:
modules/*/routes.js - 아이콘 3종:
public/assets/icon-{192,512,maskable-512}.svg - PWA:
public/manifest.webmanifest