2026년 9월 8일 화요일

[행정/연구] 교직원 동호회 신청 & 업무 설문 자동 취합 포털 - GAS + 구글 시트

교직원 동호회 신청 & 업무 설문 자동 취합 포털 — GAS + 구글 시트 백엔드

📊 교직원 동호회 신청·교내 다자간 업무 설문·교원 희망 연수 조사 — 교직원이 각자 폰에서 폼을 제출하면 구글 스프레드시트에 실시간으로 누적되고, 담당자는 시트에서 원클릭 집계·정렬·통계를 낼 수 있습니다. 서버 비용 0원, 설문지 회수 부담 0%.

📖 한 줄 정의

Google Apps Script(GAS): 구글 스프레드시트 안에서 실행되는 서버리스 백엔드 스크립트 — 별도 서버 없이 무료로 웹앱을 배포할 수 있습니다.

구글 스프레드시트 = 무료 DB: 설문 응답이 시트 행으로 자동 누적되어 담당자가 엑셀처럼 열람·정렬·통계를 낼 수 있습니다.

⚠️ 개인정보·보안 안내 (필독)

이 웹앱은 GAS + 구글 스프레드시트를 활용하여 데이터를 구글 클라우드에 저장합니다.

구현 전 반드시 소속 교육청 정보보호 담당과에 사전 문의하세요.

• 이 도구는 교사 전용입니다 — 학생 개인정보를 일절 다루지 않습니다.

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요?쉬운 설명써보세요!
설문지 회수 0%종이 설문지를 돌리고 회수하고 수기 집계하던 과정이 사라집니다. 제출 즉시 시트에 행으로 적재됩니다.교직원 폰에서 폼 제출 → 시트 자동 기록 → 담당자가 통계 확인
실시간 진행률동호회 신청이 몇 명 완료되었는지 실시간으로 확인할 수 있어 정원 마감을 자동 알릴 수 있습니다.배드민턴 15/20명 · 요가 8/15명 · 독서 22/25명
CSV 원클릭 내보내기취합된 데이터를 CSV로 내려받아 행정 서식에 바로 붙여넣을 수 있습니다.시트에서 파일 ➔ 다운로드 ➔ CSV

2. GAS 실전 구축 가이드

파일 1: Code.gs (백엔드)

function doGet(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("신청목록");
  var data = sheet.getDataRange().getValues();
  var rows = [];
  for (var i = 1; i < data.length; i++) {
    rows.push({ name: data[i][0], club: data[i][1], date: data[i][2] });
  }
  return ContentService.createTextOutput(JSON.stringify({ entries: rows })).setMimeType(ContentService.MimeType.JSON);
}

function doPost(e) {
  var p = JSON.parse(e.postData.contents);
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("신청목록");
  sheet.appendRow([p.name, p.club, new Date().toLocaleString("ko-KR")]);
  return ContentService.createTextOutput(JSON.stringify({ ok: true })).setMimeType(ContentService.MimeType.JSON);
}

파일 2: index.html (프런트엔드)

<!DOCTYPE html>
<html lang="ko"><head>
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>동호회 신청</title>
</head><body>
<h2>🏃 동호회 신청</h2>
<input type="text" id="name" placeholder="이름">
<select id="club"><option>배드민턴</option><option>요가</option><option>독서</option></select>
<button onclick="submit()">신청</button>
<div id="msg"></div>
<script>
var G = "여기에_배포_URL";
function submit() {
  fetch(G, { method: "POST", body: JSON.stringify({ name: document.getElementById("name").value, club: document.getElementById("club").value }) })
  .then(function(r) { return r.json(); })
  .then(function(d) { document.getElementById("msg").textContent = d.ok ? "✅ 신청 완료!" : "오류"; });
}
</script>
</body></html>

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

[🚨 에러 방지 기본 안전장치]
1. 2개 파일 완결성: Code.gs와 index.html을 각각 완성한다.
2. doGet: 시트에서 신청 목록을 읽어 JSON으로 반환한다.
3. doPost: 시트에 appendRow로 새 행을 추가한다.
4. 학생 개인정보 0: 교사 이름만 다룬다.
5. // TODO, /* 생략 */ 금지 — 끝까지 완성한다.
[❓ 역질문]
1. 신청 항목은 무엇인가요? (이름+동호회 외에 추가 필드가 있나요?)
2. 정원 제한이 필요한가요? (동호회별 최대 인원수)

🎯 에디터 한줄평

"교무실에서 종이 설문지를 뽑아 돌리고, 회수하고, 손으로 집계하던 3일짜리 일이 폰 한 대로 끝납니다. 제출한 순간 이미 구글 시트에 정리되어 있으니 담당자는 결과만 보면 됩니다."

📚 참고 링크

  • Google Apps Script 공식 문서: https://developers.google.com/apps-script
  • 교육과정 연계: 교무 행정(동호회·설문·연수 관리), 교사 업무 자동화