꾸역 꾸역 일러스트레이터 자동화 삽질기 (2/3)
안녕하세요!
오늘도 학교 과제 덕분에 머리를 싸매며 삽질한 일러스트레이터 자동화 프로젝트 이야기를 이어가겠습니다.
지난 번에는 ExtendScript Toolkit을 통해 Illustrator가 실제로 스크립트로 제어될 수 있다는 걸 확인했었죠.
이제 본격적으로 달려보죠.
🔧 자동화 프로세스의 큰 줄기
우리가 만들고자 한 건 단순했습니다.
사용자의 데이터 입력 → 디자인 작업 자동화 → 결과물 생성 및 전송 → 정리까지, 모든 게 자동으로 처리되는 시스템.
프로세스는 이렇게 짰어요:
- 데이터 받기 : 사용자가 Google Sheet에 정보 입력
- 작업 지시 : Adobe ExtendScript Toolkit 실행하여 Illustrator 제어
- 파일 생성 : AI + JPG 파일 저장
- 메일 발송 : Gmail로 첨부파일 전송
- 정리 : 작업 완료 후 파일 삭제 및 기록 정리
이 모든 동작이 하나의 플랫폼 아래서 통합되고 관리되어야 했죠.
그 주역은 바로… n8n 이었습니다.
📦 자동화 도구들, 이제는 본격적인 조합 시작
각각의 기능을 담당할 도구들은 이미 정해져 있었습니다:
- Google Sheet : 사용자로부터 데이터를 받아올 창구
- Adobe ExtendScript Toolkit + PyAutoGUI : Illustrator 자동 수정 담당
- Illustrator : 자동으로 텍스트 변경하고 파일 저장
- Gmail : 결과물을 첨부해서 보내주는 메일봇
- Gemini : 사용자 데이터를 정리하고 설명문 작성까지
이 모든 걸 n8n 이라는 워크플로우 엔진 하나로 연결하려는 야심찬 계획이었죠.
(굳이 n8n 없어도 되긴 되는데.....)
⚙️ 사전 작업, NAS에 n8n 설치하기
자동화를 하려면 일단 서버가 필요합니다.
그래서 저희는 집에 있는 Synology NAS 에 n8n 을 설치했습니다.
항상 켜져 있고 외부 접속도 가능하다는 점에서 정말 좋은 선택이었어요.
설치 방법은 크게 두 가지가 있었는데,
PostgreSQL과 연동하는 방식도 있었지만, 결국 N8N 자체 서버 + Web Station을 활용하는 간단한 방식으로 성공했고,
이후엔 웹브라우저로 n8n.XXXX.synology.me 접속만으로도 작업이 가능하게 되었죠.
(참고로 설치 가이드는 이곳 을 참고했어요!)
🔑 Google OAuth 인증, 처음 만드는 API 계정
복수 계정을 만들려고 PC에서 만들려고 했지만 계속 인증 오류가 나서 결국 모바일로 계정을 새로 만들었네요... 😅
n8n에서 Google Sheet를 접근하려면 당연히 OAuth 인증이 필요했습니다.
OAuth 설정이 완료된 이후, n8n 에서 인증키를 등록한 뒤
Google Sheet의 데이터를 읽어오는 건 n8n의 내장 노드로 금방 해결할 수 있었어요.
이렇게 데이터를 얻으면, 다음 단계로 넘어갈 준비가 끝났다는 뜻입니다.
💻 "웹"에서 온 데이터, 어떻게든 "로컬"에 심어보자 – n8n과의 사투
자동화 프로젝트가 어느 정도 윤곽을 갖추고 나니, 실제로 작동하는 흐름도 눈으로 확인할 수 있게 되었어요.
Google Sheet에 데이터를 입력하면 Illustrator 파일이 자동으로 생성되고, JPG까지 변환되어 Gmail으로 전송되는 일련의 과정이 말이죠.
하지만 여기엔 한 가지 큰 문제가 있었어요.
“웹 (Google Sheet)에서 온 데이터를, 어떻게 로컬 (일러스트레이터가 돌아가는 PC)로 가져갈 것인가?”
📥 웹에서 로컬로 데이터를 내리는 방법, 이게 이렇게 복잡할 줄이야…
처음엔 단순하게 생각했어요.
“n8n에서 Google Sheet API로 바로 읽어서 스크립트에 던져주면 끝 아냐?”
그런데 문제는 ExtendScript Toolkit 이 로컬 환경에서만 동작 한다는 거였죠.
그래서 n8n에서 웹훅(webhook) 을 활용해 이런 방식을 시도했습니다:
- Google Sheet 데이터를 n8n에서 받아옴
- JSON 형식으로 저장
- 웹훅 URL을 통해 로컬 서버에서 이 데이터를 GET 요청 으로 다운로드
- ExtendScript가 이 파일을 읽고 작업 시작
이렇게 하면 n8n이 중간 다리 역할을 해주면서,
로컬에서도 웹에서 받은 데이터를 사용할 수 있게 되더라고요.
⚠️ 그런데 사실… 더 쉬운 방법도 있었어요.
사실 Google Sheet 자체를 pyAutoGUI 시점에 직접 접근할 수도 있고,
OAuth 인증을 걸치면 스크립트 단독으로도 데이터를 읽을 수 있긴 합니다.
하지만 저희는 이미 n8n 위에 모든 로직을 얹어놨고,
이걸 또 처음부터 다시 짜기엔 그냥 너무 싫어서...…
“꾸역 꾸역 기존 구조에 맞춰서라도 해보자…”
결국 웹훅으로 대기하고, 파일을 만들어 로컬로 다운받는 방식을 택하게 되었죠.
쉽진 않았지만, 일단 돌아가기 시작하면 그만~~~~~~
📤 반대로, 로컬에서 웹(n8n)으로 결과물을 보내는 건?
AI 파일과 JPG 파일이 생성된 후에는,
이걸 다시 n8n에게 넘겨줘서 Gmail로 발송해야 했습니다.
이번에도 같은 방식을 썼어요: 로컬에서 웹훅으로 파일 업로드
- Illustrator 작업 완료 → AI & JPG 파일 저장
- PyAutoGUI로 ExtendScript 종료 후, Python 스크립트 실행
- 생성된 파일들을 POST 요청으로 n8n 웹훅 주소에 업로드
- n8n에서 Gmail 노드 호출하여 메일 전송
여기서도 역시 “왜 그냥 로컬에서 구글 인증 받고 바로 메일 보내면 안 돼?”라는 질문이 떠올랐지만,
이미 n8n 위에 전체 흐름을 얹어놓은 상태라서…
“n8n에서 다 처리되도록 만들고 싶다! ”
(명색이 자동화 프로젝트인데, 분산된 시스템은 싫단 말이에요…)
🧠 명색이 AI 과목 과제인데, LLM 없이는 좀 그렇잖아?
메일 발송까지는 잘 됐는데,
막상 메일을 보면 뭔가 허전하더라구요.
그래서 이번엔 Gemini 에게 요청 데이터와 변경 내용을 넘겨서 요약본을 만들어달라고 했습니다.
이 자동화 과정 중에 AI도 넣고 싶었습니다.
"이거 다 스크립트랑 매크로로만 해결했네. 그래도 명색에 AI 과목 과제인데 첨가향이라도 뿌려야 하나"
그래서 등장한 주인공이 바로 LLM , 이번엔 Google Gemini 였습니다.
AI가 직접 일러스트를 그리는 건 아니지만, 사용자가 입력한 데이터와 그에 따른 텍스트 변경 내역을 정리 해서 보여주는 역할을 맡겼죠.
이제부터 비극이 시작되었지요..