1년치 연구 실적이 시트에 착착 쌓인다 — 교내 연구회 아카이빙 (GAS + 구글 시트 백엔드)
📚 교내 전문적학습공동체·연구학교·자율장학 실적 아카이빙 — 교사가 수업 나눔 일지, 연구 자료, 수업 팁을 폰에서 업로드하면 구글 시트에 날짜·교과·주제·내용이 자동 누적되고, 학기말 연구 보고서 작성 시 시트에서 원클릭으로 취합·정렬할 수 있습니다.
📖 한 줄 정의
Google Apps Script(GAS): 구글 스프레드시트 안에서 실행되는 서버리스 백엔드 스크립트 — 별도 서버 없이 무료로 웹앱을 배포할 수 있습니다.
구글 스프레드시트 = 무료 DB: 연구 실적이 시트 행으로 자동 누적되어 교사가 엑셀처럼 열람·정렬·보고서 추출을 할 수 있습니다.
⚠️ 개인정보·보안 안내 (필독)
이 웹앱은 GAS + 구글 스프레드시트를 활용하여 데이터를 구글 클라우드에 저장합니다.
• 구현 전 반드시 소속 교육청 정보보호 담당과에 사전 문의하세요.
• 이 도구는 교사 전용입니다 — 학생 개인정보를 일절 다루지 않습니다.
1. 3대 핵심 분석 비교표
| 무엇이 바뀌었나요? | 쉬운 설명 | 써보세요! |
|---|---|---|
| 흩어진 파일 종결 | 한글(HWP) 파일로 각자 저장하던 수업 나눔 기록을 시트 한 장에 통합 적재합니다. | 연구회원 10명이 각자 폰에서 업로드 → 시트 한 곳에 일괄 누적 |
| 교과별·주제별 필터 | 국어·수학·과학·사회 교과별 또는 "에듀테크", "놀이수업" 태그별로 원하는 실적만 골라 볼 수 있습니다. | "수학" 태그 선택 → 1학기 수학 수업 나눔 기록 8건만 정렬 |
| 학기말 보고서 1분 완성 | 시트의 데이터를 마크다운이나 텍스트로 추출하여 연구학교 최종 보고서 부록에 바로 붙여넣습니다. | 시트 데이터 ➔ 마크다운 복사 ➔ 공문서 붙여넣기 |
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({
date: data[i][0], author: data[i][1], subject: data[i][2],
title: data[i][3], content: data[i][4], tags: data[i][5]
});
}
return ContentService.createTextOutput(JSON.stringify({ records: rows })).setMimeType(ContentService.MimeType.JSON);
}
function doPost(e) {
var p = JSON.parse(e.postData.contents);
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("연구기록");
sheet.appendRow([
new Date().toLocaleDateString("ko-KR"),
p.author, p.subject, p.title, p.content, p.tags
]);
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="author" placeholder="작성자">
<select id="subject"><option>국어</option><option>수학</option><option>사회</option><option>과학</option></select>
<input type="text" id="title" placeholder="수업 나눔 주제">
<textarea id="content" placeholder="핵심 내용 및 학생 반응"></textarea>
<input type="text" id="tags" placeholder="태그 (예: 에듀테크, 토의)">
<button onclick="submit()">기록 저장</button>
<div id="msg"></div>
<h3>📋 누적 연구록</h3>
<div id="list"></div>
<script>
var G = "여기에_배포_URL";
function submit() {
fetch(G, { method: "POST", body: JSON.stringify({
author: document.getElementById("author").value,
subject: document.getElementById("subject").value,
title: document.getElementById("title").value,
content: document.getElementById("content").value,
tags: document.getElementById("tags").value
}) }).then(function(r){return r.json();}).then(function(d){
document.getElementById("msg").textContent = d.ok ? "✅ 저장 완료!" : "오류";
load();
});
}
function load() {
fetch(G).then(function(r){return r.json();}).then(function(d){
var h = "";
d.records.forEach(function(r){
h += "<p><strong>[" + r.subject + "] " + r.title + "</strong> (" + r.author + ", " + r.date + ")<br>" + r.content + "</p>";
});
document.getElementById("list").innerHTML = h;
});
}
load();
</script>
</body></html>
제미나이 전용 에러 제로 프롬프트
[🚨 에러 방지 기본 안전장치]
1. 2개 파일 완결성: Code.gs와 index.html을 각각 완성한다.
2. doGet: 시트에서 전체 연구록 목록을 읽어 JSON으로 반환한다.
3. doPost: 날짜, 작성자, 교과, 제목, 내용, 태그를 시트에 appendRow한다.
4. 학생 개인정보 0: 교사 이름과 수업 나눔 내용만 다룬다.
5. // TODO, /* 생략 */ 금지 — 끝까지 완성한다.
[❓ 역질문]
1. 교과 카테고리는 어떤 것을 넣을까요? (기본: 국어·수학·사회·과학·실과)
2. 태그 자동 완성이 필요한가요? (기본: 자유 입력)
🎯 에디터 한줄평
"1년치 연구학교 보고서를 쓸 때 '선생님들 파일 좀 모아주세요'라는 공지가 교무실의 악몽이었습니다. 시트에 차곡차곡 누적되어 있으면 학기말에 엑셀 필터링 한 번으로 부록이 완성됩니다. 교사의 연구 실적이 휘발되지 않는 가장 안전한 금고입니다."
📚 참고 링크
- Google Apps Script 공식 문서: https://developers.google.com/apps-script
- 교육과정 연계: 교원 전문적학습공동체, 자율장학, 교무 행정