2026년 9월 6일 일요일

[실과·보건·체육] 건강 지킴이 트래커 - 급식·운동 데이터로 5대 영양소 밸런스 레이더 차트



내 하루 밥상을 데이터로 그리는 '건강 지킴이 일일 영양 & 신체활동 트래커'

💪 초등 5~6학년 실과 '균형 잡힌 식생활' 및 체육 '건강 증진' 단원 — 학생들이 오늘 급식 메뉴와 방과 후 운동량을 터치로 입력하면, 5대 영양소(탄수화물·단백질·지방·비타민·무기질) 섭취 밸런스와 소모 칼로리가 레이더 차트로 시각화되고 자기 몸에 맞는 건강 피드백 카드가 나옵니다. 교과서 속 영양 지식이 자기 하루 데이터와 직접 만나는 자기주도 건강 관리 앱입니다.

📖 한 줄 정의

심기 모드(데이터 임베딩): API 데이터를 미리 받아 HTML 파일 안 상수로 박아두는 방식(앱 실행 중 외부 통신 0).

학내망 원칙: 학생 개인정보(실명·의견·성적·상담 기록)의 외부 수집·저장·전송 금지(쿼리에 학생 데이터가 담기는 외부 API 호출 포함) — 일반 공개 쿼리의 외부 호출은 허용하며, 학생 배포본은 심기 폴백(EMBED 상수)을 항상 내장한다.

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
급식 메뉴 → 영양소 자동 매핑 오늘 급식 메뉴(현미밥, 콩국, 돈가스, 배추김치)를 터치하면 5대 영양소 비율이 자동으로 계산됩니다. 영양사 선생님과 협업한 급식 데이터를 상수에 심어두는 방식입니다. '오늘 급식 뭐 먹었어?' 버튼 클릭 → 급식 식단이 영양소 원뿔(Radar) 그래프로 변신.
운동량 → 소모 칼로리 계산 줄넘기기(10분당 약 100kcal), 축구(30분당 약 250kcal) 등 활동 목록을 터치하면 오늘 나의 총 소모 에너지가 즉시 계산됩니다. 오늘의 섭취 칼로리와 소모 칼로리를 저울(비율) 그래프로 비교.
건강 피드백 카드 AI가 아닌 정해진 규칙 기반의 건강 조언 엔진이 '단백질이 조금 부족해요! 저녁에 두부나 계란을 먹어볼까요?'처럼 친절하게 알려줍니다. 일주일치 데이터를 모으면 '나만의 건강 리포트' 카드가 나타납니다.

2. 핵심 아키텍처 해설

① 급식 메뉴 영양 DB: MENU_DB 상수

const MENU_DB = {
  "현미밥": { carb: 60, protein: 5, fat: 1, vitamin: 2, mineral: 3, kcal: 270 },
  "돈까스": { carb: 20, protein: 18, fat: 22, vitamin: 1, mineral: 2, kcal: 420 },
  "콩국": { carb: 10, protein: 8, fat: 4, vitamin: 3, mineral: 4, kcal: 150 }
};

학교 급식 메뉴의 대략적인 영양 성분값을 교사와 영양사가 협업해 심어두면, 학생이 메뉴를 터치하는 것만으로 5대 영양소 지표가 합산됩니다.

② 레이더 차트(Radar Chart) 캔버스 그리기

function drawRadar(ctx, values) {
  const axes = Object.keys(values);
  const center = { x: 150, y: 150 };
  const step = (2 * Math.PI) / axes.length;
  ctx.beginPath();
  for (let i = 0; i <= axes.length; i++) {
    const angle = i * step - Math.PI / 2;
    const r = (values[axes[i % axes.length]] / 100) * 120;
    const x = center.x + r * Math.cos(angle);
    const y = center.y + r * Math.sin(angle);
    i === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);
  }
  ctx.closePath();
  ctx.stroke();
}

외부 차트 라이브러리 없이 캔버스 삼각함수만으로 5각형 레이더 차트를 직접 그립니다. 학생의 섭취 비율과 표준 섭취 기준을 비교해 부족한 영양소 꼭짓점이 오목하게 들어가 보입니다.

③ 소모 칼로리 저울 시각화

섭취 칼로리 대비 운동 소모 칼로리의 비율을 저울 양쪽 접시처럼 그려서, 오늘 하루 에너지 균형(Energy Balance)을 즉각적으로 체감하게 합니다. 수학 비율 단원과 함께 연계하여 계산 검증까지 할 수 있습니다.

3. 초보자를 위한 바이브 코딩 실전 사용 예시

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트'를 복사합니다.
  2. 역질문 답변 — 제미나이가 묻는 학생 학년·성별 기준 표준 영양 섭취량에 답합니다.
  3. HTML 파일 실행 — 메모장에 붙여넣고 건강트래커.html로 저장하여 태블릿에 배포합니다.

제미나이 전용 에러 제로 프롬프트

[🚨 에러 방지 기본 안전장치]
1. 단일 HTML 파일 완결성: 외부 라이브러리(CDN), 백엔드 서버 없이 순수 바닐라 HTML/CSS/JS로 완성한다.
2. 심기 모드(데이터 임베딩): const MENU_DB = {...} 상수에 급식 식단 및 일반 음식 15가지의 영양 성분값을 내장하여 브라우저에서 즉시 계산이 되도록 한다.
3. 레이더 차트 캔버스: HTML5 Canvas의 삼각함수로 5각형 레이더 차트를 그리며, 오늘 섭취 비율과 표준 섭취 기준을 겹쳐 표시한다.
4. 개인정보 보호: 학생 실명과 체중 대신 모둠명과 닉네임만 쓰며, 모든 데이터는 브라우저 세션 메모리로만 유지한다.
5. // TODO, /* 생략 */ 등의 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 즉시 작성하지 말고, 아래 3가지 질문을 먼저 나에게 던져줘:
1. 5대 영양소 외에 추가할 항목이 있나요? (수분, 식이섬유, 당류 등)
2. 운동 강도 단위는 분(줄넘기기 10분당 100kcal 등)으로 잡을까요?
3. 피드백 문구를 짧게 알림창처럼 띄울까요, 길게 카드 형태로 쓸까요?

🎯 에디터 한줄평

"'식단의 균형'이라는 글자를 외우기만 했던 과거와 달리, 이제 아이들은 자기 점심의 영양소 꼭짓점이 어디가 꺼져 있는지 눈으로 보고, 부족한 부분을 저녁 메뉴로 채우며 실제 식습관을 고쳐갑니다. 자기 몸의 데이터를 스스로 분석하는 것, 그것이 가장 견고한 건강 문해력(Health Literacy)의 출발점입니다."

📚 기술·교육 참고 링크

  • 식약처 및 교육부 급식 영양 관리 안내 : 학교 급식 영양소 기준 정보 참고
  • 교육과정 연계: 초등 5~6학년 실과(균형 잡힌 식생활), 체육(건강 증진), 수학(비율 및 통계)

[창체·학급자치] 학급 주간 소식지 - 종이 전단지 없이 폰으로 보는 모바일 카드 웹사이트



종이 인쇄비 0원, 알림장 QR로 완성하는 '학급 주간 소식지 & 활동 갤러리'

🗞️ 초등 창체·자치 및 학부모 소통 — 매주 금요일마다 가정통신문으로 인쇄하던 주간학습안내와 학급 소식지를 반응형 모바일 카드 그리드(Card Grid) 웹사이트로 전환합니다. 학생들이 쓴 배움 한 줄과 모둠 활동 사진이 카드 뉴스로 펼쳐지며, 학부모는 알림장 QR코드 한 번으로 스마트폰에서 우리 반의 한 주를 생생하게 확인합니다.

📖 한 줄 정의

심기 모드(데이터 임베딩): API 데이터를 미리 받아 HTML 파일 안 상수로 박아두는 방식(앱 실행 중 외부 통신 0).

학내망 원칙: 학생 개인정보(실명·의견·성적·상담 기록)의 외부 수집·저장·전송 금지(쿼리에 학생 데이터가 담기는 외부 API 호출 포함) — 일반 공개 쿼리의 외부 호출은 허용하며, 학생 배포본은 심기 폴백(EMBED 상수)을 항상 내장한다.

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
스마트폰 최적화 카드 그리드 A4 종이 전단지가 아닌, 인스타그램이나 카드뉴스처럼 한 손으로 위아래 넘겨보는 모바일 웹 화면입니다. [월~금 시간표], [이주의 배움 포토], [준비물 알림]이 세로 카드로 정돈.
학생 배움 한 줄 갤러리 선생님이 다 쓰는 게 아니라, 학생들이 금요일 자치 시간에 작성한 한 줄 소감을 상수로 복사해 넣습니다. 학생 실명 대신 닉네임과 함께 활동 소감이 실시간 롤링.
종이 인쇄 예산 100% 절감 매주 수십 장씩 찍던 복사비와 종이 낭비가 완전히 사라지고, 분실 걱정 없이 학부모에게 안전하게 도달합니다. 완성된 HTML 파일을 학교 홈페이지나 하이클래스에 링크로 탑재.

2. 핵심 아키텍처 해설

① 주간 소식 데이터: WEEKLY_NEWS 상수

const WEEKLY_NEWS = {
  week: "2026년 4월 2주차",
  motto: "서로 배려하고 질문하는 우리 반",
  notices: [
    { title: "과학의 달 행사 안내", desc: "4월 15일 교내 에어로켓 및 탐구대회가 열립니다." },
    { title: "준비물", desc: "체육복, 미술 붓(수채화용)을 챙겨오세요." }
  ],
  gallery: [
    { title: "모둠 협동 뜀틀 수업", team: "햇살 모둠", photo: "data:image/svg+xml;base64,..." }
  ]
};

한 주의 안내 사항과 활동 사진을 하나의 객체 상수로 관리합니다. 매주 금요일 이 상수의 내용만 교체하면 새로운 소식지가 완성됩니다.

② 모바일 반응형 카드 CSS

.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 16px;
}
.card {
  border-radius: 12px;
  box-shadow: 0 4px 6px rgba(0,0,0,0.05);
  background: #ffffff;
}

스마트폰의 작은 화면에서는 1열로, PC나 태블릿에서는 2~3열로 자동 정렬되어 어떤 기기에서 열어도 가독성이 뛰어납니다.

③ 다크모드 및 글자 크기 조절

학부모님의 연령대와 가독성을 배려하여 상단에 글자 크기 확대(A+) 버튼을 기본 제공합니다. 부모님이 침대나 출퇴근길 지하철에서 편안하게 읽을 수 있도록 세심하게 설계되었습니다.

3. 초보자를 위한 바이브 코딩 실전 사용 예시

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트'를 복사합니다.
  2. 역질문 답변 — 제미나이가 묻는 학급 소식 구성 항목(시간표, 준비물, 갤러리)에 답합니다.
  3. HTML 파일 실행 — 메모장에 붙여넣고 학급소식지.html로 저장하여 학부모 알림장에 배포합니다.

제미나이 전용 에러 제로 프롬프트

[🚨 에러 방지 기본 안전장치]
1. 단일 HTML 파일 완결성: 외부 라이브러리(CDN), 백엔드 서버 없이 순수 바닐라 HTML/CSS/JS로 완성한다.
2. 심기 모드(데이터 임베딩): const WEEKLY_NEWS = {...} 상수에 주간 소식 3개, 시간표, 활동 갤러리 2개를 내장하여 즉시 브라우저에서 실행되도록 한다.
3. 모바일 카드 그리드: 스마트폰 가로 폭(360px)에서도 좌우 스크롤 없이 카드들이 세로로 미려하게 흐르는 반응형 Flex/Grid를 적용한다.
4. 개인정보 보호: 학생 얼굴 사진과 실명은 사용하지 않으며, 모둠 활동 작품 사진(Base64)과 닉네임만 표시하여 학내망 원칙을 철저히 준수한다.
5. // TODO, /* 생략 */ 등의 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 즉시 작성하지 말고, 아래 3가지 질문을 먼저 나에게 던져줘:
1. 소식지 메인 상단에 강조할 이번 주의 학급 급훈이나 한 줄 약속이 있나요?
2. 갤러리 사진은 1장만 넣을까요, 아니면 좌우 슬라이드(캐러셀)로 넘기게 할까요?
3. 배경 색상을 따뜻한 크림 베이지와 산뜻한 민트 블루 중 어느 것으로 갈까요?

🎯 에디터 한줄평

"가방 바닥에 구겨진 채 학기말에야 발견되던 종이 주간학습안내문은 이제 안녕입니다. 스마트폰 화면에 아이들의 생생한 모둠 활동 사진과 배움 한 줄이 따뜻한 카드로 열리는 순간, 학교와 가정을 잇는 신뢰의 온도는 1도 더 올라갑니다. 종이 한 장 인쇄하지 않고도 부모님의 손안에 교실을 배달하는 스마트한 학급 경영입니다."

📚 기술·교육 참고 링크

  • 교육부 학교-가정 연계 학부모 소통 가이드라인
  • 교육과정 연계: 초등 1~6학년 창체(학급자치·적응 활동), 학교-가정 소통 연계

[보건·학교행정] 교내 감염병 대시보드 - 학년·반별 결석 현황 실시간 히트맵 집계



독감·코로나 유행 시 교무실에서 바로 띄우는 '교내 감염병 실시간 결석 현황 대시보드'

🏥 보건행정 및 학교 안전 관리 — 신학기나 환절기마다 번지는 유행성 감염병(독감, 수족구, 코로나 등) 발생 시, 담임교사들이 학생 결석 사유를 원클릭으로 선택하면 전교 학년별·반별 감염병 발생 추이가 실시간 히트맵(Heatmap)으로 자동 집계됩니다. 메신저로 묻고 엑셀로 취합하던 보건교사의 야근 업무를 단 1분으로 줄여주는 신속한 방역 지원 포털입니다.

📖 한 줄 정의

심기 모드(데이터 임베딩): API 데이터를 미리 받아 HTML 파일 안 상수로 박아두는 방식(앱 실행 중 외부 통신 0).

학내망 원칙: 학생 개인정보(실명·의견·성적·상담 기록)의 외부 수집·저장·전송 금지(쿼리에 학생 데이터가 담기는 외부 API 호출 포함) — 일반 공개 쿼리의 외부 호출은 허용하며, 학생 배포본은 심기 폴백(EMBED 상수)을 항상 내장한다.

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
학년/반 매트릭스 히트맵 1학년부터 6학년까지 각 반별 결석자 수가 숫자로 표시되며, 환자가 많은 반은 자동으로 붉은색 농도가 짙어지는 시각화입니다. 보건실 모니터에 상시 띄워두고 전교 유행 추이를 한눈에 직관적으로 파악.
감염병 질환별 분류 통계 독감(A형/B형), 수족구, 코로나, 기타 열성 질환별로 클릭 한 번에 필터링되어 어떤 질병이 집중 발생 중인지 분류됩니다. 'A형 독감 14명, 수족구 3명' 등 교육청 즉시 보고 서식으로 수치 정리.
완전 오프라인 교내 보안 학생의 결석 사유와 건강 정보는 민감한 개인정보이므로, 외부 클라우드 DB 없이 교내 인트라넷이나 교무실 로컬에서만 동작합니다. 담임교사용 비밀번호 잠금 기능으로 외부 유출을 원천 차단.

2. 핵심 아키텍처 해설

① 결석 데이터 집계: ABSENT_DATA 상수

const ABSENT_DATA = [
  { grade: 1, classNo: 2, disease: "독감(A형)", count: 3 },
  { grade: 3, classNo: 1, disease: "수족구", count: 2 },
  { grade: 5, classNo: 3, disease: "독감(B형)", count: 4 }
];

학생 실명 없이 학년, 반, 질환명, 결석 인원 수만 숫자로 관리하여 민감한 건강 정보의 노출을 구조적으로 방지합니다.

② 히트맵 컬러 농도 계산

function getHeatColor(count) {
  if (count === 0) return "#f3f4f6";
  if (count <= 2) return "#fed7aa"; // 연한 주황
  if (count <= 4) return "#fb923c"; // 짙은 주황
  return "#ef4444"; // 붉은 경고 (5명 이상)
}

반별 환자 수에 비례하여 셀의 배경색을 연한 주황에서 짙은 붉은색으로 동적 할당함으로써, 보건교사가 집단 감염 의심 반을 0.1초 만에 감지할 수 있습니다.

③ 교육청 보고용 CSV 원클릭 추출

화면 상단의 '교육청 보고 양식 내보내기' 버튼을 누르면 당일 전교 감염병 현황(일자, 학년, 반, 질환명, 결석자 수)이 표준 CSV 표로 자동 다운로드됩니다.

3. 초보자를 위한 바이브 코딩 실전 사용 예시

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트'를 복사합니다.
  2. 역질문 답변 — 제미나이가 묻는 학교 학급 규모(1~6학년 학급 수)와 주요 감염병 목록에 답합니다.
  3. HTML 파일 실행 — 메모장에 붙여넣고 감염병대시보드.html로 저장하여 보건실 PC에서 엽니다.

제미나이 전용 에러 제로 프롬프트

[🚨 에러 방지 기본 안전장치]
1. 단일 HTML 파일 완결성: 외부 라이브러리(CDN), 백엔드 서버 없이 순수 바닐라 HTML/CSS/JS로 완성한다.
2. 심기 모드(데이터 임베딩): const ABSENT_DATA = [...] 상수에 전교 1~6학년 각 반의 예시 결석 데이터를 내장하여 브라우저 실행 즉시 히트맵이 나타나도록 한다.
3. 히트맵 매트릭스 렌더링: 1~6학년(행) × 1~4반(열) 그리드 테이블을 구성하고, 각 셀의 결석자 수에 따라 배경색 농도를 계산하여 시각화한다.
4. 개인정보 보호: 학생 실명은 일체 다루지 않으며, [학년/반/질환/인원수] 통계치만 취급하여 학내망 원칙을 철저히 준수한다.
5. // TODO, /* 생략 */ 등의 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 즉시 작성하지 말고, 아래 3가지 질문을 먼저 나에게 던져줘:
1. 우리 학교의 학년당 평균 학급 수(예: 3반, 4반, 6반)는 몇 반인가요?
2. 기본으로 집계할 주요 질환 목록(독감, 수족구, 코로나, 감기, 기타) 5가지를 지정할까요?
3. 셀 클릭 시 상세 질환 팝업 창을 띄울까요, 아니면 하단에 요약 바로 띄울까요?

🎯 에디터 한줄평

"환절기 아침마다 메신저 알림창에 쏟아지는 '우리 반 독감 2명 결석이요' 쪽지들을 메모지에 적어 더하던 보건교사의 손길을 기억합니다. 학년과 반의 격자 위에 색깔로 타오르는 이 히트맵은, 단순한 숫자 취합을 넘어 집단 유행을 사전에 막아내는 학교 방역의 가장 든든한 레이더망입니다."

📚 기술·교육 참고 링크

  • 질병관리청 및 교육부 학생 감염병 예방 위기대응 매뉴얼
  • 교육과정 연계: 보건행정, 감염병 예방 수칙, 교내 방역 안전 관리

[바이브 코딩 교구] 제미나이로 만드는 초3 수학 '큰 수와 자릿값' 인터랙티브 퀴즈 웹앱 (100% 브라우저 단독 구동 & 거꾸로 프롬프트)

🔢 제미나이 바이브 코딩으로 5분 만에 완성하는 초3 수학 '큰 수와 자릿값' 단일 HTML 퀴즈 교구 (성취기준 완벽 연계)

💡 이번 교구 바이브 코딩 30초 핵심 다이제스트:
초등학교 3학년 수학 '10000 이상의 큰 수와 자릿값' 단원은 구체물 조작 없이 추상적인 숫자 기호로만 접근하면 자릿수를 건너뛰거나 수의 크기를 혼동하기 쉽습니다.
복잡한 서버 설치나 외부 프로그램 없이, 웹 브라우저에서 단일 HTML5 파일 하나로 100% 단독 구동되는 인터랙티브 퀴즈 교구를 제미나이와 함께 만들어 보세요!
학생 개인정보를 완벽히 보호하는 12가지 동물 닉네임 시스템2022 개정 교육과정 성취기준에 맞춘 6단계 비계설정 퀴즈, 그리고 수업 산출물로 제출할 수 있는 학습 인증 포토카드 PNG 다운로드까지 갖춘 완성형 수업 도구입니다.

📊 한눈에 보는 3대 핵심 교육적 변화 분석표

무엇이 바뀌었나요? (영역) 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
🔢 자릿값과 위치적 기수법 시각화 숫자 5가 백의 자리일 때(500)와 천의 자리일 때(5000), 만의 자리일 때(50000) 나타내는 크기의 차이를 직관적으로 비교합니다. "35420에서 5가 나타내는 수는?" 퀴즈를 풀며 자리마다 부여된 고유 가치를 스스로 발견하기
🛡️ 실명 없는 100% 안심 동물 닉네임 학생 실명이나 학번을 수집하지 않고, '계산왕 호랑이', '지혜로운 부엉이' 등 가상 동물 캐릭터를 선택해 즉시 시작합니다. 개인정보보호법 및 학교 보안 지침 걱정 없이 1인 1디바이스 환경에서 안심하고 수업 진행
📸 포토카드 학습 인증서 이미지 저장 퀴즈 6문항을 모두 풀면 맞힌 점수와 '큰 수 탐험가/마스터' 배지가 담긴 예쁜 인증 카드를 PNG 파일로 저장합니다. 학생들이 내려받은 포토카드 이미지를 학급 위두랑, 패들렛, 구글 클래스룸에 과제 증빙으로 제출

🎯 초등 3학년 수학 '큰 수' 교육과정 비계설정(Scaffolding) 포인트

  • 1. 10000의 필요성과 묶음 원리:
    9999보다 1 큰 수로서의 '10000'을 학습하고, 1000원짜리 지폐 10장이 모여 10000원이 되는 실생활 묶음 모델을 피드백 카드로 제공합니다.
  • 2. 자릿값(Place Value)과 숫자의 크기 구별:
    숫자 기호 자체(예: 7)와 그 숫자가 위치한 자리(만의 자리)에 따라 실제 나타내는 값(70000)의 차이를 오답 선택지로 배치하여 오개념을 선제적으로 교정합니다.
  • 3. 네 자리씩 끊어 읽는 위치적 기수법:
    우리말 수 체계의 핵심인 "일, 십, 백, 천 / 만, 십만, 백만, 천만"의 4자리 묶음 읽기 규칙을 힌트 카드로 시각화하여 자연스럽게 익히도록 돕습니다.
  • 4. 정답 즉시 노출 차단 & 메타인지 강화:
    틀렸을 때 단순히 '오답'만 띄우지 않고, "이 숫자는 천의 자리에 있으므로 500이 아니라 5000을 나타내요"라는 구체적인 인과관계 해설을 제시합니다.

💡 초보자를 위한 바이브 코딩 실전 사용 예시

📌 따라하기 3단계 순서

  1. 1단계 (거꾸로 프롬프트 복사): 아래 제공된 [제미나이 전용 큰 수 퀴즈 거꾸로 프롬프트]를 복사하여 구글 제미나이(https://gemini.google.com)에 입력합니다.
  2. 2단계 (역질문 3가지 답변): 제미나이가 되묻는 질문(자릿수 범위, 오답 힌트 방식, 디자인 테마)에 내 학급 수업 상황에 맞게 1줄로 답변합니다.
  3. 3단계 (단일 index.html 실행): 제미나이가 출력한 완성형 코드를 메모장에 넣고 math_place_value.html로 저장한 뒤 더블 클릭하면 브라우저에서 즉시 실행됩니다!

📋 복사해서 바로 쓰는 '제미나이 전용 큰 수 퀴즈 에러 제로 프롬프트'

당신은 초등 수학 교육과정 전문가이자 프론트엔드 수석 웹 개발자입니다.
2022 개정 초등학교 3학년 수학 성취기준: "큰 수의 필요성을 인식하면서 10000 이상의 큰 수에 대한 자릿값과 위치적 기수법을 이해하고, 수를 읽고 쓸 수 있다."를 구현한 객관식 퀴즈 웹앱을 단일 HTML5 파일로 제작해 주세요.

[🚨 에러 방지 및 개인정보 안심 필수 안전장치 (Zero-Error Baseline)]
1. 단일 파일 완결성: 외부 복잡한 번들러나 서버 설치 없이, 브라우저에서 바로 열리는 단일 HTML5 파일 안에 HTML, Tailwind CSS(CDN), Lucide Icons(CDN), 순수 바닐라 자바스크립트를 모두 포함할 것. 생략 주석(// TODO, /* 생략 */ 등) 없이 완전한 코드로 출력할 것.
2. 개인정보 원천 차단: 학생의 실명이나 학번을 입력받지 말고, 입장 화면에서 12가지 귀여운 동물 닉네임(계산왕 호랑이, 지혜로운 부엉이, 날쌘 다람쥐 등) 중 하나를 선택해 입장하도록 할 것.
3. 성취기준 맞춤 퀴즈 데이터 내장: 10000의 이해, 자릿값 분해, 4자리 끊어 읽기, 수의 대소 비교 등 핵심 퀴즈 6문항을 자바스크립트 배열 안에 완전히 내장하고, 선택지(①~④)와 맞춤 피드백 해설을 포함할 것.
4. Web Audio API 사운드 합성: 외부 MP3 다운로드 없이 브라우저 내장 AudioContext로 정답 차임벨(도-미-솔)과 오답 효과음을 자체 합성할 것.
5. 결과 인증 포토카드 저장: 퀴즈 종료 시 점수, 맞힌 문항 수, 획득 배지(새싹/탐험가/마스터)가 담긴 학습 카드를 html2canvas CDN을 활용해 PNG 이미지로 저장할 수 있게 할 것.

[❓ 역질문 유도 (Reverse Prompting)]
코드를 작성하기 전에, 나에게 아래 3가지 질문을 먼저 던져서 세부 구성을 확정해 줘:
1. 퀴즈 범위를 10000~99999(다섯 자리 수) 집중으로 할까요, 십만·백만·천만 단위까지 확장할까요?
2. 오답을 골랐을 때 정답만 보여줄까요, 아니면 "자릿값 묶음 분해 힌트"를 단계별로 열람할 수 있게 할까요?
3. 전체 디자인 무드를 파스텔 네이비/스카이블루 테마와 교실 칠판 테마 중 어떤 스타일로 맞출까요?

🎯 에디터 한줄평

"교육과정 성취기준의 본질을 정확히 꿰뚫는 거꾸로 프롬프트 하나만 있으면, 외부 툴이나 서버에 의존하지 않고도 교실에서 100% 안전하고 완벽하게 작동하는 수학 교구를 자유자재로 만들어낼 수 있습니다!"

🔗 교육과정 및 기술 레퍼런스:
• 2022 개정 교육과정 초등학교 수학과 교육과정 (수와 연산 - 큰 수 [4수01-01])
• Tailwind CSS CDN: https://cdn.tailwindcss.com
• Lucide Icons CDN: https://cdn.jsdelivr.net/npm/lucide@0.577.0/dist/umd/lucide.min.js
• html2canvas CDN: https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js

[바이브 코딩 교구] 제미나이로 만드는 초3 수학 '수의 계열과 크기 비교' 동적 선 잇기 웹앱 (SVG 실시간 연결 & 거꾸로 프롬프트)

🔗 제미나이 바이브 코딩으로 만드는 초3 수학 '수의 계열과 크기 비교' 선 잇기 웹앱: SVG 동적 연결선 & 에러 제로 거꾸로 프롬프트

💡 이번 교구 바이브 코딩 30초 핵심 다이제스트:
초등학교 3학년 수학 '다섯 자리 이상의 수의 범위에서 수의 계열과 크기 비교'는 단순 지필 학습지로는 뛰어세기 규칙과 자릿수 비교 과정을 시각적으로 체득하기 어렵습니다.
클릭 한 번으로 왼쪽 조건과 오른쪽 결과가 실시간 SVG 연결선으로 이어지는 인터랙티브 'A-B 매칭(선 잇기)' 디지털 교구를 제미나이와 함께 단일 HTML5 파일로 완성해 보세요!
학생 개인정보를 철저히 보호하는 12가지 동물 닉네임 시스템과 정답 확인 시 초록/빨강 시각 피드백, 그리고 결과 화면의 학습 인증 포토카드 PNG 다운로드까지 갖춘 완성형 수학 교구입니다.

📊 한눈에 보는 3대 핵심 교육적 변화 분석표

무엇이 바뀌었나요? (영역) 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
📐 실시간 동적 SVG 선 잇기 인터랙션 왼쪽 항목과 오른쪽 항목을 마우스나 손가락으로 누르면 화면에 푸른색 연결선이 부드럽게 그려집니다. 전자칠판 앞에서 학생이 직접 터치하며 '34500보다 100 큰 수'를 찾아 선으로 잇기
🔢 뛰어세기 계열 & 자릿값 대소 비교 100씩, 1000씩 뛰어세기 규칙과 높은 자리부터 비교하는 수의 대소 비교 알고리즘을 5개 실전 짝으로 학습합니다. 48200과 48190처럼 최고자리는 같고 십의 자리가 다른 수의 정밀 비교 훈련
🛡️ 개인정보 제로 & 단일 파일 완결 실명 수집과 복잡한 서버 설치 없이, 브라우저 단독 실행 단일 HTML 파일로 오프라인에서도 완벽 구동됩니다. 선 연결 완료 후 시도 횟수와 점수가 담긴 학습 인증서를 PNG 이미지로 내려받아 패들렛에 제출

🎯 초등 3학년 수학 '수의 계열과 크기 비교' 교육과정 비계설정 포인트

  • 1. 뛰어세기를 통한 수의 규칙적 계열화:
    100씩 뛰어세기(예: 34500 ➔ 34600), 1000씩 거꾸로 뛰어세기(예: 70000보다 1000 작은 수 = 69000)를 매칭하여 수의 규칙성을 손으로 직접 연결합니다.
  • 2. 수의 범위와 사이 수 추론:
    "56000과 57000 사이의 수" 조건을 제시하여 56500을 매칭하게 함으로써, 수직선 상에서 수의 상대적 위치 감각을 체득합니다.
  • 3. 최고자리부터 순차 비교하는 대소 판별:
    자릿수가 같은 두 수(48200 vs 48190)에서 만의 자리와 천의 자리가 같을 때 십의 자리(0 vs 9)를 비교하여 부등호(>, <) 관계를 도출하는 체계적 사고를 유도합니다.
  • 4. 정답 확인 및 시각적 색상 피드백:
    [정답 확인] 버튼을 누르면 올바른 연결선은 선명한 초록색, 잘못된 연결선은 붉은색 테두리로 바뀌어 학생 스스로 오개념을 수정할 기회를 제공합니다.

💡 초보자를 위한 바이브 코딩 실전 사용 예시

📌 따라하기 3단계 순서

  1. 1단계 (거꾸로 프롬프트 복사): 아래 제공된 [제미나이 전용 수의 계열 선 잇기 거꾸로 프롬프트]를 복사하여 구글 제미나이(https://gemini.google.com)에 입력합니다.
  2. 2단계 (역질문 3가지 답변): 제미나이가 되묻는 질문(매칭 문항 수, 난이도 범위, 디자인 테마)에 내 교실 상황에 맞게 1줄로 답변합니다.
  3. 3단계 (단일 index.html 실행): 제미나이가 출력한 완성형 코드를 메모장에 넣고 math_match_game.html로 저장한 뒤 더블 클릭하면 브라우저에서 즉시 선 잇기 교구가 실행됩니다!

📋 복사해서 바로 쓰는 '제미나이 전용 선 잇기 에러 제로 프롬프트'

당신은 초등 수학 교육과정 전문가이자 프론트엔드 인터랙티브 웹 개발자입니다.
2022 개정 초등학교 3학년 수학 성취기준: "다섯 자리 이상의 수의 범위에서 수의 계열을 이해하고, 수의 크기를 비교하며 그 방법을 설명할 수 있다."를 완벽히 구현한 'A와 B 동적 선 잇기(Matching Pairs)' 교구 웹앱을 단일 HTML5 파일로 제작해 주세요.

[🚨 에러 방지 및 개인정보 안심 필수 안전장치 (Zero-Error Baseline)]
1. 단일 파일 완결성: 외부 서버 설치 없이, 브라우저에서 바로 열리는 단일 HTML5 파일 안에 HTML, Tailwind CSS(CDN), Lucide Icons(CDN), 동적 SVG 선 렌더링 자바스크립트를 모두 포함할 것. 생략 주석(// TODO, /* 생략 */ 등) 없이 완전한 코드로 출력할 것.
2. 개인정보 원천 차단: 학생 실명/학번 입력을 요구하지 말고, 입장 화면에서 12가지 귀여운 동물 닉네임(탐구왕 호랑이, 지혜로운 여우 등)을 선택해 입장하도록 할 것.
3. 실시간 SVG 선 렌더링: 왼쪽 박스와 오른쪽 박스를 클릭하면 두 요소의 중심 좌표를 계산하여 실시간 SVG <line> 요소를 화면에 부드럽게 그릴 것. 연결 수정 및 재연결 로직을 직관적으로 지원할 것.
4. 성취기준 5대 매칭 데이터 내장:
   - 왼쪽 1: '34500보다 100 큰 수' ➔ 오른쪽: '34600'
   - 왼쪽 2: '56000과 57000 사이의 수' ➔ 오른쪽: '56500'
   - 왼쪽 3: '99990보다 10 큰 수' ➔ 오른쪽: '100000 (십만)'
   - 왼쪽 4: '48200과 48190의 크기 비교' ➔ 오른쪽: '48200 > 48190'
   - 왼쪽 5: '70000보다 1000 작은 수' ➔ 오른쪽: '69000'
5. 시각 및 청각 피드백: Web Audio API로 연결음과 정답음을 합성하고, [정답 확인] 클릭 시 맞힌 선은 초록색, 틀린 선은 붉은색 테두리로 표시할 것.
6. 결과 포토카드 저장: 5쌍을 모두 맞히면 html2canvas CDN을 활용해 닉네임, 점수, 시도 횟수가 담긴 학습 카드를 PNG 파일로 다운로드할 수 있게 할 것.

[❓ 역질문 유도 (Reverse Prompting)]
코드를 작성하기 전에, 나에게 아래 3가지 질문을 먼저 던져서 세부 구성을 확정해 줘:
1. 문항 난이도를 다섯 자리 수(만 단위) 집중으로 할까요, 억·조 단위 큰 수까지 혼합할까요?
2. 모바일/태블릿 터치 시 선을 드래그해서 긋는 방식과 탭-탭(Tap to Connect) 방식 중 어떤 것을 우선할까요?
3. 전체 디자인 톤을 부드러운 파스텔 크림/블루 테마와 교실 칠판 테마 중 어떤 스타일로 맞출까요?

🎯 에디터 한줄평

"눈으로만 보던 수의 크기와 규칙이, 마우스와 손끝을 따라 그려지는 푸른 연결선을 통해 직관적인 수 감각으로 완성됩니다. 지필 평가의 지루함을 한 방에 날리는 인터랙티브 교구입니다!"

🔗 교육과정 및 웹 표준 레퍼런스:
• 2022 개정 교육과정 초등학교 수학과 교육과정 (수와 연산 [4수01-02])
• HTML5 Inline SVG Line Rendering API
• Web Audio API & Tailwind CSS CDN

[바이브 코딩] fawazahmed0 Currency API - 키 등록 없이 200+ 통화 환율로 만드는 환율 계산기



무료 환율 API 한 장으로 만드는 환율 계산기 — fawazahmed0 Currency API 완전 정복

🔑 API 키 발급도, 신용카드 등록도 필요 없는 무료 환율 API입니다. URL 한 줄이면 달러·유로·엔은 물론 비트코인과 금(온스)까지 200여 개 통화의 매일 갱신되는 환율을 JSON 한 장으로 받아올 수 있습니다.

환율 계산기는 수학(비율·비례식)과 사회(국제 경제)를 한 화면에 묶는 최고의 융합 소재입니다. 이 글에는 교실에서 자주 막히는 두 관문까지 미리 해결해 담았습니다 — ① CDN 장애에 흔들리지 않는 폴백 주소, ② 학내망 '외부 호출 0' 원칙에 맞춘 데이터 심기(오프라인) 모드.

📖 한 줄 정의

심기 모드(데이터 임베딩): API 데이터를 미리 받아 HTML 파일 안 상수로 박아두는 방식(앱 실행 중 외부 통신 0).

학내망 원칙: 학교 배포 웹앱은 개인정보 수집·저장·전송 없음(외부 CDN·API 호출 0, 단일 파일) — 학생은 학내망에서 교사 PC 서버에 접속.

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
무료·키 없는 첫 API "회원가입 없이 파일로 팔지 않는 환율 창고." 매일 자동 갱신되고, 달러·유로 같은 실제 화폐 외에 비트코인·금(온스)·은까지 200여 종목이 한 JSON 파일에 담겨 있습니다. 브라우저 주소창에 usd.json 주소를 붙여넣기 → 1달러 기준 전 세계 환율표가 그대로 눈앞에!
URL 구조 주소는 4덩어리 = 창고(cdn.jsdelivr.net) + 상자(@fawazahmed0/currency-api) + 날짜(@latest 또는 @YYYY-MM-DD) + 파일(v1/currencies/코드.json). 날짜를 'latest' 대신 특정 날짜로 바꾸면 그날의 환율로 시간 여행이 가능합니다. usd.min.json처럼 끝에 .min을 붙이면 줄바꿈·띄어쓰기 없는 압축판이라 다운로드가 더 빠릅니다.
데이터 모양(해부) usd.json을 열면 딱 두 칸: 'date'(기준 날짜)와 'usd'(1달러가 각 통화로 얼마인지 목록). 예) krw: 1355.65 = "1달러가 1,355.65원". 자바스크립트로 json.usd.krw를 꺼내 "1달러 = ○○○원" 화면에 띄워보기.
학내망 배포 대응 학교 네트워크 원칙상 웹앱은 외부 호출 금지. 해결법은 데이터 심기: 미리 내려받은 환율 JSON을 HTML 파일 안의 상수로 심으면, 인터넷 없이도 돌아가는 오프라인 환율 계산기가 됩니다. 외부 호출 0, 단일 파일 원칙 그대로 지켜집니다. 심기 모드 파일 → 학내망 배포용. fetch 실시간 모드 → 교사 개인 연습·시연용으로 두 벌 운영.
안전장치(폴백) 공식 저장소가 "CDN이 흔들릴 수 있으니 폴백 주소를 코드에 넣어라"고 경고합니다. 같은 데이터가 Cloudflare 페이지에도 복제되어 있어, 첫 주소가 실패하면 두 번째 주소로 자동 재시도하면 됩니다. fetch 첫 주소 → 실패하면 pages.dev 재시도 → 그마저 실패하면 '오프라인 안내' 문구 표시(5줄 코드).

2. 핵심 아키텍처 해설 — 환율 창고는 이렇게 생겼다

① URL 해부: 네 덩어리만 알면 끝

https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json

  • cdn.jsdelivr.net — 파일을 전 세계에 빠르게 나르는 무료 CDN 창고
  • @fawazahmed0/currency-api — npm에 올라온 데이터 패키지 이름(프로젝트 본진 저장소는 exchange-api로 이전했지만, 데이터 배포는 이 패키지 경로로 계속됩니다)
  • @latest 또는 @2026-09-04 — 최신판 또는 날짜 고정판. "작년 이날 환율과 비교하기" 같은 수업 활동은 날짜 고정판으로 구현합니다.
  • /v1/currencies/코드.json — 실제 데이터 파일. 전체 통화 목록(코드·이름 지도)은 /v1/currencies.json 하나로 제공되어, 계산기의 '통화 선택 목록'을 만들 때 그대로 씁니다.

참고: 폴더 주소까지(.../currencies/) 브라우저로 열면 파일 목록 페이지가 보일 뿐이고, 앱이 읽을 것은 파일 주소입니다.

② 데이터 모양: 딱 두 칸

{
  "date": "2026-09-04",
  "usd": {
    "krw": 1355.6508182,
    "eur": 0.86032423,
    "jpy": 156.37984362,
    "btc": 0.000012363144,
    "xau": 0.0002238111
  }
}

모든 값은 "1달러 = 몇"이라는 뜻입니다. 금(xau) 0.0002238111은 "1달러가 금 0.0002238111온스" → 뒤집어 금 1온스 ≈ 4,468달러(약 606만 원). 은(xag), 백금(xpt)도 같은 방식으로 들어 있어 '무게당 가격 비교' 과제 소재로도 훌륭합니다.

③ 교차 환율 공식: usd.json 하나로 전 세계 통화쌍 계산

받을 금액 = 줄 금액 × rates[받을 통화] ÷ rates[줄 통화]. 달러를 거치지 않고도 모든 쌍이 바로 계산됩니다.

예) 10,000원 → 유로: 10,000 × 0.86032 ÷ 1,355.65 = 약 6.34유로 (10,000원은 약 7.38달러)

const CDN1 = "https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/";
const CDN2 = "https://latest.currency-api.pages.dev/v1/currencies/";

async function loadRates(code) {
  let res = await fetch(CDN1 + code + ".min.json");
  if (!res.ok) res = await fetch(CDN2 + code + ".min.json");
  const json = await res.json();
  return json[code];   // 예: rates.krw === 1355.65 (1달러당 원화)
}

④ 이중 안전장치: 폴백 + 데이터 심기

폴백은 위 코드 5번째 줄처럼 첫 주소 실패 시 Cloudflare 주소로 재시도하는 구조입니다. 학내망 배포용은 아예 통신을 지웁니다 — 파일 상단에 오늘 날짜 데이터를 상수로 심기만 하면 됩니다.

const EMBED_DATA = { date: "2026-09-04", usd: { krw: 1355.65, eur: 0.86032, jpy: 156.38 } };
// EMBED_DATA가 채워져 있으면 fetch를 완전히 생략 → 외부 호출 0 모드

3. 초보자를 위한 바이브 코딩 실전 사용 예시

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트' 전체를 복사해 Gemini에 붙여넣습니다.
  2. 역질문 답변 — Gemini가 코드를 짜기 전에 던지는 질문 3가지(통화 쌍, 데이터 모드, 화면 톤)에 자기 상황을 답변하면 설계가 확정됩니다.
  3. HTML 파일 실행 — 완성 코드를 메모장에 붙여 '환율계산기.html'로 저장 후 더블클릭. 심기 모드라면 그 파일을 그대로 학내망에 배포합니다.

제미나이 전용 에러 제로 프롬프트

[🚨 에러 방지 기본 안전장치]
1. 결과물은 외부 라이브러리·프레임워크·웹폰트 없이 단일 HTML 파일로 완성한다. (환율 데이터 fetch는 유일한 외부 통신 예외)
2. 사운드는 Web Audio API로 직접 합성한다: 환율 변환 성공 시 부드러운 '똑' 소리, 빈 칸·없는 통화 코드 입력 시 '삑' 경고음. 오디오 파일·CDN 사운드 사용 금지.
3. 모바일 터치 대응: 뷰포트 메타 태그 필수, 버튼 최소 44×44px, 입력 필드 font-size 16px 이상, 360px 화면에서 가로 스크롤 금지.
4. 환율 데이터는 아래 두 주소를 순서대로 시도하고, 둘 다 실패하면 화면에 '오프라인: 환율 데이터를 불러올 수 없습니다'를 표시한다.
   1순위 https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/{통화코드}.min.json
   2순위 https://latest.currency-api.pages.dev/v1/currencies/{통화코드}.min.json
5. 파일 상단 EMBED_DATA 상수에 환율 데이터가 심어져 있으면 fetch를 완전히 생략한다(학내망 배포용 외부 호출 0 모드). fetch 성공 시 데이터 기준 날짜(json.date)를 화면 하단에 표시한다.
6. 통화 코드는 대문자로 입력해도 소문자로 자동 변환하고, currencies.json 목록에 없는 코드는 친절한 안내와 함께 '삑' 경고음을 낸다.
7. 결과 표시는 천 단위 콤마 + 소수점 둘째 자리까지. // TODO, /* 생략 */ 같은 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 바로 만들지 말고, 아래 3가지를 먼저 나에게 질문한 뒤 내 답변으로 설계를 확정한다.
Q1. 기본 통화 쌍은 무엇인가? (예: 원화 ↔ 달러) 즐겨찾기 통화 3개는 무엇으로 할까?
Q2. 데이터 모드는 무엇으로 할까? (A: 실시간 fetch 모드 / B: 학내망용 데이터 심기 모드)
Q3. 화면 톤은? (큰 숫자 전광판 스타일 / 심플 계산기 스타일)

🎯 에디터 한줄평

API 키 없이 열리는 무료 데이터 창고는 '인생 첫 API'로 삼기 최적입니다. 어제 1,355.65원이던 숫자가 오늘은 조금 다르게 떠오르는 경험 — '인터넷에 살아 움직이는 데이터가 있다'는 사실 하나가 비율·비례식 수학 시간의 태도를 바꿉니다. 학내망 원칙을 '데이터 심기'로 우아하게 넘기는 설계도 마음에 듭니다. 오늘은 계산기, 다음 단계는 '여행 국가별 필요 경비 비교표 앱'으로 확장해보세요.

📚 기술·교육 참고 링크

[행정/홍보] 학교 마스코트 1분 런 게임 - 입학식·개교기념일 10분 만에 빌드하고 QR로 배포



[행정/홍보] 학교 마스코트 '1분 런 게임' — 입학식·개교기념일 10분 만에 빌드하고 QR로 배포

🏫 입학식 아침, 신입생들이 QR코드 하나로 들어오는 게임 — 우리 학교 마스코트가 교정의 장애물을 넘어 본관에 도착하는 '1분 런 게임'입니다. 교목은 장애물로, 교화는 보너스로, 본관은 골인 지점으로 — 학교 상징 전체를 게임 오브젝트로 배치하니 게임 자체가 학교 소개서가 됩니다.

게임 루프 표준 무대에 '1분 타이머와 골인 엔딩'만 얹으면 10분 만에 빌드됩니다. 반응형 설계로 전자칠판·태블릿·스마트폰 어디서나 돌아가고, 학내망 '외부 호출 0'·개인정보 수집 0이라 학부모께 QR로 배포해도 안전합니다.

📖 한 줄 정의

심기 모드(데이터 임베딩): API 데이터를 미리 받아 HTML 파일 안 상수로 박아두는 방식(앱 실행 중 외부 통신 0).

학내망 원칙: 학교 배포 웹앱은 개인정보 수집·저장·전송 없음(외부 CDN·API 호출 0, 단일 파일) — 학생은 학내망에서 교사 PC 서버에 접속.

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
행사 시나리오 입학식·개교기념일 오리엔테이션에서 1분짜리 런 게임으로 학교를 소개합니다. 게임 안에서 교정·상징물을 먼저 '경험'한 신입생은 실제 교정을 돌 때 익숙해져 있습니다. 오리엔테이션 첫 활동: QR 스캔 → 게임 클리어 → 교정 투어 시작.
학교 상징 오브젝트화 마스코트=주인공, 교목=장애물(넘기), 교화=보너스(모으기), 본관=골인 지점. 학교 로고는 엔딩 카드에 — 상징 4종이 게임 규칙이 됩니다. 마스코트 도트 맵 + 교목 도트 맵 + 교화 도트 맵 3장 준비.
1분 게임 설계 60초 카운트다운 안에 본관에 도착하면 골인 엔딩(학교 로고+축하 팡파르). 마지막 10초는 틱 틱 사운드로 긴장을 더합니다 — 짧아서 여러 명이 돌아가며 도전합니다. 막판 10초 Web Audio 틱 + 골인 시 교가 멜로디 합성.
반응형 배포 캔버스 크기를 화면 크기에 맞춰 재조정하면(리사이즈 처리) 전자칠판·노트북·태블릿·스마트폰 어디서나 비율이 유지됩니다. 학부모 QR 접속도 안전한 이유는 개인정보 수집 0 때문입니다. 창 크기를 바꿔가며 게임 창의 반응형 동작 확인.
QR 배포와 학내망 QR코드는 게임 파일 안에 넣는 것이 아니라 배포물(인쇄물·홈페이지·현수막)에 붙입니다. 교사가 학내망 주소를 QR 생성 도구로 한 번 만들어 두면 게임 파일은 단일 파일·통신 0을 유지합니다. 입학식 안내 책자 마지막 페이지에 QR + '1분 게임' 문구.

2. 핵심 아키텍처 해설 — 1분 타이머와 반응형

① 표준 무대에서 세 번째 규칙

게임 루프(update·draw)는 표준 무대 — 이번 글의 새 규칙은 '1분 제한과 골인 지점'뿐입니다. 무대를 재활용하니 10분 빌드가 가능합니다.

② 1분 타이머와 골인 엔딩

const TIME_LIMIT = 60;   // 초 단위
let timeLeft = TIME_LIMIT;

setInterval(function () {
  timeLeft -= 1;
  showTimer(timeLeft);
  if (timeLeft === 10) tickSound();          // 마지막 10초 틱 틱
  if (timeLeft <= 0 && !reachedGoal) gameOver();
}, 1000);

if (runner.x >= goal.x) {   // 본관 도착!
  reachedGoal = true;
  ending();                  // 학교 로고 + 축하 팡파르
}

③ 반응형 캔버스: 화면 크기에 맞추기

function resize() {
  const scale = Math.min(window.innerWidth / 800, window.innerHeight / 450);
  canvas.style.width  = (800  * scale) + "px";
  canvas.style.height = (450 * scale) + "px";
}
window.addEventListener("resize", resize);
resize();   // 처음 한 번 실행

게임 좌표(800×450)는 고정해 두고 화면에 비율 맞춰 그리는 방식 — 폰에서도 전자칠판에서도 같은 게임이 보입니다.

④ QR은 게임 밖에서: 배포 체크리스트

1) 교사 PC 서버에 파일 업로드 → 2) 학내망 주소 확인 → 3) QR 생성 도구로 QR 이미지 만들기 → 4) 안내 책자·홈페이지에 부착. QR 생성 라이브러리를 게임에 넣으면 파일이 무거워지고 원칙도 흔들리니, QR은 배포물의 일로 분리하는 것이 정석입니다.

⑤ 학내망 전략: 학부모에게도 안전한 설계

마스코트·교목·교화 도트 맵과 멜로디가 모두 상수로 심겨 있으니(EMBED_DATA) 파일 하나가 곧 행사 자료입니다. 심기 모드(데이터 임베딩)가 무엇인지는 앞의 '📖 한 줄 정의' 박스를 참고하세요. 개인정보 수집 0이라 학부모·신입생 누구의 기기에서도 안심 배포가 가능합니다.

3. 초보자를 위한 바이브 코딩 실전 사용 예시

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트' 전체를 복사해 Gemini에 붙여넣습니다.
  2. 역질문 답변 — Gemini가 던지는 질문 3가지(마스코트 상징, 장애물·보너스, 제한 시간)에 답하면 설계가 확정됩니다.
  3. HTML 파일 실행 — 완성 코드를 '우리학교런.html'로 저장 후 QR 배포 준비.

제미나이 전용 에러 제로 프롬프트

[🚨 에러 방지 기본 안전장치]
1. 결과물은 외부 라이브러리·프레임워크·웹폰트·이미지 파일 없이 단일 HTML 파일로 완성한다. 마스코트·교목·교화·본관은 캔버스 도트 맵, 배경(교정)은 순수 CSS로 그린다.
2. 학교 상징 데이터(마스코트 도트 맵, 교목·교화 아이콘, 골인 지점 좌표, 엔딩 문구)는 파일 상단 EMBED_DATA 상수로 완전히 심는다(학내망 배포용 외부 호출 0 모드).
3. 사운드는 Web Audio API로 직접 합성한다: 점프 '펑', 교화 획득 '똑', 마지막 10초 '틱', 골인 시 교가풍 팡파르 멜로디.
4. 1분(60초) 카운트다운 타이머와 골인 엔딩 카드(학교 로고 문구 + 축하 화면)를 구현한다. 시간 초과 시 다시 도전 안내.
5. 반응형: 캔버스가 창 크기에 비율을 유지하며 맞춰지고(resize 처리), 360px 화면 가로 스크롤 금지, 탭=점프·스페이스바=점프 터치 대응.
6. 개인정보 수집·저장·전송 금지 — 기록 유형의 기능(랭킹·이름 입력)은 넣지 않는다(행사 배포용 안전 설계).
7. // TODO, /* 생략 */ 같은 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 바로 만들지 말고, 아래 3가지를 먼저 나에게 질문한 뒤 내 답변으로 설계를 확정한다.
Q1. 마스코트와 상징물은 어떤 것들로 할까요? (마스코트 캐릭터 모양·교목·교화·본관 외관 설명)
Q2. 장애물과 보너스는 어떤 배치로 할까요? (교목=넘기, 교화=모으기 외에 복도·자전거 보관소 등)
Q3. 제한 시간과 난이도는? (1분 기준 — 신입생이 2~3번 만에 골인할 난이도 권장)

🎯 에디터 한줄평

학교 홍보물은 보통 '읽는 시간'을 요구하지만, 게임은 '플레이하는 1분'을 줍니다. 신입생이 마스코트를 조작하며 교목을 넘고 교화를 모으는 동안 학교 상징은 선물처럼 눌어붙습니다. 이번 글의 행정적 승리는 두 가지 — 표준 무대 재활용으로 10분 빌드라는 효율, 그리고 QR을 게임 밖 배포물로 분리한 설계 감각입니다. 개인정보 수집 0이라 학부모 배포까지 안심되는 구조 — 행정·홍보 업무에서 웹앱을 쓰는 가장 안전한 첫 사례입니다.

📚 기술·교육 참고 링크

  • 교육과정 연계: 실과·정보(웹앱 제작과 반응형), 창의적 체험활동(행사 기획·학교 홍보), 미술(마스코트 도트 디자인)과 함께 활용
  • MDN Web Docs: Canvas API — 도트 맵과 반응형 캔버스 표준 기술
  • MDN Web Docs: resize 이벤트 — 화면 크기에 맞추는 반응형 핵심

[교과 연계] 초등 수학 타격 액션 디펜스 - 구구단·분수 퀴즈로 몬스터 물리치기



구구단을 몬스터 타격으로 바꾸는 수학 액션 디펜스 — 점진 3단계 프롬프팅 완전 정복

⚔️ 몬스터가 다가오면 수학 퀴즈를 맞추고, 정답 순간 타격감(hit feel) 4종 세트 — 플래시(flash)·화면 흔들림(screen shake)·데미지 팝업(damage popup)·타격 사운드 — 로 몬스터를 물리치는 액션 디펜스(defense) 게임입니다. 4~6학년 수학 연산 단원과 실과 SW 단원이 한 게임에서 만납니다.

점진적 3단계 프롬프팅(무대 → 퀴즈 → 타격감·슬라이더)으로 하루(24시간) 프로젝트가 가능합니다. 몬스터는 메이플스토리 캐릭터 대신 우리 반만의 도트 맵(dot map) 몬스터를 직접 디자인 — 저작권 존중과 창의성을 동시에 배웁니다. 문제은행·아트·사운드를 전부 파일 안에 심는 심기 모드(데이터 임베딩)라 학내망 통신은 0입니다.

📖 한 줄 정의

심기 모드(데이터 임베딩): API 데이터를 미리 받아 HTML 파일 안 상수로 박아두는 방식(앱 실행 중 외부 통신 0).

학내망 원칙: 학교 배포 웹앱은 개인정보 수집·저장·전송 없음(외부 CDN·API 호출 0, 단일 파일) — 학생은 학내망에서 교사 PC 서버에 접속.

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
수업 시나리오 수학 연산 단원(구구단·분수) + 실과 SW 단원을 결합해, 점진 3단계 프롬프팅으로 하루 안에 완성합니다. 단계마다 저장·실행으로 다음 단계를 확인하는 리듬이 핵심입니다. 1단계 무대 → 2단계 퀴즈 → 3단계 타격감·슬라이더 순서로 파일을 키워갑니다.
타격감(hit feel) 4종 정답 판정 순간 ① 플래시(flash) ② 화면 흔들림(screen shake) ③ 데미지 팝업(damage popup) ④ 타격 사운드가 동시에 터집니다 — '맞췄다!'를 머리가 아니라 몸으로 느끼게 하는 게임 개발의 기술입니다. 화면 흔들림은 캔버스 이동 오프셋 3줄로 시작.
문제은행 구구단(2~9단)과 분수(같은 분모 덧셈) 문제를 EMBED_DATA로 파일 안에 심습니다. 랜덤으로 뽑아 몬스터에 붙이고, 정답이면 몬스터 체력이 줄어듭니다. 문제 35개 심기 → Math.random으로 뽑기.
인게임 슬라이더 input type="range" 슬라이더(slider)로 정답 제한 시간 3~10초를 조절합니다. 학급 실력에 맞춘 난이도 튜닝이 게임 안에서 바로 가능합니다. 슬라이더 값을 화면에 실시간 표시하기.
저작권 안전 설계 메이플스토리 고유 캐릭터·음악·아이콘은 사용하지 않습니다. '귀여운 슬라임 느낌'이라는 스타일만 참고해, 우리 반만의 몬스터를 도트 맵으로 새로 디자인합니다. 8×8 도트 맵에 우리 반 슬라임을 그려보기.

2. 핵심 아키텍처 해설 — 타격감이 만들어지는 4개의 층

① 무대 해부: 디펜스는 '오른쪽에서 다가오는 위험'

몬스터는 화면 오른쪽에서 스폰(spawn)되어 성문(왼쪽)으로 다가오고, 게임 루프(update/draw)는 표준 무대를 그대로 재활용합니다 — 규칙(문제·판정·연출)만 교체하면 새 장르가 됩니다.

② 도트 맵 몬스터: 0과 1로 그리는 우리 반 슬라임

const SLIME = [
  "00111100",
  "01111110",
  "11111111",
  "11111111",
  "11100111",
  "11111111",
  "01111110",
  "00111100"
];
// "1"마다 작은 사각형을 그려 몬스터 완성 — 이미지 파일 필요 0

③ 문제은행과 랜덤 뽑기

const QUIZ_POOL = [
  { q: "7 x 8 = ?", a: 56 },
  { q: "2/5 + 1/5 = ?", a: 0.6 }
];

function drawQuiz() {
  const i = Math.floor(Math.random() * QUIZ_POOL.length);
  return QUIZ_POOL[i];
}

④ 타격감 4종: 정답 판정 순간의 연출 코드

let shakeTime = 0;
let flashAlpha = 0;

function hitEffect(x, y) {
  shakeTime = 8;                              // ② 화면 흔들림 8프레임
  flashAlpha = 0.5;                           // ① 플래시 밝기
  popups.push({ text: "HIT!", x: x, y: y, life: 20 });   // ③ 데미지 팝업
  sound("hit");                               // ④ Web Audio 타격음
}

function draw() {
  const ox = shakeTime > 0 ? (Math.random() - 0.5) * 8 : 0;
  ctx.setTransform(1, 0, 0, 1, ox, 0);        // 흔들림 = 캔버스를 살짝 옮겨 그리기
  drawStage();
  if (flashAlpha > 0) {
    ctx.fillStyle = "rgba(255,255,255," + flashAlpha + ")";
    ctx.fillRect(0, 0, W, H);
    flashAlpha -= 0.1;                        // 플래시는 서서히 사라지게
  }
  drawPopups();
}

⑤ 슬라이더로 제한 시간 조절 + 심기 전략

<input type="range" id="timeRange" min="3" max="10" value="6">
const range = document.getElementById("timeRange");
range.addEventListener("input", function () {
  LIMIT = Number(range.value);
  limitLabel.textContent = LIMIT + "초";
});

문제은행·도트 맵·사운드 파라미터는 모두 파일 상단 상수로 심습니다. 이 게임은 애초에 외부 fetch가 필요 없는 완전 로컬 게임 — 학내망 배포본은 상수만 교체하면 됩니다(심기 모드(데이터 임베딩) 참고: 앞의 '📖 한 줄 정의' 박스).

3. 초보자를 위한 바이브 코딩 실전 사용 예시

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트'의 1단계부터 순서대로 복사해 Gemini에 붙여넣습니다.
  2. 역질문 답변 — 1단계에서 Gemini가 던지는 질문 3가지(연산 비중, 몬스터 컨셉, 슬라이더 범위)에 답하면 설계가 확정됩니다.
  3. 단계마다 저장·실행 — 1단계 무대 → 2단계 퀴즈 → 3단계 타격감, 각 단계 끝에 파일을 저장하고 실행해 동작을 확인합니다. 하루면 충분합니다.

제미나이 전용 에러 제로 프롬프트 (점진 3단계)

[사용법] 아래 3단계 프롬프트를 한 번에 하나씩 붙여넣는다. 매 단계가 끝나면 HTML 파일을 저장·실행해 다음 단계로 넘어간다. 최종 결과는 하나의 단일 HTML 파일이어야 한다.

[1단계 — 몬스터 스폰 무대]
캔버스에 몬스터가 오른쪽에서 왼쪽으로 다가오는 디펜스 무대를 만들어줘.
[🚨 에러 방지 안전장치]
- 단일 HTML 파일 완결성: 외부 라이브러리·웹폰트·이미지 파일·오디오 파일 금지.
- 몬스터는 도트 맵(0과 1의 배열)으로 직접 그린다. 메이플스토리 고유 캐릭터·음악·아이콘 사용 금지 — 우리 반만의 슬라임 컨셉으로 새로 디자인한다.
- 게임 루프는 update()와 draw()로 분리한다.
- 사운드는 Web Audio API로 직접 합성한다.
- 모바일 터치 대응: 뷰포트 메타 태그, 버튼 최소 44x44px, 360px 가로 스크롤 금지.
- // TODO, /* 생략 */ 금지.
[❓ 역질문 유도]
코드를 바로 만들지 말고 아래 3가지를 먼저 질문한다.
Q1. 구구단과 분수 문제의 비중은? (구구단 위주 / 분수 위주 / 반반)
Q2. 몬스터 컨셉은? (우리 반 슬라임 / 과일 괴물 / 반 학생이 만든 도트)
Q3. 정답 제한 시간 슬라이더 범위는? (3~10초 권장)

[2단계 — 연산 퀴즈 결합]
몬스터마다 수학 문제를 붙이고, 키패드로 정답을 입력해 판정하게 해줘.
[🚨 에러 방지 안전장치]
- 문제은행은 파일 상단 EMBED_DATA 상수(구구단 25문제 + 같은 분모 분수 10문제)로 완전히 심는다(학내망 배포용 외부 호출 0 모드).
- 정답이면 몬스터 체력 감소, 오답이면 몬스터가 성문에 한 걸음 더 접근한다.
- 숫자 키패드는 3x4 배열 버튼으로 만들고 터치 크기 64px 이상.
- 정답 판정에는 Number() 변환을 반드시 거친다("0.6" 문자열 함정 방지).

[3단계 — 타격감 4종 + 슬라이더]
정답 판정 순간 타격감 4종(플래시, 화면 흔들림, 데미지 팝업, 사운드)을 연출하고, 상단 슬라이더로 정답 제한 시간 3~10초를 조절하게 해줘.
[🚨 에러 방지 안전장치]
- 플래시는 반투명 흰 사각형의 알파를 프레임마다 줄여 사라지게 한다.
- 흔들림은 ctx.setTransform으로 캔버스를 랜덤 오프셋만큼 옮겨 그린다.
- 데미지 팝업은 위로 떠오르다 사라지는 텍스트 배열로 관리한다.
- 사운드는 Web Audio API 합성(타격 '퍽', 정답 '똑', 오답 '삑').
- 슬라이더 값은 화면에 실시간 표시한다.
- 최종 파일은 단일 HTML로 완성 — // TODO, /* 생략 */ 금지.

🎯 에디터 한줄평

연산 반복 훈련('백지연습'의 지루함)이 정답 순간의 타격감으로 바뀌는 순간, 수학은 '당하는 것'에서 '던지는 것'이 됩니다. 특히 이 설계의 백미는 저작권 안전 장치 — 메이플스토리 캐릭터를 베끼는 대신 우리 반만의 몬스터를 도트로 새로 그리는 과정 자체가 저작권 존중 수업이자 실과 SW 수업이 됩니다. 점진 3단계로 나눈 프롬프팅은 '한 번에 완벽한 코드'라는 불가능한 기대를 없애고, 단계마다 성공을 확인하는 하루 프로젝트 리듬을 만들어 줍니다.

📚 기술·교육 참고 링크

  • MDN Canvas API : 도트 맵 그리기와 화면 흔들림의 기초
  • MDN Web Audio API : 타격 사운드 무설치 합성
  • 교육과정 연계: 수학(연산·비율·시간), 실과·정보(SW 프로그래밍·저작권)와 함께 활용
  • 활용 팁: 완성 후 '몬스터 도트 디자인 공모'로 미술 시간과 연결하면 저작권·창의성 학습이 자연스럽게 이어집니다

[교과 연계] 크롬 다이노 개조 건강 런 게임 - 체육·보건·실과 융합 수업



[교과 연계] 크롬 다이노를 개조한 '건강 런 게임' — 체육·보건·실과 융합 수업 완전 정복

🏃‍♂️ 인터넷이 안 될 때 만나는 크롬 다이노 게임, 오늘 이것을 우리 반 체육·보건 수업으로 완전히 개조해보겠습니다. 햄버거·탄산음료 같은 정크푸드(장애물)는 점프로 피하고, 신선한 채소·과일(보너스 아이템)은 먹어서 점수를 얻는 '건강 런 게임'입니다. 코드는 단일 HTML 파일 하나 — 교실 크롬북에서 바로 돌아갑니다.

5~6학년 체육(육상 달리기)·보건(영양)·실과(정보) 세 교과를 한 파일로 묶는 융합 수업입니다. 학내망 '외부 호출 0' 원칙에 맞춘 음식 도트 데이터 심기 모드(데이터 임베딩) 설계까지 한 번에 담았습니다.

📖 한 줄 정의

심기 모드(데이터 임베딩): API 데이터를 미리 받아 HTML 파일 안 상수로 박아두는 방식(앱 실행 중 외부 통신 0).

학내망 원칙: 학교 배포 웹앱은 개인정보 수집·저장·전송 없음(외부 CDN·API 호출 0, 단일 파일) — 학생은 학내망에서 교사 PC 서버에 접속.

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
게임 메카닉 개조 크롬 다이노의 '선인장 뛰어넘기'를 '정크푸드 피하기'로, '밤하늘'을 '건강한 몸'으로 바꿉니다. 달리기 속도가 붙으면 장애물도 빨라지는 육상 런의 재미를 그대로 살립니다. 장애물: 햄버거·탄산음료 도트 아이콘 → 보너스: 채소·과일 도트 아이콘.
교과 연계 3축 체육(점프 타이밍=신체 리듬), 보건(정크푸드 vs 신선식품 판단), 실과·정보(도트 매핑과 조건문 코딩)가 한 화면에서 만납니다. 수업 후 '우리 반 하루 영양 기록표'와 게임 점수 비교 활동.
도트 매핑 음식 아이콘은 이미지 파일 없이 숫자 배열(도트 맵)로 심습니다. 0과 1의 격자가 곧 그림이 되는 구조 — 실과·정보의 픽셀 개념 그대로입니다. 학생이 직접 12×12 도트 맵에 햄버거 모양을 그려 넣어보기.
점수 시스템 정크푸드 피하기 기본 점수 + 신선식품 먹기 보너스 점수. '먹으면 점수'라는 구조가 건강한 식습관의 긍정 강화 학습이 됩니다. 사과 +50, 브로콜리 +100 같은 영양 가치 점수 차등.
학내망 배포 대응 이미지·사운드·폰트 외부 의존성이 전혀 없는 단일 파일이라 학내망 원칙이 자동으로 지켜집니다. 도트 데이터와 사운드(Web Audio 합성)는 모두 파일 안에 완결됩니다. 교사 PC 서버에 올리면 크롬북 학생 단말이 학내망에서 접속.

2. 핵심 아키텍처 해설 — 게임 루프와 도트 매핑

① 게임 루프: 캔버스가 숨쉬는 60분의 1초

function gameLoop() {
  requestAnimationFrame(gameLoop);
  update();   // 좌표·충돌·점수 계산
  draw();     // 캔버스에 다시 그리기
}

게임의 심장은 '반복 실행되는 루프'입니다. 매 순간 장애물을 옆으로 옮기고, 충돌했는지 묻고, 화면을 다시 그리는 이 구조는 게임 웹앱의 표준 무대입니다.

② 도트 매핑: 숫자가 그림이 되는 순간

const BURGER_MAP = [
  "000111110000",
  "011111111110",
  "111111111111",
  "011011011011",
  "000111110000",
  "004444444400",
  "033333333330"
];   // 1=빵, 3=패티, 4=치즈 — 0은 빈칸

음식 도트 아이콘은 이렇게 숫자 격자로 정의합니다. EMBED_DATA에 아이콘 맵이 심어져 있으면 외부 자원을 전혀 쓰지 않는다 — 심기 모드(데이터 임베딩)가 무엇인지는 앞의 '📖 한 줄 정의' 박스를 참고하세요.

③ 충돌 판정: 두 사각형이 겹치는가

function isCrash(runner, food) {
  return runner.x < food.x + food.w &&
         runner.x + runner.w > food.x &&
         runner.y < food.y + food.h &&
         runner.y + runner.h > food.y;
}

'충돌'은 결국 두 사각형이 겹치는가의 수학입니다. 점프 타이밍이 이 조건식을 벗어나는 게 전부 — 체육의 리듬 감각과 정보의 조건문이 여기서 만납니다.

④ 보너스 로직: 먹으면 이로운 식품 점수

if (isCrash(runner, item)) {
  score += item.value;   // 사과 +50, 브로콜리 +100
  sound("coin");         // Web Audio 합성 '똑'
}

⑤ 학내망 전략: 통신 0 완결 설계

이미지=도트 맵, 사운드=Web Audio 합성, 데이터=상수. 세 가지가 모두 파일 안에 있으니 교사 PC 서버에 파일 한 장만 올리면 학내망 수업이 완성됩니다. 학생 단말은 브라우저로 접속해 플레이 — 외부로 나가는 데이터는 0입니다.

3. 초보자를 위한 바이브 코딩 실전 사용 예시

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트' 전체를 복사해 Gemini에 붙여넣습니다.
  2. 역질문 답변 — Gemini가 던지는 질문 3가지(장애물 종류, 보너스 점수, 속도 상승)에 답하면 설계가 확정됩니다.
  3. HTML 파일 실행 — 완성 코드를 '건강런.html'로 저장 후 더블클릭. 바로 학내망 배포본입니다.

제미나이 전용 에러 제로 프롬프트

[🚨 에러 방지 기본 안전장치]
1. 결과물은 외부 라이브러리·프레임워크·웹폰트·이미지 파일 없이 단일 HTML 파일로 완성한다. 캔버스 도트 맵과 Web Audio 합성으로 모든 그래픽·사운드를 해결한다.
2. 게임 데이터(정크푸드 3종, 신선식품 3종의 도트 맵·점수·이름)는 파일 상단 EMBED_DATA 상수로 완전히 심는다(학내망 배포용 외부 호출 0 모드).
3. 사운드는 Web Audio API로 직접 합성한다: 점프 '펑', 보너스 획득 '똑', 충돌 '삑', 게임오버 효과음. 오디오 파일 사용 금지.
4. 모바일 터치 대응: 화면 탭=점프, 크롬북 스페이스바=점프, 360px 화면 가로 스크롤 금지.
5. 속도가 시간에 따라 서서히 증가하고, 장애물 간격이 일정 범위 안에서 무작위로 배치된다(너무 빠르지 않은 교실 난이도).
6. 점수 표시는 천 단위 콤마와 함께 화면 상단에, 최고 점수는 브라우저 저장 없이 세션 메모리로만 관리한다(개인정보 수집·저장 0).
7. // TODO, /* 생략 */ 같은 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 바로 만들지 말고, 아래 3가지를 먼저 나에게 질문한 뒤 내 답변으로 설계를 확정한다.
Q1. 장애물(정크푸드)은 어떤 3종으로 할까요? (햄버거·탄산음료·감자튀김 외에 우리 반에서 정한 것)
Q2. 보너스 식품의 점수 차등은 어떻게 할까요? (사과·당근·브로콜리 등 영양 가치 반영)
Q3. 주인공 러너는 어떤 모습으로 할까요? (도트로 그린 학생 실루엣 / 학급 마스코트 변형)

🎯 에디터 한줄평

'게임을 만들면 게임을 이해한다' — 그런데 이번 설계는 한 걸음 더 나아가 게임이 보건 교육의 관으로 작동합니다. 정크푸드는 피하는 장애물이고 신선식품은 먹는 보너스라는 규칙 자체가 영양 교육의 메시지입니다. 도트 매핑은 픽셀의 원리를, 게임 루프는 반복문과 조건문을, 충돌 판정은 좌표 수학을 각각 하나씩 가져옵니다. 체육 시간에 점프 리듬을 몸으로 익히고 컴퓨터실에서 그 리듬을 코드로 옮기는 융합 — 학내망 통신 0 설계까지 완벽한 교과 연계 글입니다.

📚 기술·교육 참고 링크

  • 교육과정 연계: 체육(달리기·점프 활동), 보건(영양소와 균형 잡힌 식사), 실과·정보(데이터와 표현, 절차 지향 프로그래밍)와 함께 활용
  • MDN Web Docs: Canvas API — 도트 맵을 그리는 표준 기술
  • MDN Web Docs: Web Audio API — 무설치 사운드 합성

[학급 경영] 우리 반 1인 1역 실천 경험치 클리커 - 마스코트 성장 게임으로 자치 활동 레벨업



우리 반 실천을 경험치로 만드는 2D 클리커 성장 게임 — 1인 1역 자치 보드 완전 정복

🐣 교실 청소, 인사, 배려 같은 실천이 일어날 때마다 재화(코인)가 쌓이고, 학급 마스코트가 성장하며, 우리 반 스킬트리(skill tree)가 해금되는 2D 클리커(clicker) 성장 게임입니다. 창의적 체험활동과 학급자치를 게이미피케이션(gamification)으로 재구성하는 학급 경영 도구입니다.

이름 저장 0 설계가 이번 글의 백미입니다 — '학생별 입력'을 '역할 카드'로 구현해 개인정보 수집·저장 0을 지키고, 누적 경험치는 파일 상단 상수를 하루 한 번 갱신하는 심기 모드(데이터 임베딩) 루틴으로 유지합니다. 전자칠판에 상시 구동하기 좋은 단일 파일입니다.

📖 한 줄 정의

심기 모드(데이터 임베딩): API 데이터를 미리 받아 HTML 파일 안 상수로 박아두는 방식(앱 실행 중 외부 통신 0).

학내망 원칙: 학교 배포 웹앱은 개인정보 수집·저장·전송 없음(외부 CDN·API 호출 0, 단일 파일) — 학생은 학내망에서 교사 PC 서버에 접속.

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
운영 시나리오 전자칠판에 상시 구동합니다. 아침 자율 시간에 어제(오늘 아침 어제 실천) 발표를 듣고 역할 카드에 코인을 입력하면 마스코트가 성장 연출과 함께 레벨업(level-up)합니다. 하루 1회 '실천 발표 → 코인 입력' 리듬으로 운영.
재화와 성장 실천마다 재화(이름은 우리 반 회의에서 — 뼈다귀 스타일, 별사탕, 반 딩구리 등)를 획득하고, 코인이 경험치로 누적되면 마스코트가 도트 아트로 단계별 성장합니다. 경험치 테이블(레벨별 필요 경험치) 상수 만들기.
스킬트리(skill tree) 레벨 3·5·7에 도달하면 우리 반 스킬이 해금됩니다(청소 스피드 약속, 감사 인사 레벨 2 등). 스킬은 게임 효과가 아니라 '학급 약속 업그레이드'로 설계하면 자치 활동과 딱 맞습니다. 해금 조건과 스킬 이름을 상수 배열로 관리.
이름 저장 0 설계 '학생별 입력'을 이름 대신 역할 카드(청소 대장, 인사 요정, 배려 스프린터...)로 구현합니다. 화면에 이름이 없으니 개인정보 수집·저장·전송 0 원칙을 그대로 통과하고, 역할 카드의 주인은 아날로그 담당표로 약속합니다. 역할 카드 12장을 EMBED_DATA로 심기.
누적 유지법 당일 입력은 세션 메모리(session memory)라 새로고침하면 사라집니다. 그래서 하루를 마칠 때 파일 상단 TOTAL_XP 상수에 합산 갱신(1분)을 합니다 — 데이터를 파일 안에 심는 심기 모드 갱신 루틴입니다. 퇴근 전 TOTAL_XP 갱신 → 내일도 이어서 성장.

2. 핵심 아키텍처 해설 — 성장이 만들어지는 5개의 층

① 무대 해부: 클리커는 '누르고, 쌓이고, 자라난다'

마스코트가 화면 중앙에 있고, 코인 입력마다 재화 이펙트가 튀어오르며 진행바가 차오르는 클리커 무대입니다. 게임 루프(update/draw)는 런 게임 시리즈와 같은 표준 무대를 재활용합니다 — 이번에는 '달리기' 대신 '성장 연출'이 주인공입니다.

② 역할 카드 데이터: 이름 대신 역할로

const ROLE_CARDS = [
  { role: "청소 대장", icon: "broom", coins: 3 },
  { role: "인사 요정", icon: "smile", coins: 2 },
  { role: "배려 스프린터", icon: "heart", coins: 2 }
];
// role·icon·coins만 — 이름 칸은 애초에 만들지 않는다

③ 경험치와 레벨업 공식

const TOTAL_XP = 480;   // ← 하루 끝에 합산 갱신하는 심기 상수

function levelFor(xp) {
  let level = 1, need = 50;
  while (xp >= need) {
    xp -= need;
    level += 1;
    need = 50 * level;
  }
  return { level: level, into: xp, need: need };
}

④ 스킬트리 해금

const SKILLS = [
  { at: 3, name: "청소 스피드", desc: "청소 시간 5분 단축 약속" },
  { at: 5, name: "감사 인사 레벨 2", desc: "월요일 감사 발표 추가" },
  { at: 7, name: "반 도서관 개장", desc: "도서 대출 규칙 개정" }
];

const unlocked = SKILLS.filter(function (s) { return level >= s.at; });

⑤ 오늘의 입력과 성장 연출

let todayCoins = 0;

function addCoins(roleIndex) {
  todayCoins += ROLE_CARDS[roleIndex].coins;
  drawProgress(levelFor(TOTAL_XP + todayCoins));
  sound("coin");   // Web Audio — 코인 획득음
}

역할 카드 클릭 → 코인 획득 이펙트 → 진행바 갱신 → 레벨업 순간 Web Audio '팡파르'와 도트 성장 애니메이션. 하루 리듬(아침 입력 → 퇴근 전 TOTAL_XP 갱신)은 앞선 연재의 심기 모드 갱신 루틴(노벨상 10월 갱신, 발사 일정 아침 갱신)과 같은 원리입니다.

3. 초보자를 위한 바이브 코딩 실전 사용 예시

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트' 전체를 복사해 Gemini에 붙여넣습니다.
  2. 역질문 답변 — Gemini가 던지는 질문 3가지(마스코트 컨셉, 역할 카드 구성, 스킬 효과)에 답하면 우리 반 전용 보드가 됩니다.
  3. HTML 파일 실행 — 완성 코드를 '우리반성장.html'로 저장 후 전자칠판에 띄웁니다. 상시 구동이면 아침마다 성장 보드가 열립니다.

제미나이 전용 에러 제로 프롬프트

[🚨 에러 방지 기본 안전장치]
1. 결과물은 외부 라이브러리·프레임워크·웹폰트·이미지·오디오 파일 없이 단일 HTML 파일로 완성한다.
2. 학급 마스코트는 도트 맵(0과 1의 배열)으로 직접 그리고, 레벨 단계별로 3가지 성장 아트를 준비한다.
3. 사운드는 Web Audio API로 직접 합성한다: 코인 '똑', 레벨업 '팡파르', 스킬 해금 '띠링'.
4. 전자칠판·태블릿 대응: 역할 카드 버튼 최소 64x64px, 뷰포트 메타 태그, 360px 화면 가로 스크롤 금지.
5. 입력 데이터는 역할(role)·아이콘(icon)·코인(coins)만 담은 ROLE_CARDS 상수로 심는다 — 학생 이름 칸은 절대 만들지 않는다(개인정보 수집·저장 0).
6. 누적 경험치는 파일 상단 TOTAL_XP 상수로 관리하고, 진행바와 레벨 표시는 levelFor(TOTAL_XP + todayCoins) 결과로 그린다.
7. 레벨 3·5·7마다 SKILLS 배열의 스킬트리를 해금 화면과 함께 보여준다.
8. // TODO, /* 생략 */ 같은 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 바로 만들지 말고, 아래 3가지를 먼저 나에게 질문한 뒤 내 답변으로 설계를 확정한다.
Q1. 학급 마스코트 컨셉은 무엇으로 할까? (학교 상징 동물 / 학생들이 만든 캐릭터 / 반 이름 캐릭터)
Q2. 역할 카드는 어떤 것들로 구성할까? (청소·인사·배려 외에 우리 반만의 역할 추가)
Q3. 스킬트리 효과는 어떻게 정할까? (학급 약속 업그레이드 / 자치 활동 보상 / 둘 다)

🎯 에디터 한줄평

'규칙 준수시켜 주기'가 아니라 '우리가 함께 성장하게 만들기' — 이 설계의 진짜 힘은 이름 없는 역할 카드에 있습니다. 개인정보를 다루지 않으면서도 '누가 얼마나 실천했는지'는 역할별 코인으로 충분히 보이고, 마스코트 성장은 개인 경쟁이 아닌 '우리 반 공동 성장'이라는 자치의 본질이 됩니다. 하루 1분의 TOTAL_XP 갱신 루틴은 지속 가능한 교사 운영 설계의 좋은 예입니다. 레벨업 연출 한번에 반 전체가 웃는다면, 그 학급은 이미 자치가 작동하고 있는 것입니다.

📚 기술·교육 참고 링크

  • MDN Canvas API : 도트 마스코트와 성장 연출의 기초
  • MDN Web Audio API : 코인·팡파르 사운드 무설치 합성
  • 교육과정 연계: 창의적 체험활동·학급자치(역할 분담), 수학(통계·비율·경험치 계산)과 함께 활용
  • 활용 팁: 학급 회의 시간에 '재화 이름·스킬 이름 짓기'를 진행하면 게임이 학급 문화로 완성됩니다