2026년 9월 6일 일요일

[창체·자치] 새 학기 모둠 협동 성향 진단 - 리더·아이디어·조율·실천 4대 유형 학습 MBTI



너는 어떤 스타일이야? — '새 학기 학급 친구 관계 & 협동 학습 성향(학습 MBTI) 진단기'

🤝 초등 3월 신학기 기초 조사 주간 — 모둠 활동을 시작하기 전, 학생들이 12문항의 가벼운 질문을 통해 자신의 협동 학습 성향(리더형, 아이디어형, 조율형, 실천형)을 스스로 진단합니다. 담임교사는 이 결과를 바탕으로 편중되지 않고 조화로운 모둠 편성과 1인 1역 배정을 1초 만에 완료합니다.

📖 한 줄 정의

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

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

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
4대 협동 학습 성향 분류 진행을 이끄는 '리더', 참신한 '아이디어', 분위기를 다독이는 '조율', 묵묵히 완성하는 '실천' 4가지 카드로 분류됩니다. 각 유형별 귀여운 동물 캐릭터 일러스트와 강점 문구가 결과 카드에 출력됩니다.
조화로운 모둠 자동 믹싱 한 모둠에 리더만 몰리거나 아이디어형만 모이지 않도록 4대 유형이 골고루 1명씩 섞이는 균형 모둠표를 생성합니다. 모둠 번호 클릭 시 유형별 밸런스 레이더 차트가 시각화됩니다.
학생 개인정보 0 안전망 이름 칸 없이 번호와 닉네임만으로 진단하며 결과는 로컬 세션 메모리로 유지되어 외부 전송이 없습니다. 진단 결과는 인쇄용 결과표(@media print)나 로컬 CSV 다운로드로만 보관.

2. 핵심 아키텍처 해설

① 진단 문항 및 가중치 상수: QUESTIONS

const QUESTIONS = [
  {
    q: "모둠 과제를 시작할 때 나는 주로 어떤 역할을 맡나요?",
    answers: [
      { text: "역할을 나누고 전체 일정을 챙겨요.", type: "leader" },
      { text: "새롭고 재미있는 아이디어를 쏟아내요.", type: "idea" },
      { text: "친구들의 의견 차이를 조율하고 응원해요.", type: "mediator" },
      { text: "결정된 내용을 묵묵하고 꼼꼼하게 만들어요.", type: "maker" }
    ]
  }
];

12문항의 선택지마다 4대 유형(leader, idea, mediator, maker)의 카운트가 1씩 누적되는 직관적인 가중치 연산 구조입니다.

② 균형 모둠 배정 알고리즘

function mixBalancedGroups(students, groupCount) {
  const groups = Array.from({ length: groupCount }, () => []);
  const types = ["leader", "idea", "mediator", "maker"];
  types.forEach((t) => {
    const pool = students.filter(s => s.type === t);
    pool.forEach((s, idx) => {
      groups[idx % groupCount].push(s);
    });
  });
  return groups;
}

유형별로 분류된 학생들을 라운드 로빈(Round-Robin) 방식으로 각 모둠에 순차 배분하여 성향 편중을 원천 차단합니다.

③ 세션 메모리 & CSV 내보내기

진단 완료된 학생들의 결과는 브라우저 메모리에만 임시 적재되며, 교사가 '모둠 편성표 CSV 내려받기'를 누르면 로컬 파일로 저장되어 나이스나 학급 일지에 안전하게 부착할 수 있습니다.

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

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트'를 복사합니다.
  2. 역질문 답변 — 제미나이가 묻는 학급 인원수(20~25명)와 모둠 수(4~6모둠)에 답합니다.
  3. HTML 파일 실행 — 메모장에 붙여넣고 학습MBTI.html로 저장하여 태블릿에 띄웁니다.

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

[🚨 에러 방지 기본 안전장치]
1. 단일 HTML 파일 완결성: 외부 라이브러리(CDN), 서버 통신 없이 순수 바닐라 HTML/CSS/JS로 완성한다.
2. 4대 성향 진단 로직: 12개 4지선다 문항 응답에 따라 리더형, 아이디어형, 조율형, 실천형 중 최다 득점 유형을 결과 카드로 도출한다.
3. 균형 모둠 자동 편성기: 학생 번호별 진단 결과를 바탕으로 4대 유형이 골고루 섞이는 N개 모둠 테이블을 1초 만에 렌더링한다.
4. 학생 개인정보 0: 학생 실명 대신 '번호 + 닉네임'만 취급하며, 서버 전송 없이 브라우저 세션 메모리로만 관리한다.
5. @media print 지원: 모둠 편성 결과표를 A4 가로 1장으로 깔끔하게 인쇄할 수 있도록 인쇄 스타일을 내장한다.
6. // TODO, /* 생략 */ 등의 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 즉시 작성하지 말고, 아래 3가지 질문을 먼저 나에게 질문한 뒤 내 답변으로 설계를 확정한다.
Q1. 학급 총 학생 수는 몇 명인가요? (기본값: 24명)
Q2. 편성할 모둠 수는 몇 개로 나눌까요? (기본값: 6모둠, 모둠당 4명)
Q3. 결과 카드의 캐릭터 테마를 숲속 동물(사자·돌고래·코알라·개미)과 탐험대 중 어느 것으로 할까요?

🎯 에디터 한줄평

"모둠 활동에서 일어나는 갈등의 90%는 실력의 차이가 아니라 '서로의 일하는 방식'이 다르기 때문입니다. 내가 아이디어를 낼 때 친구가 묵묵히 자료를 만들어주는 파트너라는 사실을 유형 카드로 확인하는 순간, 모둠은 경쟁의 공간이 아니라 상호 보완의 작은 사회가 됩니다."

📚 기술·교육 참고 링크

  • 협동학습 성향 진단 이론 및 라운드 로빈 모둠 편성 알고리즘
  • 교육과정 연계: 초등 창체(자율활동, 학급자치, 진로 탐색), 도덕(존중과 배려)

[교원연수·행정] 교원 디지털·AI 역량 자가진단 - 수준별 맞춤 연수 추천 & 로드맵 PDF



내게 딱 맞는 연수는 무엇일까? — '교원 디지털·AI 역량 자가진단 및 맞춤 연수 추천 시스템'

💻 교원 자율연수 및 디지털 리터러시 기획 — 교사가 AI 도구 활용 경험과 행정 자동화 요구사항을 체크하면, 기초·중급·심화 3단계 디지털 역량 지표를 도출하고 교육청 추천 연수 코스를 1초 만에 매칭합니다. 맞춤형 연수 로드맵을 A4 규격 PDF로 즉시 인쇄하여 교원 개별 전문성 개발을 지원합니다.

📖 한 줄 정의

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

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

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
10개 문항 다면 자가진단 생성형 AI 프롬프팅, 디지털 학급경영, 에듀테크 도구 활용 3개 영역을 5점 척도로 빠르고 정확하게 진단합니다. 총점과 영역별 점수를 바탕으로 내 역량 수준(기초·중급·심화)을 판정.
연수 코스 자동 매칭 취약 영역을 분석하여 중앙교육연수원 및 교육청 추천 강좌(단원, 시간, 링크)를 맞춤형으로 큐레이션합니다. '프롬프트 기초'부터 '바이브 코딩 행정 자동화'까지 맞춤 코스 안내.
A4 연수 로드맵 PDF 발급 진단 결과와 추천 코스가 담긴 1페이지 연수 계획서를 브라우저 기본 인쇄창(@media print)에서 PDF로 즉시 저장합니다. 교원 자율연수 계획서 제출 시 증빙 서류로 원클릭 활용.

2. 핵심 아키텍처 해설

① 역량 진단 문항 및 연수 DB: RUBRIC 상수

const COURSES = {
  basic: [
    { title: "생성형 AI 기본 프롬프팅과 수업 활용", hours: 15, tag: "기초" },
    { title: "에듀테크 도구로 여는 스마트 학급경영", hours: 15, tag: "기초" }
  ],
  intermediate: [
    { title: "바이브 코딩으로 만드는 단일 HTML 교구 제작", hours: 30, tag: "중급" },
    { title: "공공데이터 API 연동 실생활 데이터 수업", hours: 15, tag: "중급" }
  ],
  advanced: [
    { title: "교무 행정 자동화 및 로컬 LLM 구축 실무", hours: 30, tag: "심화" }
  ]
};

진단 점수대별 맞춤 연수 과정 목록을 파일 상단에 심어두어 외부 서버 조회 없이 브라우저에서 1초 만에 매칭됩니다.

② 수준 판정 및 취약 영역 분석

function evaluateSkill(scores) {
  const total = Object.values(scores).reduce((a, b) => a + b, 0);
  if (total >= 40) return { level: "심화", list: COURSES.advanced };
  if (total >= 25) return { level: "중급", list: COURSES.intermediate };
  return { level: "기초", list: COURSES.basic };
}

총점에 따라 수준을 나누고 해당 수준에 최적화된 연수 트랙을 화면에 렌더링합니다.

③ @media print 서식 내장

결과 화면 하단의 '연수 계획서 PDF 다운로드'를 누르면 브라우저 인쇄 모드가 호출되며, 헤더·네비게이션은 숨겨지고 A4 1장 규격의 깔끔한 연수 로드맵 보고서만 출력됩니다.

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

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트'를 복사합니다.
  2. 역질문 답변 — 제미나이가 묻는 진단 영역(수업/행정/보안)에 답합니다.
  3. HTML 파일 실행 — 메모장에 붙여넣고 교원역량진단.html로 저장하여 자율연수에 활용합니다.

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

[🚨 에러 방지 기본 안전장치]
1. 단일 HTML 파일 완결성: 외부 라이브러리, 백엔드 서버 없이 바닐라 HTML/CSS/JS로 완성한다.
2. 역량 자가진단 로직: 10개 5점 척도 문항을 제시하고, 합산 점수에 따라 기초(25점 미만), 중급(25~39점), 심화(40점 이상) 코스를 자동 매칭한다.
3. @media print 연수 로드맵 서식: 인쇄 시 헤더와 입력 버튼은 숨기고, A4 가로/세로 규격의 깔끔한 '디지털 역량 자율연수 계획서' 양식으로 출력한다.
4. 개인정보 보호: 교원 성명은 화면에만 임시 표시되며 로컬 파일이나 외부 서버로 저장되지 않는다(세션 휘발).
5. // TODO, /* 생략 */ 등의 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 즉시 작성하지 말고, 아래 3가지를 먼저 나에게 질문한 뒤 내 답변으로 설계를 확정한다.
Q1. 진단 문항을 수업 활용, 행정 자동화, 정보 보안 3개 영역으로 균등 배분할까요?
Q2. 추천 연수 코스에 연수원 이수 시간(15시간/30시간)도 함께 표기할까요?
Q3. 디자인 테마를 단정한 연수원 블루와 친근한 에듀테크 그린 중 어느 것으로 할까요?

🎯 에디터 한줄평

"모든 교사가 인공지능 개발자가 될 필요는 없습니다. 중요한 것은 '지금 내 수업과 행정에 필요한 기술의 층위가 어디인가'를 아는 것입니다. 3분간의 자가진단과 맞춤 연수 매칭은 무분별한 연수 쇼핑을 끝내고 실질적인 성장의 출발점을 짚어줍니다."

📚 기술·교육 참고 링크

  • 교육부 교원 정보화 역량 표준 프레임워크 및 중앙교육연수원 AI 연수 과정
  • 교육과정 연계: 교원 전문성 개발, 학교 자율연수 기획, 교무행정 지원

[창체·자치] 바른 생활 미션 클리어 - 모둠 협동 보물섬 항해 어드벤처 게임



지도 한 장, 보물섬 하나! — '우리 반 바른 생활 미션 클리어 학급 어드벤처 게임'

🗺️ 초등 창체·학급자치 — 인사 잘하기, 급식 잔반 제로, 고운 말 쓰기 같은 우리 반 자치 룰을 게임 속 스테이지 퀘스트로 녹여냅니다. 아침 종례마다 실천한 미션을 클리어하면 학급 캐릭터가 푸른 항구를 떠나 항해하고, 1주일 동안 모든 스테이지를 통과하면 보물섬에 입항하는 협동형 게이미피케이션 경영 보드입니다.

📖 한 줄 정의

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

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

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
자치 룰을 스테이지 퀘스트로 "인사 잘하기"는 항만 이탈, "잔반 제로"는 식량 마련, "고운 말 쓰기"는 정글 위험 회피 등 자치 규칙을 해적 모험 퀘스트로 스토리텔링합니다. 아침 종례 시 모둠 대표가 어제 실천 현황을 체크하면 캐릭터가 다음 섬으로 이동.
Canvas 섬 항해 애니메이션 무료 이미지 파일 없이 순수 HTML5 Canvas와 SVG로 파도, 나무, 보물섬을 도트 아트 스타일로 직접 그립니다. 5개 스테이지(파도 타기 → 미스터리 섬 → 위험 숲 → 폭풍 해왕 → 보물섬) 순차 해금.
LocalStorage 주간 진도 보존 브라우저 로컬 저장소에 이번 주 미션 진도를 저장해, 다시 켜도 항해가 중단된 지점부터 이어집니다. 월요일 아침 미션 리셋 버튼으로 1주 단위 사이클 운영.

2. 핵심 아키텍처 해설

① 스테이지 퀘스트 상수: STAGES

const STAGES = [
  { name: "서핑 시작", quest: "인사 잘하기", desc: "아침 인사 100% 달성 시 통과" },
  { name: "미스터리 섬", quest: "고운 말 쓰기", desc: "고운 말 실천 3일 연속 통과" },
  { name: "위험한 숲", quest: "급식 잔반 제로", desc: "모둠 잔반 평균 80% 이상 줄이기" },
  { name: "폭풍의 바다", quest: "교실 청소 지킴", desc: "주간 청소 평점 5점 달성" },
  { name: "보물섬 도착!", quest: "전체 미션 완료", desc: "금요일 축하 팡파르 & 나무 심기" }
];

우리 반 자치 룰이 담긴 퀘스트 문자열을 수정만 하면 어떤 반에든 바로 활용할 수 있습니다.

② Canvas 항해 진도 렌더링

function drawSailing(stageIdx) {
  const ctx = document.getElementById("ocean").getContext("2d");
  // 바다 파도, 섬 배경, 캐릭터 배 그리기
  const x = 80 + stageIdx * 150; // 섬 사이 이동 거리
  drawBoat(ctx, x, waveY);
  drawIsland(ctx, stageIdx);
}

완성된 스테이지는 색상으로 채워지고, 현재 진행 중인 라운드는 배 모양 캐릭터가 파도를 가르는 애니메이션으로 표현됩니다.

③ 성공 팡파르 사운드 합성

function playVictory() {
  const ctx = new AudioContext();
  const o = ctx.createOscillator();
  o.type = "sine";
  o.frequency.setValueAtTime(880, ctx.currentTime);
  o.frequency.exponentialRampToValueAtTime(1760, ctx.currentTime + 0.4);
  o.connect(ctx.destination);
  o.start(); o.stop(ctx.currentTime + 0.6);
}

각 섬 도착 시 높은 음부터 두 배율로 슬라이드되는 Web Audio API 팡파르를 합성하여 학생들의 성취감을 극대화합니다.

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

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트'를 복사합니다.
  2. 역질문 답변 — 제미나이가 묻는 모둠 수(4~6)와 스테이지 퀘스트 규칙에 답합니다.
  3. HTML 파일 실행 — 메모장에 붙여넣고 보물섬게임.html로 저장하여 전자칠판에 상시 구동합니다.

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

[🚨 에러 방지 기본 안전장치]
1. 단일 HTML 파일 완결성: 외부 라이브러리, 이미지 파일(CDN) 없이 순수 HTML5 Canvas와 SVG 도트 그리기로 만든다.
2. 5단계 스테이지 퀘스트: 우리 반 자치 룰을 스테이지별 퀘스트로 매핑하고 완료 시 캐릭터가 다음 섬으로 이동한다.
3. LocalStorage 진도 저장: 브라우저 로컬 저장소에 현재 스테이지 번호를 저장하여 다시 켜도 진행 상태가 유지되도록 한다.
4. Web Audio 팡파르: 각 섬 도착 시 상행 사운드 슬라이드(880Hz → 1760Hz)를 합성한다.
5. 학생 개인정보 0: 학생 실명 대신 모둠명(1팀~6팀)만 표시한다.
6. // TODO, /* 생략 */ 등의 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 즉시 작성하지 말고, 아래 3가지를 먼저 나에게 질문한 뒤 내 답변으로 설계를 확정한다.
Q1. 스테이지 수를 5개(1주 단위)로 할까요, 10개(2주 단위)로 늘릴까요?
Q2. 항해 캐릭터를 돛단배, 우주선, 유령해적 중 무엇으로 할까요?
Q3. 바다 색상은 딥 오션 블루와 라이트 스카이 티어 중 어느 것으로 할까요?

🎯 에디터 한줄평

"'잘하면 별점 1점', '안 하면 훈계 1번'보다 '우리 배가 보물섬에 닿는다'라는 거창한 목표가 훨씬 강력합니다. 이주일간 협동해서 급식 잔반 제로를 이루고 보물섬을 닿아내는 아이들 얼굴에서 발견되는 것은 숙제에 대한 부담이 아니라, 우리 반이라는 항구를 지키고자 하는 주인의식입니다."

📚 기술·교육 참고 링크

  • 게이미피케이션(Gamification) 이론 및 브라우저 캔버스 애니메이션 기초
  • 교육과정 연계: 초등 창체(학급자치, 바른 생활 습관 형성), 도덕(인사 및 예절)

[정보·행정] 학생 SW 창작물 자동 QA 심사기 - 코드 무결성 레이더 차트 리포트



수십 편의 학생 코드를 1초에 — 'SW 창작물 무인 심사·QA 리포트 생성기'

🤖 교내 SW·AI 축제 행사 심사 행정 — 수십 편의 학생 웹 게임과 창작 앱을 일일이 열어보고 디버깅하던 어려운 심사 시간을 끝냅니다. 학생 제출물의 코드 완결성, 실행 성공률, 접근성, 창의성 4대 지표를 10점 만점 레이더 차트로 자동 채점하고, 심사위원용 PDF 리포트를 일괄 생성합니다.

📖 한 줄 정의

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

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

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
4대 지표 자동 스코어링 학생 웹앱의 필수 기능 작동 여부, TODO 미완성 코드 유무, 이미지 대체 텍스트 존재, 창의적 표현 점수를 정량화합니다. 정적 스캐닝(코드 검사) + 런타임 체크 두 단계로 진행.
레이더 차트 자동 시각화 외부 차트 라이브러리 없이 Canvas 삼각함수로 4각형 레이더 차트를 직접 렌더링하여 학생별 강점과 약점을 한눈에 보여줍니다. 평균값을 초과하는 영역은 초록으로, 미달 영역은 주황색으로 하이라이트.
심사위원용 리포트 일괄 인쇄 팀별 순위, 총점, 개선 권장 사항이 담긴 심사표를 A4 가로 규격으로 한꺼번에 인쇄합니다. 상위 10% 우수 창작물은 별도 홍보 코너 표기 자동 지원.

2. 핵심 아키텍처 해설

① 코드 스캐닝 엔진: analyzeSubmission

function analyzeSubmission(entry) {
  const html = entry.source;
  const checks = {
    completeness: !html.includes("TODO") && !html.includes("/* 생략"),
    accessibility: html.includes("alt=") || html.includes("aria-label"),
    interactivity: html.includes("addEventListener"),
    soundDesign: html.includes("AudioContext")
  };
  return {
    completeness: checks.completeness ? 10 : 3,
    accessibility: checks.accessibility ? 10 : 5,
    interactivity: checks.interactivity ? 10 : 4,
    soundDesign: checks.soundDesign ? 10 : 5
  };
}

학생 코드의 핵심 패턴(이벤트 리스너, 사운드 합성, 접근성 라벨)을 스캐닝하여 완성도를 정량 채점합니다.

② 레이더 차트 Canvas 렌더링

function drawRadarChart(ctx, scores) {
  const sides = 4;
  const cx = 150, cy = 150, radius = 120;
  ctx.beginPath();
  for (let i = 0; i <= sides; i++) {
    const angle = (Math.PI * 2 * i) / sides - Math.PI / 2;
    const r = radius * (scores[i % sides] / 10);
    ctx.lineTo(cx + r * Math.cos(angle), cy + r * Math.sin(angle));
  }
  ctx.closePath();
  ctx.fillStyle = "rgba(74, 144, 217, 0.3)";
  ctx.fill();
  ctx.stroke();
}

4대 지표 각각의 점수 비율에 따라 반경을 조절하여 학생별 코드의 형태가 눈으로 드러나는 시각적 진단 리포트를 완성합니다.

③ 결과 일괄 CSV & PDF 출력

모든 팀의 채점 결과를 합산 CSV로 내보내 심사위원 회의용 자료로 활용할 수 있고, @media print 브라우저 인쇄를 통해 A4 1장당 팀 1개의 리포트를 자동 배치합니다.

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

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트'를 복사합니다.
  2. 역질문 답변 — 제미나이가 묻는 참가 팀 수(10~20팀)와 심사 기준 가중치에 답합니다.
  3. HTML 파일 실행 — 메모장에 붙여넣고 SW심사기.html로 저장하여 심사 시간에 활용합니다.

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

[🚨 에러 방지 기본 안전장치]
1. 단일 HTML 파일 완결성: 외부 코드 분석 라이브러리나 서버 없이, 학생 제출물(HTML 소스 텍스트)을 문자열로 읽어 정적 패턴 스캐닝 방식으로 분석한다.
2. 4대 지표 채점 로직: 코드 완결성(TODO 유무), 접근성(alt/aria 존재), 인터랙티브성(addEventListener 존재), 사운드 설계(AudioContext 존재)를 10점 만점으로 채점한다.
3. Canvas 레이더 차트: 외부 차트 라이브러리 없이 순수 Canvas 삼각함수로 4각형 레이더 차트를 직접 렌더링한다.
4. 학생 개인정보 0: 학생 실명 대신 '팀 코드(예: 3반-2팀)'만 표기한다.
5. @media print 심사표: A4 가로 규격으로 1팀당 1장의 심사 리포트를 자동 배치한다.
6. // TODO, /* 생략 */ 등의 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 즉시 작성하지 말고, 아래 3가지를 먼저 나에게 질문한 뒤 내 답변으로 설계를 확정한다.
Q1. 심사 지표 4종 외에 창의성(주제 선정의 독창성) 항목을 수동 별점으로 추가할까요?
Q2. 레이더 차트 색상을 학생 팀별로 자동 랜덤 배정할까요?
Q3. 심사 리포트에 '코드 개선 권장 사항' 문구를 자동 생성할까요?

🎯 에디터 한줄평

"선생님의 눈과 귀를 10팀 분량만큼 증폭시키는 도구입니다. 물론 최종 감상과 응원의 박수는 사람의 몫이지만, '기능상 누락이 있어 실행이 안 되는 학생 웹앱'을 빠짐없이 걸러내는 기술적 통로가 있다면 아이들의 자존감까지 지켜주는 객관적 심사 보험 역할을 할 수 있습니다."

📚 기술·교육 참고 링크

  • 소프트웨어 품질 지표(QA Scorecard) 개념 및 웹 접근성 지침
  • 교육과정 연계: 초등 실과(SW 창작과 오류 수정), 정보 행정, 학교 축제·창의융합 행사

[창체·자치] 실시간 다모임 안건 즉석 찬반 보드 - 원형 그래프 1초 만에



안건 상정하자마자 바로 찬반! — '실시간 학급 다모임 즉석 투표 보드'

🗳️ 초등 학급 다모임·창체 — 학급 자치 회의에서 안건이 상정되면, 태블릿과 전자칠판만으로 학생 전원이 1초 만에 익명 찬반 투표하고 즉시 원형 그래프(도넛 차트)가 애니메이션으로 열리는 디지털 민주주의 플랫폼입니다. 외부 투표 사이트 가입이나 복잡한 QR 로그인 절차가 전혀 없습니다.

📖 한 줄 정의

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

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

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
실시간 도넛 차트 애니메이션 찬성표가 늘어나면 초록 부채꼴이 부드럽게 늘어나고, 반대표는 분홍 부채꼴이 채워집니다. 투표율 50% 초과 시 자동으로 '과반수 통과' 판정 및 소리 효과.
익명 투표와 보안 누가 찬성했는지 표시되지 않는 완전 익명 설계 — 손을 들어 투표할 때의 부담감을 없애 학생들이 정직하게 참여합니다. 한 기기당 1회 투표만 허용(중복 방지 로직 내장).
안건 이력 자동 저장 투표가 끝난 안건은 제목과 결과가 자동으로 저장되어 학급 회의록 작성에 그대로 활용됩니다. CSV 다운로드 및 @media print 투표 결과 요약지 출력.

2. 핵심 아키텍처 해설

① 도넛 차트 Canvas 렌더링

function drawDonut(ctx, yes, no) {
  const total = yes + no;
  if (total === 0) return;
  const ratio = yes / total;
  const cx = 150, cy = 150, r = 100;
  ctx.beginPath();
  ctx.arc(cx, cy, r, -Math.PI / 2, -Math.PI / 2 + ratio * Math.PI * 2);
  ctx.lineTo(cx, cy);
  ctx.fillStyle = "#4CAF50";
  ctx.fill();
  ctx.beginPath();
  ctx.arc(cx, cy, r, -Math.PI / 2 + ratio * Math.PI * 2, -Math.PI / 2 + Math.PI * 2);
  ctx.lineTo(cx, cy);
  ctx.fillStyle = "#E91E63";
  ctx.fill();
}

찬성(초록)과 반대(분홍)의 비율에 맞춰 부채꼴 각도를 계산하고, 중앙을 뚫어놓아 도넛 형태로 시각화합니다.

② 과반수 통과 판정 및 피드백

function checkMajority(yes, no, quorum) {
  const total = yes + no;
  if (total < quorum) return { passed: false, msg: "투표율이 부족합니다" };
  if (yes / total > 0.5) return { passed: true, msg: "✅ 안건 통과!" };
  return { passed: false, msg: "❌ 부결 — 다시 논의해봐요" };
}

정족수(참여 인원 절반 이상)을 충족했는지 먼저 확인하고, 과반수 찬성 여부를 자동 판정하여 화면에 명확한 결과를 제시합니다.

③ 세션 투표 기록 & 안건 저장

투표 완료 시 안건 제목과 찬성/반대 수가 세션 메모리에 누적되며, '회의록 내려받기' 버튼으로 오늘의 자치 회의 안건 처리 결과를 텍스트(CSV) 형태로 보존합니다.

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

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트'를 복사합니다.
  2. 역질문 답변 — 제미나이가 묻는 학급 인원수(20~25명)와 투표 버튼 크기에 답합니다.
  3. HTML 파일 실행 — 메모장에 붙여넣고 다모임투표.html로 저장하여 전자칠판에 띄웁니다.

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

[🚨 에러 방지 기본 안전장치]
1. 단일 HTML 파일 완결성: 외부 라이브러리, 실시간 WebSocket 서버, QR 접속 플랫폼 없이 순수 바닐라 HTML/CSS/JS로 완성한다.
2. 실시간 도넛 차트: 찬성(초록)과 반대(분홍) 비율을 부채꼴 각도로 나누어 Canvas 도넛 차트를 그린다.
3. 익명 및 중복 방지: 기기별 세션 토큰을 부여하여 한 대당 1회 투표만 가능하도록 한다(로그인 불필요).
4. 정족수 및 과반수 판정: 총 참여자 수 대비 참석률 50% 이상인지 먼저 확인하고, 찬성률이 절반을 넘으면 자동으로 '안건 통과' 안내를 출력한다.
5. 학생 개인정보 0: 학생 이름·번호 표시 없이 총 투표 수만 그래프에 반영한다.
6. // TODO, /* 생략 */ 등의 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 즉시 작성하지 말고, 아래 3가지를 먼저 나에게 질문한 뒤 내 답변으로 설계를 확정한다.
Q1. 찬성과 반대 외에 '기권(회색)' 버튼도 추가할까요?
Q2. 도넛 차트 색상을 초록/분홍 조합으로 할까요, 청록/주황 조합으로 할까요?
Q3. 투표 완료 후 결과 요약지를 인쇄용 A4 서식으로 출력할까요?

🎯 에디터 한줄평

"민주주의는 누가 찬성했는지 알아보는 게 아니라, 모두의 의견이 균등하게 하나의 숫자로 모이는 것에서 시작합니다. 익명 보드는 손을 들기 부끄러워하는 아이들에게도 정당한 발�权을 부여하며, 종이 쪽지를 세는 선생님의 손가락을 뇌에서 연산 루프로 대체합니다."

📚 기술·교육 참고 링크

  • 실시간 투표 및 디지털 민주주의 교육 이론
  • 교육과정 연계: 초등 사회(민주적 의사 결정 절차), 도덕(정당한 의사 표현과 존중), 창체(학급자치)

[국어·도덕] 한 학기 한 권 독서 마라톤 - 완독 D-Day 예측 트래커



나의 완독 D-Day는 언제일까? — '한 학기 한 권 독서 마라톤 & 완독 예측 트래커'

📚 초등 3~6학년 국어 '한 학기 한 권 읽기' 단원 — 아침 독서 시간마다 읽은 페이지 수를 입력하면, 내 독서 속도를 분석해 목표 책의 완독 예상 날짜(D-Day)를 자동 계산하고 학급 독서 마라톤 뱃지를 수여하는 수업 프로젝트입니다. 수기 독서 기록장의 번거로움 없이 지속적인 독서 동기를 부여합니다.

📖 한 줄 정의

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

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

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
완독 D-Day 자동 계산 총 페이지 수 ÷ 최근 7일 평균 읽은 페이지 수로 내 완독 예상 날짜를 매일 자동 갱신합니다. "목표 도착: 10월 28일 (D-45)" 타이머가 화면에 크게 표시됩니다.
독서 진도 시각화 마라톤 코스에 사각형 블록(페이지)이 하나씩 채워지는 진행률 그래프와 현재 위치 표시. 읽은 페이지 수 누적에 따라 색상이 변하는 마라톤 코스 트랙.
학급 뱃지 시스템 매주 50페이지 이상 읽으면 브론즈, 100페이지 이상이면 실버, 200페이지 이상이면 골드 뱃지를 획득합니다. '오늘 한 문장' 인상 깊은 구절 입력으로 인사이트 카드가 자동 생성.

2. 핵심 아키텍처 해설

① 독서 속도 분석 알고리즘

function calculateDDay(entries, totalPages) {
  if (entries.length === 0) return { dday: "-", days: 0 };
  const recent = entries.slice(-7);
  const pagesRead = recent.reduce((sum, e) => sum + Number(e.pages), 0);
  const avgPerDay = pagesRead / recent.length;
  const remaining = totalPages - entries.reduce((s, e) => s + Number(e.pages), 0);
  const daysLeft = Math.ceil(remaining / avg);
  return { dday: "D-" + daysLeft, days: daysLeft, avg: avg };
}

최근 7일간의 평균 독서 속도를 바탕으로 남은 페이지 수를 나누어 완독 예상 날짜를 동적으로 계산합니다.

② Canvas 독서 마라톤 트랙 시각화

function drawTrack(ctx, totalPages, readPages) {
  const blockW = 5;
  const filled = Math.floor((readPages / totalPages) * 200);
  for (let i = 0; i < 200; i++) {
    const x = 20 + i * 6;
    ctx.fillStyle = i < filled ? "#FF9800" : "#E0E0E0";
    ctx.fillRect(x, 100, 5, 40);
  }
  // 현재 위치 마커: 작은 달리기 아이콘
  const runnerX = 20 + filled * 6;
  ctx.fillText("🏃", runnerX, 150);
}

책 페이지 수를 200개의 트랙 블록으로 환산하고, 읽은 만큼 오렌지색으로 채워나가는 마라톤 코스 애니메이션을 제공합니다.

③ 인상 깊은 한 줄 서평 카드

오늘 읽은 구절 중 가장 마음에 와닿는 한 줄을 입력하면 배경색이 자동으로 변하는 '나만의 문장 카드'가 생성됩니다. 학기말 모으면 나만의 독서 감상 콜라주가 됩니다.

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

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트'를 복사합니다.
  2. 역질문 답변 — 제미나이가 묻는 목표 페이지 수(300~500p)와 진도 트랙 색상에 답합니다.
  3. HTML 파일 실행 — 메모장에 붙여넣고 독서마라톤.html로 저장하여 아침 독서 시간에 활용합니다.

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

[🚨 에러 방지 기본 안전장치]
1. 단일 HTML 파일 완결성: 외부 라이브러리, 서버 통신 없이 순수 바닐라 HTML/CSS/JS로 완성한다.
2. 완독 D-Day 예측: 최근 7일간의 일일 독서 페이지 수 평균을 계산하여 남은 페이지로 나누어 목표 완독일을 도출한다.
3. Canvas 마라톤 트랙: 읽은 페이지 비율에 따라 트랙 블록이 채워지는 시각적 진행률 막대를 Canvas로 그린다.
4. 로컬 기록 보관: 학생 번호와 닉네임만 사용하며, 데이터는 브라우저 localStorage에 안전하게 저장한다.
5. 학생 개인정보 0: 이름 이외에 연락처, 주소 등 민감 정보는 일절 취급하지 않는다.
6. // TODO, /* 생략 */ 등의 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 즉시 작성하지 말고, 아래 3가지를 먼저 나에게 질문한 뒤 내 답변으로 설계를 확정한다.
Q1. 목표 책의 총 페이지 수는 대략 몇 페이지 정도인가요? (기본값: 400p)
Q2. 학기말 보상 뱃지 기준을 주간 50p로 설정할까요?
Q3. 진행률 트랙 색상을 트랙 토너먼트(주황) 계열로 할까요, 스카이 블루 계열로 할까요?

🎯 에디터 한줄평

"완독이란 막연한 다짐이 아니라 수학적인 예측입니다. 내가 하루 평균 12.5쪽을 읽는다는 사실을 알고, 남은 300쪽을 계산해보면 'D-24'라는 날짜가 생깁니다. 막연한 다짐이 구체적인 목표로 바뀌는 순간, 아이들은 자기 속도를 이해하고 스스로 다독 계획을 세우게 됩니다."

📚 기술·교육 참고 링크

  • 독서 습관 형성 이론(독서 완독률 예측), 진도율 및 성취 추적 알고리즘
  • 교육과정 연계: 초등 국어(한 학기 한 권 읽기, 읽기 전략), 도덕(자기주도 학습과 인내)

[창체·자치] 아침 10분 독서 챌린지 - 오늘의 명문장 카드 뉴스 롤링 게시판



아침 첫 10분이 박사의 시간이 됩니다 — '아침 독서 챌린지 & 오늘의 명문장 카드 뉴스'

📖 초등 창체·아침 자율 독서 시간 — 아침 10분간 독서 후 마음에 와닿은 구절 한 줄을 입력하면, 전자칠판에 '우리 반 오늘의 명문장' 카드 뉴스가 실시간으로 롤링(Rolling)되며 슬라이드 넘김됩니다. 차분한 아침 분위기 속에서 친구들의 생각을 자연스럽게 공유하며 공감과 배려의 학급 풍토를 조성합니다.

📖 한 줄 정의

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

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

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
명문장 카드 뉴스 롤링 학생들이 입력한 감상 문구가 우아한 배경색 카드에 담겨 전자칠판에서 자동으로 슬라이드 전환됩니다. 5초 간격 오토플레이 버튼 및 수동 이동 화살표 지원.
독서 포인트 자동 누적 아침마다 입력하면 읽은 페이지와 함께 포인트가 쌓이고 주간 기준으로 '오늘의 사색가'에게 별모양 스탬프가 표시됩니다. 과거 입력 기록은 localStorage에 보존되며 학기말 통계에 활용됩니다.
부드러운 아침 분위기 조성 차분한 파스텔 색상 배경과 부드러운 화면 전환 효과로 아침 분위기를 조성합니다. 배경 색상은 요일마다 자동으로 조합되어 신선한 느낌을 유지합니다.

2. 핵심 아키텍처 해설

① 슬라이드 전환 카드 뉴스 엔진

function renderCardNews(entries, idx) {
  const card = document.getElementById("card-news");
  card.innerHTML = `
    

${entries[idx].sentence}

${entries[idx].nick} ${entries[idx].book}
`; card.style.animation = "slideIn 0.6s ease"; }

학생들이 입력한 인상 깊은 구절과 책 제목을 슬라이드 애니메이션으로 자동 순환시킵니다. 인라인 템플릿 리터럴 문법의 백틱(`) 문자를 사용하지 않도록 주의합니다.

② 자동 롤링 setInterval 폴링

let cardIdx = 0;
setInterval(function () {
  if (entries.length === 0) return;
  cardIdx = (cardIdx + 1) % entries.length;
  renderCardNews(entries, cardIdx);
}, 5000); // 5초 간격 자동 롤링

입력이 없을 때도 빈 화면 대신 최근 명문장이 순환하는 '아침 분위기'를 유지합니다.

③ 파스텔 배경 자동 변화

const PASTELS = ["#FFF3E0", "#E3F2FD", "#E8F5E9", "#F3E5F5", "#FFEBEE"];
document.body.style.background = PASTELS[new Date().getDay() % PASTELS.length];

오늘의 요일에 따라 하늘색, 초록, 노란 계열의 파스텔 배경이 자동으로 바뀌어 아침마다 새로운 느낌을 줍니다.

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

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트'를 복사합니다.
  2. 역질문 답변 — 제미나이가 묻는 슬라이드 간격(5초/8초)과 카드 색상 테마에 답합니다.
  3. HTML 파일 실행 — 메모장에 붙여넣고 아침독서.html로 저장하여 전자칠판에 상시 고정합니다.

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

[🚨 에러 방지 기본 안전장치]
1. 단일 HTML 파일 완결성: 외부 라이브러리, 웹폰트(CDN) 없이 시스템 폰트를 활용한 가벼운 HTML/CSS/JS로 완성한다.
2. 카드 뉴스 롤링: 학생들이 입력한 인상 깊은 구절을 5초 간격으로 슬라이드 전환하며 화면 중앙에 크게 표시한다.
3. localStorage 보관: 작성된 독서 기록은 로컬 저장소에 보존되어 다시 켜도 유지된다.
4. 학생 개인정보 0: 학생 실명 대신 '닉네임'만 표기하고, 외부 서버 전송은 일절 없다.
5. @media print 지원: '오늘의 명문장' 카드 뉴스를 인쇄용 요약 화면으로 출력할 수 있도록 한다.
6. // TODO, /* 생략 */ 등의 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 즉시 작성하지 말고, 아래 3가지를 먼저 나에게 질문한 뒤 내 답변으로 설계를 확정한다.
Q1. 카드 뉴스에 표시될 문구 글자 크기를 32px로 할까요, 40px로 할까요?
Q2. 파스텔 배경 색상을 요일별로 자동 바꿀까요, 랜덤으로 바꿀까요?
Q3. 입력 화면을 별도 탭으로 분리할까요, 메인 화면 하단에 배치할까요?

🎯 에디터 한줄평

"아침에 책을 읽고 그 문장이 나를 조용히 공감하게 만들었다는 것은 이미 '마음의 어른'이 되었다는 증거입니다. 익명 입력으로 친구들의 서로 다른 시선을 모은 카드 뉴스는 언어 문해력뿐 아니라 '다른 사람의 감상을 존중하는 태도'까지 자연스럽게 훈련시킵니다."

📚 기술·교육 참고 링크

  • 창의적 글쓰기 및 한 줄 독서감상 이론
  • 교육과정 연계: 초등 국어(독서 감상문 쓰기), 창체(아침 자율 활동, 독서 교육), 도덕(존중과 공감)

[도서·행정] 도서관 다독 학급 선정 - 학급별 독서 랭킹 & 보고서 통계 대시보드



우리 학교에서 누가 제일 많이 읽었나요? — '도서관 다독 학급 선정 & 독서 이력 통계 관리기'

📊 초등 도서관·독서의 달(9월) 축제 행정 — 학년별·학급별 누적 독서 페이지 수와 월간 완독 권수를 실시간 랭킹 차트로 집계하고, 도서관 소식지용 요약 리포트를 자동 생성합니다. 도서관 담당 교사의 수기 통계 집계 부담을 90% 이상 줄이고, 학교 전체의 독서 문화를 시각화합니다.

📖 한 줄 정의

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

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

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
학급별 독서 랭킹 차트 학년 반별로 누적 페이지 수와 완독 권수를 내림차순 랭킹 목록으로 자동 정렬합니다. 1위부터 N위까지 순위가 매겨진 막대 그래프와 총 통계.
독서의 달 우수 다독자 선정 각 학급 상위 3명의 닉네임과 권수를 표시하여 우수 다독자 시상식에 그대로 활용할 수 있습니다. 학급 랭킹 클릭 시 해당 학급 학생들의 상세 통계가 드릴다운됩니다.
소식지용 요약 리포트 생성 '독서의 달 우수반 소식지 출력' 버튼을 누르면 A4 규격 요약 리포트를 @media print 서식으로 인쇄합니다. 교내 인트라넷 게시판이나 학부모 소식지에 바로 활용 가능.

2. 핵심 아키텍처 해설

① 학급 통계 데이터: BOOK_LOG 상수

const BOOK_LOG = [
  { grade: 3, class: 1, pages: 12400, books: 48, topReader: { no: 5, nick: "돌고래", books: 12 } },
  { grade: 3, class: 2, pages: 11800, books: 45, topReader: { no: 2, nick: "코알라", books: 10 } },
  { grade: 4, class: 1, pages: 14200, books: 52, topReader: { no: 8, nick: "해달", books: 15 } }
];

교사가 한 학기 동안 모은 데이터를 미리 심어두면 브라우저에서 즉시 집계되며, 학기말 갱신만으로 재사용 가능합니다.

② 랭킹 알고리즘과 렌더링

function sortRanking(logs) {
  return logs.slice().sort((a, b) => b.pages - a.pages);
}
function drawRankingBars(ctx, ranked) {
  const maxPages = ranked[0].pages;
  ranked.forEach((r, i) => {
    const barH = 40;
    const w = (r.pages / maxPages) * 500;
    ctx.fillStyle = i === 0 ? "#FFD700" : i === 1 ? "#C0C0C0" : "#CD7F32";
    ctx.fillRect(180, 40 + i * 50, w, 32);
    ctx.fillStyle = "#2d3748";
    ctx.fillText(r.grade + "학년 " + r.class + "반", 30, 65 + i * 50);
  });
}

금·은·동 메달 색상이 자동으로 부여되는 랭킹 막대 차트를 Canvas로 직접 렌더링합니다.

③ 도서관 소식지 @media print 출력

'독서 소식지 인쇄' 버튼을 누르면 브라우저 인쇄 화면이 열리며, A4 세로 규격의 깔끔한 도서관 소식지 서식이 출력됩니다.

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

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트'를 복사합니다.
  2. 역질문 답변 — 제미나이가 묻는 학년·학급 수와 상위 우수 다독자 기준에 답합니다.
  3. HTML 파일 실행 — 메모장에 붙여넣고 도서통계.html로 저장하여 도서관 행사에 활용합니다.

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

[🚨 에러 방지 기본 안전장치]
1. 단일 HTML 파일 완결성: 외부 라이브러리, 서버 통신 없이 순수 바닐라 HTML/CSS/JS로 완성한다.
2. 학급별 독서 랭킹: 누적 페이지 수와 완독 권수를 내림차순 정렬하여 금·은·동 메달 색상으로 Canvas 랭킹 차트를 렌더링한다.
3. 학생 개인정보 0: 학급명과 모둠·닉네임만 표기하며, 개인 실명은 일절 취급하지 않는다.
4. @media print 소식지: 독서의 달 우수 학급 목록 및 통계 요약을 A4 세로 규격 인쇄용 소식지로 출력한다.
5. // TODO, /* 생략 */ 등의 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 즉시 작성하지 말고, 아래 3가지를 먼저 나에게 질문한 뒤 내 답변으로 설계를 확정한다.
Q1. 학년별로 몇 개 반씩 통계에 포함할까요? (기본: 1~6학년 × 4반 = 24학급)
Q2. 우수 다독자는 학급별 상위 1명으로 선정할까요, 상위 3명으로 늘릴까요?
Q3. 랭킹 차트의 막대 색상을 오렌지 블록으로 할까요, 금은동 메달 계열로 할까요?

🎯 에디터 한줄평

"독서는 개인의 여정이지만, 학교 차원에서 누가 얼마나 읽었는지 그래프로 시각화하면 한 사람의 성취가 학교 전체의 챌린지가 됩니다. 데이터로 순위를 매기되, 모든 아이들이 각자의 속도로 진도를 나가고 있음을 동시에 확인시켜주는 것이 균형 잡힌 독서 문화 지향점입니다."

📚 기술·교육 참고 링크

  • 학교 도서관 통계 분석 및 다독 활성화 프로그램 이론
  • 교육과정 연계: 초등 국어(독서 습관 형성), 도서관 활용 교육, 학교 행정 자동화

[창체·자치] 학급 실시간 신문고 - 시설 불편 & 칭찬 건의함 대시보드



교실 벽에 신문고가 달린다 — '학급 시설 불편 사항 및 칭찬 건의함 실시간 신문고'

🔔 초등 창체·학급자치 — 교실 내 고장 난 교구, 청소 사각지대, 친구 칭찬 제보를 학생들이 태블릿으로 익명/실명(선택) 등록하면 교탁 전자칠판 대시보드에 실시간으로 접수되어 주간 학급 자치 회의 안건으로 자동 상정되는 스마트 학급 신문고입니다.

📖 한 줄 정의

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

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

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
5대 카테고리 자동 분류 '시설 고장', '청소 사각지대', '친구 칭찬', '급식 의견', '기타 제안' 5개 태그를 선택하면 자동으로 분류되어 랭킹화됩니다. 가장 많은 건의가 접수된 태그에 우선순위 배지가 표시됩니다.
익명/실명 선택 모드 익명으로 쓰면 누가 제출했는지 표시되지 않으며, 실명으로 쓰면 감사장 카드가 발급됩니다. 담임교사 비밀번호 입력 시에만 전체 목록이 열리는 이중 잠금 구조.
주간 자치 회의 안건 자동 상정 일주일 동안 접수된 건의를 좋아요 수 순으로 자동 정렬하여 다음 주 학급 회의 안건 목록을 생성합니다. @media print 회의록 서식으로 건의 처리 결과를 함께 인쇄.

2. 핵심 아키텍처 해설

① 카테고리 자동 분류 엔진

const TAGS = ["시설 고장", "청소 사각지대", "친구 칭찬", "급식 의견", "기타 제안"];
function classify(text) {
  for (const tag of TAGS) {
    if (text.includes(tag)) return tag;
  }
  if (text.includes("고장") || text.includes("부서") || text.includes("망가")) return "시설 고장";
  if (text.includes("고마") || text.includes("대단") || text.includes("감사")) return "친구 칭찬";
  return "기타 제안";
}

사용자가 태그를 직접 선택하거나, 입력 텍스트의 키워드를 자동으로 스캔하여 최적 카테고리를 분류합니다.

② 담임 전용 비밀번호 잠금 구조

let unlocked = false;
function unlockDashboard(pin) {
  if (pin === "2817") {
    unlocked = true;
    renderAll();
    return true;
  }
  sound("nope");
  return false;
}

학생이 볼 수 있는 화면에서는 건의 수만 표시되며, 담임교사가 PIN을 입력해야 세부 내용이 렌더링되는 2단계 접근 제어 구조입니다.

③ 주간 자치 회의 안건 상정 알고리즘

function meetingAgenda(items) {
  const withLikes = items.map(i => ({ ...i, likes: 0 }));
  const sorted = withLikes.sort((a, b) => b.likes - a.likes);
  return sorted.slice(0, 5); // 상위 5개 안건 자동 추출
}

일주일간 누적된 건의 중 투표(좋아요) 수가 가장 많은 상위 5개 건의를 다음 주 학급 회의 의제로 자동 상정합니다.

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

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트'를 복사합니다.
  2. 역질문 답변 — 제미나이가 묻는 학급 인원(20~25명)과 건의 카테고리 수(5개)에 답합니다.
  3. HTML 파일 실행 — 메모장에 붙여넣고 학급신문고.html로 저장하여 뒷벽 태블릿에 고정합니다.

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

[🚨 에러 방지 기본 안전장치]
1. 단일 HTML 파일 완결성: 외부 라이브러리, 서버 통신 없이 순수 바닐라 HTML/CSS/JS로 완성한다.
2. 5대 카테고리 자동 분류: 입력 텍스트의 키워드를 스캐닝하여 시설 고장·청소 사각지대·친구 칭찬·급식 의견·기타 제안으로 자동 분류한다.
3. 이중 비밀번호 잠금: 학생 화면에서는 건의 수만 표시되며, 담임교사가 PIN을 입력해야 세부 내용이 열리는 2단계 접근 제어를 내장한다.
4. 주간 안건 상정: 좋아요 수 순으로 상위 5개 건의를 다음 주 학급 회의 안건 목록으로 자동 정렬한다.
5. 학생 개인정보 0: 익명 입력이 기본이며, 실명 선택 시에도 닉네임과 번호만 사용한다.
6. // TODO, /* 생략 */ 등의 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 즉시 작성하지 말고, 아래 3가지를 먼저 나에게 질문한 뒤 내 답변으로 설계를 확정한다.
Q1. 건의사항 텍스트 글자 수 제한을 100자로 할까요, 200자로 늘릴까요?
Q2. 카테고리 배지 색상을 파스텔 5색 계열로 할까요, 강한 고채도 계열로 할까요?
Q3. 주간 회의 안건 상정 시간을 매주 금요일 방과 전으로 고정할까요?

🎯 에디터 한줄평

"아이들이 '착한 말'로 건의할 기회가 학교에서만큼은 상대적으로 부족합니다. 이 작은 신문고는 칭찬(초록)과 제안(주황)을 나란히 놓아 교실을 '고치고 싶은 공간'에서 '우리가 지키고자 하는 공간'으로 전환시킵니다. 분쟁의 조기 경보 시스템은 교사의 관찰력이 아니라, 아이들의 손끝에서 출발합니다."

📚 기술·교육 참고 링크

  • 학급자치 회의 운영 이론 및 키워드 분류 알고리즘
  • 교육과정 연계: 초등 도덕(민주적 대화와 협력), 창체(학급자치, 소통 활동)

[안전·행정] 교내 시설물 하자 보수 원클릭 접수·처리 포털 - 사진 촬영→상태 추적



타일이 부서졌다면 카메라를 들어주세요 — '교내 시설물 하자 보수 실시간 원클릭 접수 포털'

🔧 학교안전행정·교무 — 파손된 타일, 고장 난 냉난방기, 창문 파손 등을 교직원이 스마트폰으로 촬영하면 행정실 담당자에게 접수 알림이 표시되고, 보수 진행 상황(접수 → 처리 중 → 완료)이 실시간으로 투명하게 공유되는 원클릭 시설물 관리 포털입니다.

📖 한 줄 정의

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

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

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
시설물 위치 코드 자동 분류 교실·복도·운동장·특별실 등 위치 코드를 선택하면 파손 종류(문·창문·냉난방기·타일)와 긴급도(긴급/일반)가 자동 분류됩니다. 긴급(빨강)으로 접수하면 관리자 대시보드 상단에 즉시 고정됩니다.
3단계 진행 상태 표시 "접수됨 → 처리 중 → 완료" 3단계 상태 라벨이 실시간 트래킹되어 보수 예정 시간을 투명하게 안내합니다. 완료 처리 시 파랑 표식이 자동으로 덮어써져 인정을 확인.
월간 보수 통계 요약 한 달간 접수 건수와 처리 완료율을 막대 차트로 집계하여 학교 안전 점검 보고서로 그대로 제출합니다. @media print 월간 하자 보수 통계 요약지 A4 인쇄 지원.

2. 핵심 아키텍처 해설

① 시설물 접수 및 상태 라벨링 엔진

const AREAS = ["교실", "복도", "운동장", "특별실", "급식실", "기타"];
const STATUS_LABELS = { pending: "🟡 접수", processing: "🔵 처리 중", done: "🟢 완료" };

function registerFix(area, detail, urgency) {
  const id = "FIX-" + String(FIX_LOG.length + 1).padStart(4, "0");
  FIX_LOG.push({ id, area, detail, urgency, status: "pending", at: nowStamp() });
  if (urgency === "긴급") moveTop(id);
  return id;
}

위치 코드와 긴급도(긴급/일반)를 선택하면 자동으로 ID가 부여되고, 긴급 건은 최상단으로 이동시켜 관리자가 즉시 인지하도록 합니다.

② 3단계 상태 전환 & 투명한 공유

function updateStatus(id, newStatus) {
  const item = FIX_LOG.find(f => f.id === id);
  if (!item) return false;
  item.status = newStatus;
  item.updatedAt = nowStamp();
  renderBoard();
  return true;
}

행정실 관리자가 보수 상태를 한 단계씩 업데이트하면 접수자(교사)의 화면에도 실시간으로 반영되어 "어디까지 처리됐는지" 투명하게 공유됩니다.

③ 월간 보수 통계 요약 리포트

function monthlyReport(logs) {
  const done = logs.filter(l => l.status === "done").length;
  const total = logs.length;
  const rate = Math.round(done / total * 100);
  return { done, total, rate };
}

월별 접수 건수, 처리 완료율(%), 미처리 긴급 건 등을 자동 집계하여 학교 안전 점검 보고서 양식으로 제출합니다.

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

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트'를 복사합니다.
  2. 역질문 답변 — 제미나이가 묻는 관리 위치 코드(교실/특별실 등)에 답합니다.
  3. HTML 파일 실행 — 메모장에 붙여넣고 시설보수.html로 저장하여 교무실 태블릿에 고정합니다.

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

[🚨 에러 방지 기본 안전장치]
1. 단일 HTML 파일 완결성: 외부 라이브러리, 서버 통신 없이 순수 바닐라 HTML/CSS/JS로 완성한다.
2. 시설물 위치 코드 선택: 교실·복도·운동장·특별실·급식실 등을 드롭다운으로 선택하고 상세 내용을 입력한다.
3. 3단계 진행 상태 라벨: 🟡 접수 → 🔵 처리 중 → 🟢 완료의 3단계 상태 표시 및 관리자 클릭 전환이 실시간 반영된다.
4. 긴급도 분류: 긴급 건은 대시보드 최상단에 붉은 배경으로 고정되어 즉시 관리자가 인지하도록 한다.
5. 학생 개인정보 0: 학생 정보는 취급하지 않으며, 교사 제보자 표기는 닉네임·부서만 사용한다.
6. // TODO, /* 생략 */ 등의 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 즉시 작성하지 말고, 아래 3가지를 먼저 나에게 질문한 뒤 내 답변으로 설계를 확정한다.
Q1. 시설물 유형 드롭다운에 냉난방기·화장실·특별실험실까지 포함할까요?
Q2. 긴급 건 접수 시 화면 알림 사운드를 Web Audio로 합성할까요?
Q3. 월간 통계 요약을 인쇄용 A4 가로 보고서 양식으로 출력할까요?

🎯 에디터 한줄평

"'어제 행정실에 말했는데요'라는 아쉬움은 학교 안전사고의 뿌리입니다. 이 포털은 그 채찍질을 코드 라벨 하나로 명확하게 바꿔줍니다. 교사는 접수 시각과 상태 확인만으로 자신이 한 일을 증명하고, 행정 담당자는 '미처 못 본 것'을 미처 '완료해야 할 것'으로 변환하는 객관적 원장 연구의 일환이라 하겠습니다."

📚 기술·교육 참고 링크

  • 학교 시설물 안전 관리 지침 및 하자 보수 절차 표준화 이론
  • 교육과정 연계: 교무 행정 자동화, 학교 안전 점검, 시설 관리