📌 n8n이란?
n8n은 노드(Node) 기반의 워크플로우 자동화 도구임. 함수 단위의 기능들이 캡슐화된 '노드'를 GUI 환경에서 레고 블록처럼 연결하여 파이프라인을 구축함. 코딩 지식이 깊지 않아도 시각적으로 데이터 흐름을 볼 수 있어 직관적임.
💰 호스팅 및 요금제 주의사항
- n8n Desktop (무료): 데스크탑 버전을 설치하면 무료로 모든 기능을 사용할 수 있음. 단, 내 PC(로컬 환경)가 켜져 있는 동안에만 작동하므로, 24시간 자동화가 필요하다면 한계가 있음.
- n8n Cloud (유료): 서버 관리 없이 24시간 무중단으로 운영하려면 공식 클라우드 요금제를 결제해야 함.
- Self-Hosting (무료/유료 혼합): 도커(Docker) 등을 활용해 개인 서버나 NAS에 직접 올려 무료로 사용할 수 있음. (단, 서버 운영 비용은 별도 발생)
<aside>
📌
비용없이 구현 해보는 것이 목표이기 때문에, n8n Desktop 을 사용해 보기로함.
필요시 도커를 활용해 개인 서버에 올려 사용할 예정임.
</aside>
⚙️ 자동화 구축 및 해결 과정 (전체 흐름)
- Gmail API 연동: 서비스 계정 권한 이슈를 겪고, OAuth 2.0 클라이언트 ID 기반 인증으로 변경하여 안정적인 API 연결 확립함.
- 스팸 메일 검색 로직: 특정 키워드로 메일을 검색하되, 쿼리에
in:trash 조건을 추가해 이미 휴지통에 있는 메일의 중복 조회를 방지함.
- 데이터 단일묶음 처리: 텔레그램 메세지 전송 노드에 연결할때, 개별 데이터가 들어가면 그만큼 메세지 전송이 이루어 지므로, Aggregate 노드를 이용하여 데이터를 하나로 묶어 보내 텔레그램 메세지를 한번만 전송함.
- 다중 메일 휴지통 이동 처리: Resource를 Thread 단위로 변경하고,
Code in Javascript 노드를 추가해 하나로 묶었던 데이터를 개별 항목으로 분리하여 에러 없이 순차 처리함.
- 결과 0건 예외 처리: 스팸 없을 때 워크플로우가 멈추는 현상을 막기 위해,
Always Output Data 옵션과 IF 노드를 활용해 분기 처리를 구현함.
- 텔레그램 인터랙티브 버튼(승낙/거절) 추가: 처음엔 로컬 주소 이슈(Webhook 불가)로 실패했으나, **도커(Docker) 도입 및 터널링(Tunneling)**을 적용하여 외부에서 접근 가능한 URL을 확보한 뒤 승낙/거절 버튼을 구현함.
이 과정에서, 텔레그램 트리거 노드를 연결하며 기존의 데이터 개별 항목 분리 노드(Code in Javascript)를 제거하고, 승낙 버튼을 클릭했을때, 다시 조회후 휴지통으로 옮긴뒤, Aggregate를 사용하여 묶어 삭제 완료 메세지를 보냄.
- 텔레그램 명령어(
/스팸조회) 연동: 사용자가 /스팸조회 (구 /select_spam_mail)를 입력해 원할 때 조회하도록 트리거를 추가함. 이때 '텔레그램 봇은 단일 Webhook만 허용한다'는 사실을 깨닫고, 하나의 트리거에서 Switch(또는 IF) 노드로 명령어를 라우팅하는 구조로 고도화함.(기존의 callbak_query와 messge 이벤트를 하나의 트리거로 사용함)
