[4탄] Gemini API + Apps Script + Slides 연동 자동화 + AppSheet 강의자료 관리앱 + Make 메일 전송까지 완료

AI와 함께 Make.com으로 반복 업무 자동화: 강의자료 이메일 발송 시스템 구축 사례

💠 소개

교육 운영 업무 중 수강생에게 특정일에 맞춰 강의자료 링크를 이메일로 발송하는 작업은 매우 반복적이고 시간이 많이 소요되는 업무입니다. 또한, 수동으로 진행하다 보니 누락이나 발송 시간 오류 등의 실수가 발생할 가능성이 있었습니다.

이러한 문제를 해결하고 업무 효율성을 높이기 위해, Google Sheets에 정리된 정보를 기반으로 조건에 맞는 대상에게 자동으로 이메일을 발송하고, 그 결과를 다시 시트에 기록하는 자동화 시스템을 구축하고자 했습니다. 초기 목표는 최소 기능 제품(MVP)을 빠르게 개발하여 실제 업무에 적용하는 것이었습니다.

💠 진행 방법

이번 자동화 시스템 구축에는 다음과 같은 도구들이 사용되었습니다.

  • Google Sheets: 이메일 발송 대상자 정보, 자료 링크, 발송 요청일, 발송 상태 등을 관리하는 데이터베이스 역할.

  • Gmail: 수강생에게 이메일을 실제로 발송하는 도구.

  • Make.com (구 Integromat): 전체 자동화 로직을 구성하고 각 도구를 연결하는 핵심 플랫폼.

  • Google Apps Script (GAS): Make.com 시나리오를 매일 정해진 시간에 자동으로 실행시키기 위한 트리거 역할 (Make.com의 유료 플랜 없이도 스케줄링 가능).

  • AI Assistant (Gemini): 전체적인 구현 방향 설정, 문제 해결, Make.com 함수 및 로직 구성에 대한 질의응답 및 트러블슈팅 지원.

  • GPT_PRD Builder : PDR 생성 ( https://chatgpt.com/g/g-PuPOUqhcR-prd-builder )

자동화 시스템 구축 단계 요약:

1. 요구사항 정의 (PRD 기반): AI에게 초기 PRD (Product Requirements Document)를 제시하고, 이를 바탕으로 자동화 시스템의 목표와 핵심 기능을 명확히 했습니다.

*** GPT PRD Bilder 입력 프롬프트 ***

강의자료 이메일 전송 자동화 시스템을 구글 시트, 지메일, make로 구현하고 싶습니다.
구글 시트의 "메일전송요청" 시트에 검색해서 [RowID, 요청일자, 프로젝트명, 형태, 받는사람이메일, 자료링크, 상태, 실제프로젝트명] Make에서 데이터를 읽어서 상태의 값이 "대기" 일때 "요청 일자"의 날짜가 오늘 날짜와 같으면 이메일을 "받는사람이메일"로 "실제프로젝트명"과 "자료링크"을 메일로 보낸 후 "상태" 의 값을 "완료"로 업데이트하고 날짜가 오늘 날짜 보다 이전이면 이메일을 보내지 않고 "상태"의 값을 "실패" 로 하고 오늘 날짜 보다 이후이면 역시 이메일을 보내지 않고 "상태"의 값을 그대로 "대기"로 놓습니다. 
시스템 작동을 make에서 하지 않아도 자동으로 실행되도록 구현하고 싶습니다.
PRD_ 강의자료 이메일 전송 자동화.pdf
138.16KB

2. Make.com 시나리오 설정👍

  • Webhook 트리거 생성: GAS에서 호출할 수 있는 Webhook URL을 생성했습니다.

  • Google Sheets 모듈 (`Search Rows`): "메일전송요청" 시트에서 "상태"가 "대기중"인 행들만 주기적으로 읽어오도록 설정했습니다.

    한국어 텍스트가있는 화면 스크린 샷

  • Router 모듈 (조건 분기): "요청일자"를 기준으로 로직을 분기했습니다.

    • "요청일자" == 오늘: 메일 발송 및 상태 "완료" 업데이트 경로.

    한국어로 필터를 설치하는 방법

    • "요청일자" < 오늘: 상태 "실패" 업데이트 경로.

      필터를 설정하는 방법을 보여주는 화면
    • "요청일자" > 오늘: 아무 작업 안 함 (상태 "대기중" 유지) - Fallback 경로 활용.

      한국어로 필터를 선택하십시오
  • Gmail 모듈 (`Send an email`): "오늘 발송 대상" 경로에서 이메일을 발송하도록 설정했습니다. 제목과 본문에는 Google Sheets의 데이터를 동적으로 매핑했습니다.


    🔗 참고 : Gmail 연결 방법 ( https://apps.make.com/google-email 또는 아래 "허세임 Make 자동화 Gmail 연결하기)

  • Google Sheets 모듈 (`Update a Row`): 메일 발송 후 또는 실패 처리 시, 해당 행의 "상태" 컬럼을 "완료" 또는 "실패"로 업데이트했습니다.

  • 주요 트러블슈팅: RowID (고유 ID)와 Row number (시트의 실제 행 번호)를 구분하여 Update a Row 모듈에 정확한 행 번호를 전달하는 방법을 AI와 논의하여 해결했습니다.

녹색 화면과 보라색 화면이있는 화면의 스크린 샷

3. Google Apps Script 설정:

  • Make.com Webhook을 호출하는 간단한 스크립트를 작성하고, 매일 오전 9시에 실행되도록 시간 기반 트리거를 설정했습니다.

Google App SaaS
한국어 텍스트가있는 검은 색 화면


4. AI와의 질의응답 및 트러블슈팅:

  • 초기 질문 예시: (PRD 첨부 후) "당신은 make 전문가입니다. 지금부터 초심자를 위해 위의 PRD 에 따라 작업을 진행해주세요. 순차적으로 단계별로 상세하고 자세하게 구현 방법을 설명합니다."

  • 문제 해결 과정 요약:

    • 날짜 비교 로직: Make.com에서 날짜를 비교할 때 now 변수와 today 변수의 차이점, 그리고 parseDate, formatDate 함수의 정확한 사용법에 대해 여러 차례 질문하고 답변을 받았습니다. 특히, "오늘"과 "과거"를 구분하는 필터 조건에서 parseDate(now; "YYYY-MM-DD")가 의도와 다르게 동작하여 today 변수로 변경하거나, today 변수를 사용할 수 없을 때 parseDate(formatDate(now; "YYYY-MM-DD"); "YYYY-MM-DD")와 같은 대체 표현식을 사용하는 방법을 배웠습니다.

    • (Tip: 날짜 비교 필터 설정 중 잘못된 설정과 수정된 설정을 비교하는 캡처 화면, 또는 AI와의 대화 중 관련 부분을 캡처해서 첨부하세요.)

    • 관련 질의: "오늘 발송 대상과 발송 실패 처리의 필터를 위와 같이 설정했더니 오늘 날짜와 같은 요청일자가 오늘 발송 대상과 발송 실패 처리 에 모두 해당되어서 메일이 발송되지만 상태의 값이 실패로 저장이 됩니다. 원인이 무엇이며 어떻게 수정해야 하나요?"

    • 관련 질의: "make에서 today 함수가 검은색인데 존재하는 함수가 맞나요?", "{{today}}로 입력했더니 검은색으로 변했습니다."

    • Google Sheets 행 업데이트: RowID가 고유 ID일 뿐 실제 행 번호가 아님을 인지하고, Update a Row 모듈에 어떤 값을 사용해야 하는지 질문하여 Search Rows 모듈에서 제공하는 실제 Row number를 사용해야 함을 알게 되었습니다.

    • 관련 질의: (오류 이미지 첨부 후) "RowID는 행번호가 아니고 고유ID 인데 어떻게 수정을 해야하나요?"

    • 오류 메시지 HTML 형식화: Gmail 전송 실패 시 발송되는 알림 메일의 내용을 HTML 형식으로 구성하는 방법에 대한 도움을 받았습니다.

    • 관련 질의: (오류 메시지 텍스트 이미지 첨부 후) "위의 내용을 html 형식으로 만들어줘."

    전화 프로세스를 보여주는 다이어그램

👍 결과와 배운 점

  • 명확한 요구사항의 중요성: 초기 PRD가 명확했기 때문에 AI와 소통하며 빠르게 MVP를 구체화할 수 있었습니다.

  • Make.com 날짜/시간 처리:

    * now는 현재 시간까지 포함하지만, today는 현재 날짜의 자정(00:00:00)을 의미합니다. 단순 날짜 비교 시에는 today (또는 이를 대체하는 표현식)를 사용하는 것이 정확합니다.

    * parseDateformatDate 함수를 적절히 활용하면 다양한 형식의 날짜 데이터를 표준화하여 비교할 수 있습니다.

    * 변수/함수를 사용할 때는 반드시 {{ }}로 감싸야 하며, UI에서 변수로 제대로 인식되었는지(스타일 변경 등) 확인하는 것이 좋습니다.

  • 데이터 매핑의 정확성: 모듈 간 데이터를 전달할 때, 각 필드가 어떤 값을 기대하는지(예: Update a RowRow number는 실제 행 번호) 정확히 이해하고 매핑해야 오류를 줄일 수 있습니다. Make.com의 실행 기록(Inspector)을 통해 각 모듈의 입출력 데이터를 확인하는 습관이 중요합니다.

💡 AI 활용 꿀팁:

  • 구체적인 문제 상황과 함께 현재 설정(캡처 화면 포함)을 제공하면 AI가 더 정확하고 빠르게 문제 원인을 파악하고 해결책을 제시해줍니다.

  • 오류 메시지를 그대로 전달하면 원인 분석에 큰 도움이 됩니다.

  • 단계별로 진행 상황을 공유하고 각 단계에서 막히는 부분을 질문하면 체계적으로 문제를 해결할 수 있습니다.

😅 과정 중에 어떤 시행착오를 겪었나요?

  • 날짜 비교 조건 설정 오류: 처음에는 now 변수를 사용하여 날짜를 비교하려다 보니, 오늘 날짜의 데이터가 "과거" 조건에도 해당하는 문제가 발생했습니다. AI와의 질의응답을 통해 today 변수(또는 대체 표현식)의 필요성을 인지하고 수정했습니다.

  • Google Sheets 행 번호 참조 오류: RowID라는 사용자 정의 ID를 Update a Row 모듈의 Row number 필드에 잘못 매핑하여 BundleValidationError가 발생했습니다. AI의 도움으로 Search Rows 모듈에서 제공하는 실제 행 번호 변수를 사용해야 함을 깨달았습니다.

  • `today` 변수 인식 문제: AI가 {{today}} 변수를 제안했지만, 제 Make.com 환경의 변수 목록에는 today가 보이지 않았습니다. 이 문제를 공유하자 AI는 parseDate(formatDate(now; "YYYY-MM-DD"); "YYYY-MM-DD")와 같은 대체 표현식을 알려주어 문제를 해결할 수 있었습니다.

🔎 도움이 필요한 부분이 있나요?

"현재 시스템은 잘 작동하지만, 대량 발송 시 Make.com 작업(Operation) 수를 줄일 수 있는 더 효율적인 방법이 있을까요?" (aggregator 이용하는방법)

✨ 앞으로의 계획이 있다면 들려주세요.

"이번 자동화 성공을 바탕으로, 다른 반복적인 관리 업무(예: 수강생 문의 자동 분류 및 답변)도 Make.com과 AI를 활용하여 자동화해 볼 계획입니다. 또한, 오류 처리 로직을 좀 더 정교하게 다듬고 싶습니다."

💠 결과와 배운 점

  • 이메일 발송 정확도가 올라가고, 업무 스트레스가 현저히 줄었음 🙌

  • PRD(요구사항 문서)를 먼저 정리하고 순차적으로 진행하니 시행착오가 줄어들었음

  • Gemini를 구현 파트너처럼 활용하며 막힌 부분을 빠르게 해결할 수 있었음

  • 앞으로도 어떤 자동화를 하든 PRD부터 작성하겠다는 습관이 생김 💡

💠 도움 받은 글

2
2개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요