교직원 동호회 신청 & 업무 설문 자동 취합 포털 — 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
- 교육과정 연계: 교무 행정(동호회·설문·연수 관리), 교사 업무 자동화