성장과 기술

2편: 실전 – 구글 앱스 스크립트로 자동 폼 만들기

꼬부기아빠 2025. 6. 26. 20:00
반응형

[반복되는 폼 자동화] 시리즈 안내

1편: 도입 – 왜 자동화가 필요했을까?
2편: 실전 – 구글 앱스 스크립트로 자동 폼 만들기 (현재 글)
3편: 트리거 활용 – 완전 자동화의 완성

각 편은 독립적으로 읽을 수 있으며, 시리즈 전체를 따라오시면 자동화의 모든 과정을 쉽게 익히실 수 있습니다.

👉 다음 편이 궁금하다면 [3편: 트리거 활용 – 완전 자동화의 완성]를 확인해보세요!


실전! 자동 폼 생성과 응답 처리 – 광고 신청 업무를 완전히 자동화하다

“폼은 만들었고, 공유도 했는데... 시트가 또 꼬였네.”

광고 신청 업무를 담당하면서 내가 가장 자주 들었던 말이다.
매달 반복되는 업무지만, 그때마다 꼭 하나씩 빠지거나 어긋난다.
날짜가 틀렸거나, 응답 시트가 덮여버렸거나, 보기용 파일이 빠져 있거나.
작은 실수가 쌓이면 결국 "사람이 또 실수했네"라는 말이 따라붙는다.

그래서 이 업무 전체를 자동화하기로 했다.
단순히 폼 하나 만드는 수준이 아니라, 신청부터 정리, 공유까지 전 과정을 코드가 처리하도록 구성했다.


반복되는 업무, 코드가 대신하면 생기는 일

이번에 자동화한 흐름은 아래와 같다.

  1. 매월 말, 다음 달 광고 신청용 구글 폼 자동 생성
  2. 응답은 스프레드시트에 자동 저장
  3. 응답이 들어오면 통계, 현황, 요약 시트까지 자동 갱신
  4. 외부에 공유할 보기용 파일도 함께 동기화

이 과정을 통해 달라진 점은 단순하다.
사람이 하지 않아도 된다.


1. 폼은 자동으로 만들어진다

광고 신청은 매달 1일부터 받는다.
그래서 매달 25일, 아래와 같은 코드가 알아서 폼을 만들어준다.

const form = FormApp.create(${month}월 광고 신청);
form.setTitle(${month}월 광고 일정 신청);
form.addTextItem().setTitle('업체명').setRequired(true);

제목과 설명은 월별로 바뀌고
업체명을 필수 입력으로 받아야 다음 단계로 이어질 수 있도록 설계했다.


2. 주차별 체크박스 그리드 항목 생성

광고는 주차별로 신청할 수 있다.
그래서 해당 월의 날짜를 기준으로 몇 주차까지 있는지 계산하고,
각 주차마다 날짜 + 평일/주말 패키지를 포함하는 체크박스 그리드를 생성한다.

weeks.forEach((week) => {
const colLabels = [];

for (let d = week.start; d <= week.end; d++) {
const date = new Date(year, month - 1, d);
const dayName = weekdays[date.getDay()];
colLabels.push(${month}/${d}(${dayName}));
}

colLabels.push('평일 패키지');
colLabels.push('주말 패키지');

form.addCheckboxGridItem()
.setTitle([${week.label}] 광고 신청)
.setRows(priceTypes)
.setColumns(colLabels)
.setRequired(false);
});

행(rows)에는 인기/추천 광고 유형이 들어간다.
열(columns)에는 날짜와 패키지 이름이 들어간다.


3. 응답 데이터를 저장하고, 보기용 파일도 함께 만든다

응답 시트는 현재 작업 중인 스프레드시트에 자동으로 연결된다.

form.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());

이후 별도로 만들어두는 공유용 보기 시트도 함께 구성된다.
캘린더 형태로 신청 현황을 볼 수 있는 구글 스프레드시트를 하나 더 만들어서,
이 데이터가 그대로 복사되도록 자동화했다.

const reportSpreadsheet = SpreadsheetApp.create(${year}${monthStr} 광고 신청 보기용);
DriveApp.getFileById(reportSpreadsheet.getId())
.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);

그 결과, 신청자들은 폼을 제출하자마자 곧바로 신청 현황을 확인할 수 있다.


4. 응답이 들어오면 시트들이 자동으로 갱신된다

폼이 제출되면, 그 순간부터 아래 시트들이 자동으로 정리된다.

  • 통계 시트
  • 업체별 신청 현황
  • 광고 신청 캘린더
  • 외부 보기용 공유 시트
  • 주차별 패키지 요약

“언제 이런 걸 다 정리했지?” 싶을 만큼 빠르게 자동으로 갱신된다.
그 비밀은 응답 후 자동으로 작동하는 트리거 함수에 있다.


다음 편 예고: 트리거로 완성하는 완전 자동화

다음 글에서는 구글 앱스 스크립트의 트리거를 활용해
응답 후 자동 실행과 시간 기반 완전 자동화까지

어떻게 구현하는지 소개할 예정입니다.

✍️ “사람이 실수하지 않는 구조, 트리거로 완성해 보세요.”


[반복되는 폼 자동화] 시리즈 안내

1편: 도입 – 왜 자동화가 필요했을까?
2편: 실전 – 구글 앱스 스크립트로 자동 폼 만들기 (현재 글)
3편: 트리거 활용 – 완전 자동화의 완성

각 편은 독립적으로 읽을 수 있으며, 시리즈 전체를 따라오시면 자동화의 모든 과정을 쉽게 익히실 수 있습니다.

👉 다음 편이 궁금하다면 [3편: 트리거 활용 – 완전 자동화의 완성]를 확인해보세요!


 

반응형