개요
최근 약 일주일에 걸쳐 n8n 워크플로우 자동화 도구를 활용하여 매주 금요일 자동으로 주간 업무 리포트를 생성하는 시스템을 구축하였습니다. 처음에는 n8n Cloud의 14일 무료 트라이얼로 시작했으나, 트라이얼 만료가 다가오면서 오라클 클라우드(Oracle Cloud) 무료 티어를 활용한 셀프호스팅 환경으로 마이그레이션하는 데 성공했습니다. 본 글에서는 그 과정에서 마주친 시행착오와 최종 결과물을 정리합니다.
배경
주간 업무 리포트는 매주 금요일마다 한 주의 활동을 정리하는 작업입니다. 매번 여러 시스템(이슈 트래커, 코드 저장소, 노트 도구 등)에서 데이터를 수집하고 정리하는 일은 반복적이고 지루한 작업입니다. 이를 자동화할 수 있다면 매주 약 30~60분의 시간을 절약할 수 있고, 무엇보다 누락이나 실수 없이 일관된 형식의 리포트를 생성할 수 있습니다.
n8n은 오픈소스 워크플로우 자동화 도구로, 시각적인 노드 기반 인터페이스를 제공하여 코딩 없이도 복잡한 자동화를 구성할 수 있습니다. Zapier나 Make(구 Integromat)와 비슷한 도구이지만, 오픈소스이며 셀프호스팅이 가능하다는 큰 장점이 있습니다.
n8n Cloud vs 셀프호스팅 비교
n8n을 사용하는 방법은 크게 두 가지가 있습니다. 처음에는 간편한 Cloud로 시작했지만, 결국 셀프호스팅으로 전환하게 되었습니다. 비교는 다음과 같습니다:
| 항목 | n8n Cloud (Starter) | 셀프호스팅 (선택) |
|---|---|---|
| 월 비용 | $24~ | $0 (영구 무료) |
| 워크플로우 개수 | 5개 | 무제한 |
| 월 실행 횟수 | 5,000회 | 무제한 |
| 활성 워크플로우 | 5개 | 무제한 |
| 데이터 통제 | n8n 서버 | 본인 서버 |
| 업그레이드 | 자동 | 수동 (docker pull) |
| 도메인/SSL | 자동 제공 | 수동 설정 |
셀프호스팅의 가장 큰 매력은 비용 부담 없이 무제한 자동화를 구축할 수 있다는 점이었습니다. 트라이얼이 끝나도 결제 압박 없이 운영할 수 있고, 향후 다양한 자동화로 확장하기에도 유리합니다.
인프라 선택: 오라클 클라우드 무료 티어
셀프호스팅을 위해서는 24시간 동작하는 서버가 필요합니다. 여러 클라우드 무료 티어를 검토한 결과, 오라클 클라우드의 Always Free 티어를 선택하였습니다. 주요 이점은 다음과 같습니다:
- 영구 무료: 12개월 한정이 아닌 영구 무료 제공
- 풍부한 자원: A1.Flex(ARM Ampere) 인스턴스로 최대 4 OCPU, 24GB RAM 사용 가능
- 한국 리전 지원: 춘천 리전이 있어 네트워크 지연이 적음
- 무과금 보장 옵션: 한도 초과 시 자동으로 서비스가 일시 정지되어 예상치 못한 과금 위험이 없음
실제로 운영해 본 결과, 1 OCPU / 6GB RAM 정도의 작은 인스턴스에서도 n8n 단독 운영에는 충분한 자원이 확보되었습니다.
작동 원리
n8n의 자동화는 노드(Node)라고 불리는 작업 단위들이 연결된 워크플로우(Workflow)로 구성됩니다. 각 노드는 특정한 일을 수행합니다:
- 트리거 노드: 워크플로우의 시작점. 시간(Cron), 웹훅, 파일 변경 등 다양한 트리거 지원
- API 노드: 외부 서비스(이슈 트래커, 코드 저장소, 메신저 등)와 통신
- 데이터 가공 노드: JavaScript 또는 Python으로 데이터를 변환
- 출력 노드: 메일 발송, 노트 생성, 메시지 전송 등
예를 들어 주간 리포트 워크플로우는 다음과 같이 구성됩니다:
[매주 금요일 17:00 트리거] ↓ [주간 기간 계산: 월요일~금요일 ISO 날짜] ↓ [이슈 트래커 API: 이번 주 이슈 조회] [코드 저장소 API: PR/Issue 조회] ← 3개 노드가 동시 실행 [코드 저장소 API: 커밋 조회] ↓ [데이터 가공: 3개 결과를 통합 및 정렬] ↓ [리포트 Markdown 생성] ↓ [노트 도구: 페이지 자동 생성] [메일 발송: HTML 형식]
실제 수행 과정
1단계: n8n Cloud에서 워크플로우 설계
처음에는 n8n Cloud의 14일 트라이얼로 시작하여 워크플로우의 기본 구조를 설계했습니다. 이 과정에서 여러 가지 시행착오가 있었습니다.
첫째, 이슈 트래커 API의 변경입니다. 기존에 사용하던 API 경로가 deprecated되어 새로운 경로(POST 방식)로 변경되었음을 발견했습니다. n8n의 HTTP Request 노드를 사용하여 직접 API를 호출하는 방식으로 해결했습니다.
둘째, 조직 이름 정정입니다. 코드 저장소의 조직 이름을 잘못 기억하고 있어, 처음에는 데이터를 가져오지 못했습니다. 실제 URL을 확인하고 수정하여 해결하였습니다.
셋째, 데이터 가공 로직 단순화입니다. 처음에는 10개가 넘는 노드로 복잡하게 구성했으나, JavaScript 단일 노드로 통합하여 9개 노드로 단순화했습니다.
2단계: 메일 발송 방식 결정
메일 발송은 처음에 OAuth2 방식을 시도했으나, 셀프호스팅 환경에서는 OAuth2 설정이 매우 복잡하다는 사실을 알게 되었습니다(Google Cloud Console 프로젝트 생성, 동의 화면 구성, redirect URI 등록 등). 검토한 방식은 다음과 같습니다:
- OAuth2 (Gmail 노드): 가장 표준적이지만 셀프호스팅에서는 설정이 복잡함
- SMTP + 앱 비밀번호 (채택): Gmail의 앱 비밀번호 기능을 활용하여 SMTP로 직접 발송. 5분 만에 설정 완료
결과적으로 SMTP 방식이 훨씬 간단하면서도 동일하게 HTML 메일 발송이 가능했습니다. 발신 메일은 표/색상이 포함된 시각적으로 풍부한 형식으로 디자인했습니다.
3단계: 셀프호스팅 마이그레이션
트라이얼 만료가 다가오면서 셀프호스팅으로 마이그레이션을 결정했습니다. 오라클 클라우드 인스턴스에 다음과 같이 설치를 진행했습니다:
1. Docker 설치 확인 (이미 설치되어 있음) 2. n8n 디렉토리 생성 및 환경변수 설정 3. docker-compose.yml 작성 (n8n + SQLite 단일 컨테이너) 4. 방화벽(iptables) 5678 포트 개방 5. 오라클 클라우드 Security List에 5678 포트 인그레스 규칙 추가 6. 컨테이너 시작 (docker compose up -d) 7. 자동 백업 스크립트 등록 (crontab, 매일 03:00)
설치는 자동화 스크립트로 수행하여 약 5분 만에 완료되었습니다. 메모리 사용량은 약 1.5~2GB로, 6GB 메모리 환경에서도 충분히 여유 있게 운영 가능했습니다.
4단계: 워크플로우 마이그레이션
n8n Cloud에서 작성한 워크플로우를 JSON 파일로 export하여 셀프호스팅 환경에 import했습니다. 노드의 구성과 연결은 그대로 옮겨졌으나, 다음 사항은 새로 등록해야 했습니다:
- API 자격증명(Credentials): 보안상 export되지 않으므로 모두 재등록 (5개)
- 노트 도구의 권한 부여: 새 Integration을 생성한 경우 페이지 접근 권한 재설정
5단계: 활성화 및 검증
워크플로우를 활성화한 후, 처음에는 매시간 실행되도록 cron을 임시 변경하여 자동 실행이 정상 작동하는지 검증했습니다. 자동 실행이 매시간 정상적으로 동작하는 것을 확인한 후, 본래 의도였던 매주 금요일 17:00 KST 스케줄로 복원하였습니다.
최종 결과물
완성된 워크플로우는 매주 금요일 오후 5시에 자동으로 실행되어 다음 결과물을 생성합니다:
- 노트 도구의 자동 페이지 생성: “주간 보고 – YYYY-MM-DD ~ MM-DD” 형식의 페이지가 부모 페이지 하위에 자동으로 추가됩니다. 이슈 목록, PR 정보, 커밋 통계가 정리되어 표시됩니다.
- HTML 메일 자동 발송: 같은 내용이 시각적으로 풍부한 HTML 형식의 메일로 발송됩니다. 표 형식의 한 주 요약, 색상이 있는 헤더, 활동별 통계가 포함됩니다.
실행 시간은 약 5~10초이며, 모든 데이터 수집과 정리, 페이지 생성, 메일 발송이 자동으로 진행됩니다.
향후 개선 계획
- 모니터링 자동화: 서버 상태(Docker 컨테이너, 메모리, 디스크)를 매일 아침 자동 점검하여 이상 시 메일 알림
- AI 요약 추가: Claude API를 호출하여 한 주의 활동을 자연스러운 문장으로 요약하는 단계 추가
- 회사 차원 자동화 검토: 본 PoC 결과를 기반으로 회사 표준 자동화 도구 선정 및 거버넌스 정책 수립
- 도메인 + HTTPS 적용: 현재는 IP 직접 접속 방식이나, 추후 도메인 연결 및 Let’s Encrypt SSL 적용 예정
마치며
이번 작업을 통해 얻은 가장 큰 교훈은 “가장 단순한 방법이 가장 효과적”이라는 것입니다. 처음에는 OAuth2 같은 복잡한 인증을 시도했으나, SMTP + 앱 비밀번호로 간단히 해결했습니다. PostgreSQL이 권장된다고 하여 처음에는 PostgreSQL + n8n 2개 컨테이너 구성을 시도했으나, 실제 사용 패턴을 보고 SQLite 단일 컨테이너로 단순화했습니다.
또한 오픈소스 + 셀프호스팅의 가치를 다시 한번 확인할 수 있었습니다. 같은 기능을 매월 비용을 지불하며 사용하는 대신, 무료 인프라 위에 직접 구축하니 월 약 $24의 비용 절감 + 무제한 확장 가능성이라는 결과를 얻었습니다.
30년 동안 C/C++로 시스템 프로그래밍을 해왔지만, 이번처럼 시각적인 노드 기반 자동화 도구를 다뤄본 경험은 매우 흥미로웠습니다. 코드를 한 줄도 쓰지 않고 복잡한 워크플로우를 구성할 수 있다는 점이 특히 인상적이었습니다. 동시에 데이터 가공 노드에서 JavaScript를 사용할 때는 익숙한 프로그래밍 패러다임을 그대로 활용할 수 있어 양쪽의 장점을 모두 누릴 수 있었습니다.
앞으로 이 자동화 환경을 기반으로 더 많은 업무 자동화를 구축해 나갈 예정입니다.
이 글은 n8n 셀프호스팅 환경 구축 경험을 바탕으로 작성되었습니다. (2026년 5월 2일)