프로그램/AI

꾸역 꾸역 일러스트레이터 자동화 삽질기 (2/3)

도레시 2025. 6. 3. 22:25

 

안녕하세요!
오늘도 학교 과제 덕분에 머리를 싸매며 삽질한 일러스트레이터 자동화 프로젝트 이야기를 이어가겠습니다.
지난 번에는 ExtendScript Toolkit을 통해 Illustrator가 실제로 스크립트로 제어될 수 있다는 걸 확인했었죠.

이제 본격적으로 달려보죠.

🔧 자동화 프로세스의 큰 줄기

우리가 만들고자 한 건 단순했습니다.
사용자의 데이터 입력 → 디자인 작업 자동화 → 결과물 생성 및 전송 → 정리까지, 모든 게 자동으로 처리되는 시스템.

프로세스는 이렇게 짰어요:

  1. 데이터 받기 : 사용자가 Google Sheet에 정보 입력
  2. 작업 지시 : Adobe ExtendScript Toolkit 실행하여 Illustrator 제어
  3. 파일 생성 : AI + JPG 파일 저장
  4. 메일 발송 : Gmail로 첨부파일 전송
  5. 정리 : 작업 완료 후 파일 삭제 및 기록 정리

이 모든 동작이 하나의 플랫폼 아래서 통합되고 관리되어야 했죠.
그 주역은 바로… 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) 을 활용해 이런 방식을 시도했습니다:

  1. Google Sheet 데이터를 n8n에서 받아옴
  2. JSON 형식으로 저장
  3. 웹훅 URL을 통해 로컬 서버에서 이 데이터를 GET 요청 으로 다운로드
  4. ExtendScript가 이 파일을 읽고 작업 시작

이렇게 하면 n8n이 중간 다리 역할을 해주면서,
로컬에서도 웹에서 받은 데이터를 사용할 수 있게 되더라고요.


⚠️ 그런데 사실… 더 쉬운 방법도 있었어요.

사실 Google Sheet 자체를 pyAutoGUI 시점에 직접 접근할 수도 있고,
OAuth 인증을 걸치면 스크립트 단독으로도 데이터를 읽을 수 있긴 합니다.
하지만 저희는 이미 n8n 위에 모든 로직을 얹어놨고,
이걸 또 처음부터 다시 짜기엔 그냥 너무 싫어서...…

꾸역 꾸역 기존 구조에 맞춰서라도 해보자…”

 

결국 웹훅으로 대기하고, 파일을 만들어 로컬로 다운받는 방식을 택하게 되었죠.
쉽진 않았지만, 일단 돌아가기 시작하면 그만~~~~~~


📤 반대로, 로컬에서 웹(n8n)으로 결과물을 보내는 건?

AI 파일과 JPG 파일이 생성된 후에는,
이걸 다시 n8n에게 넘겨줘서 Gmail로 발송해야 했습니다.
이번에도 같은 방식을 썼어요: 로컬에서 웹훅으로 파일 업로드

  1. Illustrator 작업 완료 → AI & JPG 파일 저장
  2. PyAutoGUI로 ExtendScript 종료 후, Python 스크립트 실행
  3. 생성된 파일들을 POST 요청으로 n8n 웹훅 주소에 업로드
  4. n8n에서 Gmail 노드 호출하여 메일 전송

여기서도 역시 “왜 그냥 로컬에서 구글 인증 받고 바로 메일 보내면 안 돼?”라는 질문이 떠올랐지만,
이미 n8n 위에 전체 흐름을 얹어놓은 상태라서…

n8n에서 다 처리되도록 만들고 싶다!
(명색이 자동화 프로젝트인데, 분산된 시스템은 싫단 말이에요…)


🧠 명색이 AI 과목 과제인데, LLM 없이는 좀 그렇잖아?

메일 발송까지는 잘 됐는데,
막상 메일을 보면 뭔가 허전하더라구요.
그래서 이번엔 Gemini 에게 요청 데이터와 변경 내용을 넘겨서 요약본을 만들어달라고 했습니다.

이 자동화 과정 중에 AI도 넣고 싶었습니다.

"이거 다 스크립트랑 매크로로만 해결했네. 그래도 명색에 AI 과목 과제인데 첨가향이라도 뿌려야 하나"

 

그래서 등장한 주인공이 바로 LLM , 이번엔 Google Gemini 였습니다.
AI가 직접 일러스트를 그리는 건 아니지만, 사용자가 입력한 데이터와 그에 따른 텍스트 변경 내역을 정리 해서 보여주는 역할을 맡겼죠.

 

이제부터 비극이 시작되었지요..