소개
안녕하세요 여러분! 😊
저는 지난주에 영세율 적용을 위한 거래내역 자동화를 시도했는데요, 그때는 Make를 사용해서 자동화를 해보려다가 결국 실패하고 말았습니다.
그래서 부끄럽지만 실패사례 글을 먼저 올릴 수밖에 없었어요... 🥲
하지만!
이번 주에는 그때 도전했던 자동화에 드디어 성공해서 이렇게 성공사례를 공유하게 되었습니다! 🔥
제가 이 자동화를 시도하게 된 이유는, 사업을 시작하고 해외 거래가 점점 늘어나면서 영세율 적용을 받으려면 거래 상대방이 외국인임을 증명해야 하는 상황이 되었기 때문입니다.
증명하는 방법중 꼭 필요한 정보가 구매자의 주소정보였습니다.
그런데 막상 페이팔에서 제공하는 거래내역서를 확인해보니, 정작 필요한 구매자의 주소 정보가 빠져 있는 거예요.
다행히 결제 시점에 페이팔이 보내주는 이메일 안에는 주소 정보가 포함되어 있더라고요.
그래서 이렇게 생각했습니다.
👉 "메일에서 필요한 정보를 추출해서 자동으로 정리하면 되지 않을까?"
바로 그렇게 해서 메일 기반의 결제내역 자동화를 본격적으로 시작하게 되었습니다.
진행 방법
✅사용한 도구
- Make
- GPT (o3 모델 활용)
- Airtable
✅시도한 방법(메이크 모듈)
지메일 데이터 로딩 (Gmail 모듈)
html 내역이 너무 지저분하게 들어오니 텍스트로 정리 (text parser-html to text)
정규식으로 필요한 내역 뽑아내기 (text parser-Match pattern)
뽑아낸 내역을 에어테이블 필드별 매핑하기 (Airtable)
제가 메일에서 추출하고 싶었던 내역은 아래와 같습니다. 총 9개의 파싱이 필요한 상황이였어요
Group
필드
예시
1
인보이스 번호
0101
2
외화금액
87.00
3
PayPal 수수료
4.13
4
환전 전 통화
NT$2,726 TWD
5
구매자 명
鄭 宇翔
6
이메일
7
주소(2-3줄)
桃園市, 楊梅↵高榮里6鄰電研路10巷168弄9號
8
국가 코드
TW
9
상품명
Sakura
저번 실패한 내역을 보면 3번에서 계속 오류가났습니다 (필요한 내역 뽑아내기((파싱)))
한꺼번에 정규표현식으로 모두 처리하려고했지만 매핑이 계속 끊기는 오류가 발생하였고
정규식을 바꿔보며 계속 시도했지만 오류가 안나더라도 값이 들어오지 않는 상황이였습니다...
✅실패 원인
이메일 내역의 글자수나 위치 등이 조금이라도 바뀌면 제대로 처리되지 않는 것 같았습니다.
매핑 되다가도 내역이 너무 길면 중간에 매핑이 끊기게 되었습니다.
✅해결 방법
하나로 표현식을 만들지말고 필요한 내역별 각각의 정규 표현식을 사용해보자!
(총 9개의 Match pattern 모듈)
Text parser #1
Pattern →인보이스 번호\s*([A-Za-z0-9-]+)Text parser #2
인보이스에\s*대해\s*\$([\d,]+\.\d{2})\s*USDText parser #3
수수료\/세금\s*\$([\d,]+\.\d{2})\s*USDText parser #4
환전 전 통화\s*([A-Z]{0,3}\$?[\d,]+\s*[A-Z]{3})Text parser #5
고객\s*(?:\r?\n)+\s*([^\r\n]+)Text parser #6
고객[\s\S]*?\r?\n([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,})Text parser #7
[A-Za-z0-9._%+-]+@[^\r\n]+\r?\n([^\r\n]+(?:\r?\n[^\r\n]+){1,2})\r?\n([A-Z]{2})\s*\d{2,5}
→ Group 1 = 주소, Group 2 = 국가(상품명은) Text parser #8 –
\d+\s*x\s*([^\r\n$]+?)\s*\$
결과는 성공🔥🔥🔥🔥
제대로 파싱이 되었고 에어테이블에도 자동으로 업로드 되었습니다.
.
.
.
하지만,,,이건 반쪽짜리 성공이였어요
✅반쪽짜리 성공인이유
사실 이 자동화를 만들면서 메이크의 모듈 사용량 문제도 꽤 고민이 됐습니다.
이번에 만든 플로우에서는 총 11개의 모듈을 사용하게 됐는데요,
솔직히 말하면 이건 조금 낭비가 심하다고 느꼈습니다.왜냐하면 메이크는 한 달에 2,000개 모듈 실행까지만 무료인데요,
이미 테스트를 여러 번 하면서 상당히 소진돼서,
발표 준비할 때 기준으로는 181개밖에 안 남은 상태였습니다... 🥲
181개면 이제 약 16번 정도밖에 구동을 못하는 상황이더라고요.그리고 또 한 가지 제한점이 있었는데요,
현재 저는 메일을 두 가지 형식으로 받고 있습니다.인보이스 결제내역
결제대금 거래내역
그런데 이번에 만든 자동화는 아직 "인보이스 결제내역" 형식의 메 일만 자동화할 수 있는 상태입니다.
결제대금 거래내역 쪽은 아직 대응이 안 되고 있어서
이 부분은 앞으로 개선해야 할 과제로 남아 있습니다.
✅다시 시도한 방법
파싱을 GPT에게 맡기자,,,,!!
Gmail 모듈: “New E-mail” 트리거, 메일 데이터를 불러옴
Html to text 모듈 : 메일 본문 데이터에 쓸데없는 부분 지우기(특수문자나 기호 등)
OpenAI 모듈: 메일을 JSON으로 변환하여 필요한 부분만 뽑아오기
Parse JSON 모듈: 뽑아온 데이터를 구조화하기
Airtable 모듈: 레코드 생성·업데이트
gmail 모듈 - "거래 세부" 키워드가 들어있는 메일의 데이터 가져와
HTML to text - 방금가져온 메일 데이터에서 HTML 본문을 Text로 정리해줘
Open AI - 역할설정 : 너는 제이슨으로만 말해
Open AI - 유저 메세지 : html을 텍스트로 변환한 이메일 본문에서 필요한 정보를 추출해
아래 PayPal 관련 이메일에서 필요한 정보를 추출해 **반드시 JSON만**(코드블록·주석 없이) 응답해 주세요. ❗️규칙 1. 필드가 없으면 빈 문자열("")을 넣습니다. 2. amount·fee 는 **숫자만**(통화코드·기호 제거, 소수점 두 자리) JSON number 로 반환합니다. 3. buyer_country 는 다음 우선순위로 채웁니다. ① 주소·본문 끝에 붙은 **ISO-2 코드**(예: TW, US, JP) ② 코드가 없으면 **영문 국가명**(Taiwan, United States…) ③ 그래도 없으면 빈 문자열("") 4. 모든 필드는 OUTPUT_SCHEMA 순서·이름 그대로 유지합니다. ### OUTPUT_SCHEMA { "amount": 123.45, "fee": 3.67, "invoice": "INV-1234", "transaction_id": "5L034713AW258454N", "buyer_name": "John Doe", "buyer_email": "[email protected]", "buyer_country": "TW", "buyer_address": "123 Main St, CA 94016", "item_name": "Digital Skin Pack" } ### EMAIL <<< {{2.text}} >>>
Parse JSON - 방금 뽑은 데이터를 하나씩 분리해서 저장해줘
Airtable - 데이터를 에어테이블 필드에 넣어줘
✅성공!
결과와 배운 점
자동화를 시도하면서 어려운 부분에서 지피터스 커뮤니티의 도움을 정말 많이 받았습니다.
저번 실패사례글에서
- 샘호트만 님의 조언
> "html 메일날라오는거 make에서 mailhook을 이용하시면 되고요. 그 파싱하는 것은 o3 모델에게 html 로 파싱해서 정규표현식으로 뽑아달라고 해서 원하시는 값만 싹싹 드시면 충분히 자동화 해보실 수 있을 것 입니다."
➔ mailhook과 o3 모델 활용법, 그리고 정규표현식으로 필요한 값만 추출하는 방법을 구체적으로 알려주셔서 필요한 부분만 쏙쏙 적용해볼 수 있었습니다
➔ 참고 영상 링크까지 주셔서 공부가 정말 수월했어요!
- 댕댕이멍멍 님의 응원
> "데이터 구조를 읽거나 파싱하는 부분에 AI를 활용해 보시면 생각보다 잘 해주는 것을 느끼실 수 있을 겁니다. 화이팅!!!"
➔ 처음부터 파싱 정규식 같은 부분은 챗지피티 도움으로 작성했었지만 계속 오류가 나는 바람에 AI에 신뢰도가 떨어진 상황이였는데, 약간의 과금이 필요한 OpenAI 모듈을 용기를 내서 시도해볼 수 있었습니다.ㅎㅎ
이런 댓글 하나하나가 큰 힘이 되어 주었고, 덕분에 지피터스가 '무섭고 어려운 곳'이 아니라, 초보도 얼마든지 질문하고 도움받을 수 있는 곳이라는 걸 마음 깊이 깨달았습니다. 🙏
도움 받은 글 (옵션)
저번주 실패사례글