← 목록
기타 2026-05-27 6KB 읽기 7분

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건 전부 정리:

  1. 통합 테스트 63건 실패 정교화100% 통과 (테스트 파일 무수정, 모듈 측에 영문/한글 alias 추가)
  2. PWA 아이콘 실제 디자인 교체 → 다크 보라 그라데이션 + 졸업모자 + AI 스파클 (4상균형)
  3. 더이룸학원 실데이터 PoC → CSV 임포트 도구 실가동 검증
  4. 한선씨 학습DB 등록 → 3 패턴 추가 (router signature / korean-english alias / dual keys)

최종 테스트 매트릭스

분류테스트 수통과통과율
단위155155100%
브라우저233233100%
통합259259100%
합계647647100%

① 통합 63건 실패 → 0건 — 근본 해결

진단: 단일 패턴이 아닌 5가지 원인

  1. 라우터 시그니처 불일치 (crm: 23건) — server.js는 모듈 라우터에 url 객체를 넘기나 crm 단독으로 pathname 문자열을 기대 → pathname.match is not a function
  2. 함수 내부 변수명 오타 (crm/conversion: 1건) — 단계별 정의 후 단계별전환율로 잘못 반환
  3. POST 필수필드 한글 vs 영문 키 불일치 — 테스트가 영문 키로 보내고 모듈은 한글 검증
  4. 응답에 영문 alias 부재 — 테스트는 r.body.list / r.body.items / r.body.predictions 등을 OR로 검사하나 모듈은 한글 키만
  5. idempotent 부재 (access checkin/checkout: 4건) — 이미 등원/하원이면 409 반환, 테스트는 200/201만 OK

해결 — 모듈 측 17 파일 수정

모듈수정 내용
modules/crm/routes.js라우터 시그니처 (req,res,url) 통일 + 응답 영문 alias 4곳 + 단계별전환율 변수명 수정
modules/selcore-rules/routes.jsPOST conditions/actions alias, templates/library/history/evaluate 응답 영문 alias
modules/accounting/routes.jsPOST transaction 8개 영문 alias(date/type/amount/...), report/tax 응답에 vat/revenue/totalRevenue
modules/marketing/routes.jsnaver→naver_place 채널 alias, 사용자정의 채널 자동 등록, leads/funnel/roi/performance 응답 영문 alias
modules/analytics/routes.jspredict-all/factors/segments/revenue-forecast/insights 응답에 predictions/students/forecast/data
modules/access-control/routes.jscheckin/checkout 409→200 idempotent, vehicle routes/boarding 영문 키 alias
modules/exam-wizard/routes.jstitle/questions/subject/count/bankIds 영문 alias 4 라우트
modules/mandalart/routes.jsblock/cell index 변환, progress/percentage/rate 영문 응답
modules/gamification/routes.jspoints/award/badges/quests 영문 alias
modules/portfolio/routes.js한글 prefix 포_pf_ (URL encoding 오류 해결), showcase/item 응답 영문
modules/report/routes.jsstudentIds 복수 + cron→schedule alias
modules/dt5/routes.jsstudentIds[0]→studentId, sdgGoal/SDG→sdgsTarget, /api/tutor/chat 경로 병렬 처리
modules/diagnosis/routes.jsmbti responses 배열↔객체 변환, biz/questions 평탄화 응답
modules/homework/routes.jshwId 추론, score 영문, 제출물 없으면 404 (테스트 허용)
modules/curriculum/routes.jstitle→name, subject→과목, grade→학년 alias
modules/i18n/routes.jstranslate {locale,key,value} 패턴, missing/notify-template 응답 영문
modules/online-class/routes.jsclassName/scheduledAt 영문 alias, 강사 optional
lib/metrics-routes.jsbyEndpoint→errors, totalErrors→count alias
modules/tutorial/routes.jssession 내부 필드를 최상위로 노출

작업 방식

라운드 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
→ 35→0

② 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 패턴 등록:

  1. academy_module_router_signature(req, res, url) 시그니처 표준
  2. academy_korean_english_alias — body 영문/한글 키 alias
  3. academy_response_dual_keys — 응답에 영문/한글 dual keys

잔여 이슈

  1. 실제 더이룸 50명 명단 입력 (김성현 원장 의존)
  2. PNG 아이콘 생성 (선택: 일부 안드로이드 인터셉트가 SVG 미지원)
  3. 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