2026년 9월 8일 화요일

[행정/연구] 교내 연구회·자율장학 포트폴리오 아카이빙 - GAS + 구글 시트

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
  • 교육과정 연계: 교원 전문적학습공동체, 자율장학, 교무 행정