데이터 스키마 명시, 예외 처리 지정, UI 조작 구체화 3가지로 프롬프트를 개선하면 오류를 크게 줄일 수 있다. 완성 후 대화 이력 기반으로 프롬프트를 개선하는 것도 중요하다.
구조화 편 다음 글이다.
우선 로직이 복잡하지만, 기존 작업 내용을 기준으로 프롬프트를 구성해서 진행해 본다.
프롬프트
# 비즈니스 로직
## 시트 설명
Customer Sheet (고객 정보 마스터) : 청구서를 받는 고객의 상세 정보 저장소입니다.
주요 컬럼: Customer Name (식별 키), Email (발송처), Address, Representative.
Products (상품 정보 마스터) : 판매되는 제품의 가격 및 상세 정보 저장소입니다.
주요 컬럼: Sku Name (식별 키), Price (VAT 별도) (단가), Sku Description.
주의사항: 가격(Price) 데이터에 천 단위 콤마(,)가 포함된 문자열 형식이므로, 계산 시 숫자형으로 변환해야 합니다.
Transaction (거래 내역) : 실제로 발생한 판매 내역입니다.
Customer Name을 통해 Customer와 연결됩니다.
SKU Name을 통해 Products와 연결됩니다.
계산 로직: 이 시트의 Quantity(수량)와 Products 시트의 Price를 곱하여 개별 거래 금액을 산출합니다.
## Invoices Sheet
고객 Sheet에 있는 고객 정보별로 루프를 돌면서 PDF 파일을 만들고 청구서(Invoces 시트)를 만든다.
Invoices Sheet 를 컬럼 값을 설정하는 로직은 다음과 같다.
- Invoice No : 청구서 번호: 6자리의 랜덤 숫자를 생성한다.
- Invoice Date : 오늘 날짜로 설정한다.
- Customer : Customer 시트에 있는 개별 고객 정보 중 Customer Name
- Email : Customer 시트에 있는 개별 고객 정보 중 Email
- Notes: 빈값
- Amount Due :Transaction 시트의 거래 내역을 하나씩 보면서 해당 고객이 구매한 내역을 찾은 후 어떤 상품인지 정보를 찾고(products), 수량과 가격을 곱해 금액(Amount)을 계산한다. 그리고 모든 상품의 금액을 더해 총액(Total Amount)을 구합니다.
- Due Date : 오늘 날짜로부터 15일 뒤의 납기일(Due Date)을 계산
- Invoice Link : PDF로 만들어진 Invoice 정보의 링크
- Email Sent : 이메일 발송 여부 N 으로 설정한다.
## PDF 생성
1. https://docs.google.com/document/d/1Ll5qSs3Seyy8QZI6uH6_RYzpT_J-7KC7vZdlFlA2klM/edit?tab=t.0#heading=h.qnw1jh9supiw 템플릿을 활용해서 PDF 파일을 만든다.
2. 청구서의 품목 리스트는 고객마다 개수가 다릅니다. 구글 닥스 템플릿의 Table 요소를 찾아서 동적으로 행(Row)을 추가하는 방식으로 코드를 작성한다.
3. PDF 파일을 만들고 나면 해당 파일을 드라이브에 저장하고 Invoices 시트의 Invoice Link 에 값을 설정한다.
## 이메일 발송
Invocies 시트의 Email Sent 가 N 인 항목은 첨부파일과 함께 메일을 발송한다
우선 위와 같이 작성하기가 힘든데, 우리가 Google 생태계에서 일을 하는 것은 모든 것이 연결되어 있기 때문이다.
기존 문서든 새로운 문서든 Gemini에게 분석을 시키고 룰을 정리해달라고 한다.
초안을 받은 후 거를 내용은 거른 후 프롬프트를 정리하면 된다. 그리고 업무를 가장 잘 아는 사람이 리뷰를 하는 것이 재작업을 최소화하는 방법이다.

Gemini를 활용해서 프롬프트를 만들자

우선 여러 번의 error & retry 끝에 완료는 했다.
이 방법은 실제로 사용하는 사람마다 프롬프트가 다르기 때문에 과정도 결과도 다를 것이다.
하지만 마지막 팁을 주자면 완료가 된 시점에 다음과 같은 프롬프트를 다시 던진다
@Invoice Generation and Emailing @Invoice Automation Script Development 를 기준으로 프롬프트를 어떻게 개선하면 오류를 줄일 수 있었을까?
@Invoice Generation and Emailing, @Invoice Automation Script Development 는 기존 대화 이력이다.
대화 이력을 기준으로 프롬프트를 개선해달라고 요청을 하는 것이다.
이번 프로젝트 진행 과정을 되돌아보며, 오류를 줄이고 한 번에 정확한 결과를 얻기 위한 프롬프트 개선 전략을 정리해 드리겠습니다.
이번 작업에서 발생한 주요 문제는 다음과 같았습니다.
1. 데이터 스키마 불일치: 시트의 실제 컬럼명과 코드의 컬럼명이 달랐음 (Customer vs Customer Name, Product vs SKU Name).
2. 비즈니스 로직 누락: 가격의 콤마(,) 처리, Products 시트 조회의 필요성 등이 초기에 명시되지 않음.
3. 기술적 구현 상세 부족: 구글 닥스 표의 동적 행 추가(Dynamic Row) 로직은 단순 replaceText로는 불가능하다는 점이 간과됨.
💡 개선된 프롬프트 전략 (Template)
앞으로 유사한 자동화 스크립트 개발을 요청하실 때는 아래 3가지 요소를 포함하면 개발(생성) 정확도를 획기적으로 높일 수 있습니다.
1. 데이터 스키마(Data Schema) 명시
"어떤 시트에 어떤 데이터가 있는지"를 추상적으로 설명하지 말고, 정확한 헤더 이름을 명시합니다.
[Bad] "Transaction 시트에서 데이터를 가져와서 계산해 줘."
[Good] "Transaction 시트의 컬럼은 ['Date', 'Customer Name', 'SKU Name', 'Quantity']로 구성되어 있어. 여기서 Customer Name은 Customer 시트의 키값이고, SKU Name은 Products 시트의 키값이야."
2. 예외 처리 및 데이터 포맷 지정
값이 숫자인지 문자인지, 콤마가 있는지 등 데이터의 실제 형태를 알려줍니다.
[Good] "가격(Price) 컬럼은 '1,000' 처럼 콤마가 포함된 문자열이야. 계산할 때는 콤마를 제거하고 숫자로 변환해서 처리해 줘."
3. 복잡한 UI/문서 조작의 구체화
템플릿의 특정 요소를 반복해야 한다면 단순 치환(Replace)인지 구조 변경(Loop & Append)인지 힌트를 줍니다.
[Good] "청구서 품목이 여러 개일 수 있어. 구글 닥스 템플릿의 표(Table)에서 {{Item}}이 있는 행을 찾아서, 품목 개수만큼 행을 복사(Clone)하고 추가하는 방식으로 구현해 줘."
최종 프롬프트는 다음과 같다.
이 내용을 참고해서 다음에 워크플로우 자동화할 때 활용하는 것이다.
# 목표
구글 스프레드시트의 데이터를 취합하여 구글 닥스 템플릿 기반의 PDF 청구서를 생성하고 이메일로 발송하는 GAS 스크립트를 작성해 주세요.
# 데이터 시트 구조 (헤더명 정확히 일치 필수)
1. Customer: `Customer Name`, `Email`, `Address`
2. Products: `Sku Name`, `Price (VAT 별도)` (가격은 '1,000' 처럼 콤마 포함 문자열임)
3. Transaction: `Customer Name`, `SKU Name`, `Quantity` (날짜별 거래 내역)
4. Invoices: `Invoice No`, `Customer`, `Invoice Link`, `Email Sent` (결과 저장용)
# 비즈니스 로직
1. Transaction의 `SKU Name`으로 Products 시트에서 단가를 찾고, 콤마를 제거하여 수량과 곱해 총액을 계산합니다.
2. Transaction의 `Customer Name`으로 Customer 시트의 이메일 정보를 매핑합니다.
3. 고객별로 모든 Transaction을 합산하여 하나의 청구서를 만듭니다.
# PDF 생성 요구사항 (중요!)
- 구글 닥스 템플릿 ID: `[TEMPLATE_ID]`
- **동적 테이블 처리**: 템플릿 내의 표에서 `{{Item}}`이 포함된 행을 찾아, 고객의 구매 품목 수만큼 행을 동적으로 추가해 주세요. (단순 텍스트 치환 아님)
- 생성된 PDF는 **스프레드시트가 있는 폴더와 동일한 위치**에 저장해 주세요.
# 이메일 발송
- Invoices 시트의 `Email Sent` 값이 'N'인 건만 발송하고 'Y'로 업데이트합니다.
프롬프트를 어떻게 개선하면 오류를 줄일 수 있을까?
스프레드시트에 대한 로직을 최대한 글(프롬프트)로 잘 변환하면 된다는 아주 심플한 결과를 얻을 수 있다. 대량 발송 미리보기도 같은 방식으로 프롬프트를 반복 개선해서 만들었다.
쉽지만 어렵다.
결과를 보면 위의 요건에 추가적으로 더 요건을 추가해야 한다.
Invoice PDF 는 어떤 디렉토리에 어떤 조건(월별)으로 저장해줘.
저장에 성공하면 구글 닥스 파일은 삭제해줘
빠르게 하고 다시 프롬프트를 잘 관리하면 된다.

불러오는 중...