💠 소개
강의자료 자동화 프로젝트를 하다 보면, 문서나 슬라이드가 구글 드라이브에 저장되는 것까진 좋지만… 정작 그걸 모바일에서 관리하거나 공유하려면 다시 복잡한 절차를 거쳐야 할 때가 많습니다. 😵
그래서 이번엔 기존에 만들어 두었던 Gemini API + Google Apps Script + Slides
기반의 자동화 시스템을 확장하여, AppSheet를 활용한 강의자료 관리 앱까지 구축해보았습니다! 📱📄
💠 진행 방법
✅ 사용한 도구들
Gemini API
Google Apps Script
Google Slides
Google Sheets
AppSheet
ChatGPT 4o, Gemini 2.5 Flash (App Script 코드 수정, AppSheet 구현 가이드)
🛠 핵심 구현 과정
1. Apps Script 수정 – 생성된 강의자료를 기록하기
기존에는 강의자료(Doc, Slides)가 만들어지고 드라이브에 저장되기만 했지만, 생성된 자료의 목록이 누적되지 않는 문제가 있었습니다. 그래서 다음과 같은 필드를 자동으로 기록하도록 스크립트를 수정했습니다:
// ✅ 기존 recordLectureResource 함수를 이것으로 교체
function recordLectureResource({ projectName, type, targetAudience, materials, link }) {
const sheetName = '강의자료관리';
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(sheetName) || ss.insertSheet(sheetName);
// 헤더가 없으면 추가 (RowID 컬럼 포함)
if (sheet.getLastRow() === 0) {
sheet.appendRow(['RowID', '생성일자', '프로젝트명', '형태', '대상', '준비물', '생성링크']);
}
// RowID 생성 (더 안전한 방식)
const lastRow = sheet.getLastRow();
const newRowID = lastRow === 1 ? 1 : lastRow; // 헤더만 있으면 1, 아니면 현재 마지막 행 번호
const today = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd');
// 데이터 추가 (순서: RowID, 생성일자, 프로젝트명, 형태, 대상, 준비물, 생성링크)
sheet.appendRow([newRowID, today, projectName, type, targetAudience, materials, link]);
}
// ✅ 기록
recordLectureResource({
projectName: programName + ' DOC',
type: '강의 계획서',
targetAudience: extractValue(rawContent, '대상'),
materials: extractValue(rawContent, '준비물'),
link: doc.getUrl()
});
// ✅ 기록
recordLectureResource({
projectName: programName + ' PPT',
type: '강의안',
targetAudience: extractValue(rawContent, '대상'),
materials: extractValue(rawContent, '준비물'),
link: presentation.getUrl()
});
생성일자
프로젝트명(강의자료명)
형태 (계획서/슬라이드)
대상
준비물
생성링크 (Google Docs or Slides URL)
이 정보는
강의자료관리
시트에 저장됩니다.
2. AppSheet 구성 – 강의자료 선택 → 메일로 전송
AppSheet에서 다음 기능을 만들었습니다:
강의자료를 리스트에서 선택
‘메일 전송 요청’ 화면에서 받는 사람 이메일 입력
전송 버튼 클릭 시, 다음 정보가
메일전송요청
시트에 기록되도록 설정
[RowID, 요청일자, 프로젝트명, 형태, 받는사람이메일, 자료링크, 상태]
→ 전송 성공 시 ‘완료’, 실패 시 ‘실패’로 상태 변경 (🔜 추후 Make 연결하여 이메일로 강의자료링크 전송 -> 상태 변경)
📱 AppSheet 화면
3. AppSheet 삽질 기록 (💥 삽질은 최고의 교사)
강의자료관리
시트에 RowID(고유값) 를 만들지 않은 바람에 데이터 연결(ref) 지옥을 경험했습니다 😭👉 교훈: AppSheet를 염두에 두고 있다면 Key 열은 필수!
확장프로그램으로 AppSheet를 열었더니 다른 시트 때문에 앱이 꼬여서, 빈 템플릿에서 두 시트만 따로 불러와 구성
앱 내 view 간 이동 설정 (ex. 강의자료 상세 → 메일 요청 add 버튼 노출)에 엄청난 삽질
ChatGPT가 안내한 기능 이름이 AppSheet에서 다르게 나와서 혼란
결국 이미지 캡처해서 계속 물어보며 문제 해결
후반에는 Gemini로 전환, 실제 메뉴명 기반의 가이드가 훨씬 정확해서 수월하게 마무리할 수 있었습니다
💠 결과와 배운 점
📌 배운 점 요약
AppSheet는 Sheet 기반으로 앱을 빠르게 만들 수 있지만, 데이터 구조를 모르고 시작하면 상당히 어렵다는 점!
ChatGPT는 논리 흐름이 좋지만 실제 UI 기반 안내는 다소 부족했고, Gemini는 구글 생태계 서비스에선 강력한 가이드를 제공
자동화된 자료 생성 + 관리 + 요청 시스템이 완성되며, 진정한 강의자료 자동화 루프 완성 🎯
💡 깨달음
아는 만큼 보이고, 보이는 만큼만 할 수 있다.
AI와 모든 도구는 아는 만큼 활용할 수 있다.
하지만 내가 아는 것에 AI를 더하면, 내가 아는 것보다 더 많은 것을 보고 더 많은 것을 할 수 있다.
도움 받은 글
ChatGPT / Gemini 와의 대화 캡처 (생략)
👉 이 글은 지피터스(gpters.org) X 개발자F(litt.ly/ekwak) 가 만든 사례 기반 자동화 글입니다!