완전 무료로 n8n을 클라우드에서 구동

책 표지 이미지

제목: 밤샘으로 얻어낸 '평생 무료' n8n 서버 구축기

"공짜 점심은 없다"는 말, 서버 구축하면서 실감했다. 도메인부터 SSL, Docker 권한 설정까지... 유료 서비스면 1분이면 끝날 일을 무료 조합으로 맞추느라 꼴딱 밤을 샛다.

하지만 후회는 없다. 이 지난한 과정 끝에 나는 평생 관리비 0원인 나만의 자동화 엔진을 얻었으니까.

안정적인 운영을 위해 '로컬(개발)-서버(운영)' 이원화 체제를 구축했다. 내 컴퓨터에서 편하게 워크플로우를 만들고, 서버에서는 오직 실행만 담당하게 하는 방식이다. 버전만 맞춰두면 워크플로우 이식도 순식간이다.

삽질의 시간은 길었지만, 이제 24시간 쉬지 않고 돌아가는 나만의 비서가 생겼다. 유료 클라우드에 의존하지 않는 독립적인 자동화 생태계를 구축했다는 사실이 가장 뿌듯하다.

n8n을 24시간 돌리고 싶은데 유료 서버비는 부담스럽다.

로컬에서만 쓰기엔 아쉽고, n8n 공식 클라우드 호스팅은 월 최소 €20부터 시작한다.

완전 무료로 n8n을 클라우드에서 돌릴 방법은 없을까?

결론부터 말하면 가능하다. GCP Always Free, Docker, ngrok을 조합하면 서버비 0원으로 n8n을 운영할 수 있다.

완전 무료 조합 (필요한 3가지 요소)

1. GCP e2-micro (서버)

구글 클라우드의 Always Free 프로그램으로 제공되는 무료 VM이다. 1GB RAM, 1vCPU 사양으로 n8n을 돌리기에 충분하다.
제약: us-west1, us-central1, us-east1 리전 중 하나를 선택해야 한다. 표준 영구 디스크 30GB까지만 무료다.

2. Docker (컨테이너 엔진)

n8n을 격리된 환경에서 실행한다. docker-compose.yml 파일 하나로 설치, 실행, 업데이트를 관리할 수 있다.

3. ngrok (터널링 + HTTPS)

외부에서 VM에 접속할 수 있게 해주는 터널이다. 무료로 고정 도메인 1개를 제공하며, SSL 인증서도 자동으로 적용된다.

구축 과정

1. GCP VM 생성

프로젝트 생성

  1. Google Cloud Console 접속
  2. 구글 계정으로 로그인
  3. 상단 프로젝트 선택 → "새 프로젝트" 클릭
  4. 프로젝트 이름 입력 (예: n8n-server)
  5. 탐색 메뉴 → "결제" → 결제 계정 연결 (카드 등록이 필요하지만, Always Free 조건을 지키면 자동 청구되지 않는다.)

Compute Engine API 활성화
탐색 메뉴 → "Compute Engine" → "사용" 버튼 클릭

VM 인스턴스 생성
GCP Console → Compute Engine → VM 인스턴스 → "만들기"

필수 설정

이름: n8n-server
리전: us-west1 (Oregon)
영역: us-west1-b
머신 계열: E2
머신 유형: e2-micro

왼쪽메뉴 - OS 및 스토리지

운영체제: Ubuntu
버전: Ubuntu 22.04 LTS x86_64
부팅 디스크 유형: 표준 영구 디스크
크기: 30GB

"만들기" 클릭 → VM 생성 완료 (1~2분 소요)

GCP 설정 화면

우측에 "예상 월 비용 $7.11"이 표시되더라도 Always Free 조건을 지키면 실제 과금은 없다.

2. Docker 설치

VM에 SSH로 접속한다. GCP Console에서 "SSH" 버튼을 클릭하면 브라우저 터미널이 열린다.

# 패키지 업데이트 (오래된 버전의 Docker 설치 방지)
sudo apt update && sudo apt upgrade -y 

# Docker 설치
sudo apt install -y docker.io

# Docker Compose 설치
sudo apt install -y docker-compose

# 현재 유저를 docker 그룹에 추가 (sudo 없이 사용)
sudo usermod -aG docker $USER

# 그룹 반영을 위해 SSH 재접속
exit

SSH를 다시 열고 버전을 확인한다.

docker -v
docker-compose -v

3. ngrok 설정

ngrok.com에서 가입 후 무료 도메인을 발급받는다.
(예: aoghop-morgan-koreanhook.ngrok-free.dev)

VM에 ngrok을 설치한다.

curl -sSL https://ngrok-agent.s3.amazonaws.com/ngrok.asc \
  | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null \
  && echo "deb https://ngrok-agent.s3.amazonaws.com buster main" \
  | sudo tee /etc/apt/sources.list.d/ngrok.list \
  && sudo apt update \
  && sudo apt install ngrok

Authtoken을 등록한다.

ngrok config add-authtoken [여기에_토큰_붙여넣기]

4. 암호화 키 생성 - ✅추가

n8n 크레덴셜 암호화 키를 생성한다. 이렇게 하면 자격증명을 암호화해서 저장하기 때문에 안전하고, VM을 재시작해도 크레덴셜 유지가 된다.

openssl rand -hex 32

출력 예시:

3d504g45h554c5h4523kh6x35hvs445hh3s23dd56fss5768a3671fv8j465273k

⚠️ 상황 결과 비교

상태 결과
키 미설정 재시작마다 새 키 자동생성 → 크레덴셜 날아감
키 변경 기존 크레덴셜 전부 복호화 불가
키 분실 크레덴셜 복구 불가
키 고정 유지 ✅ 재시작해도 항상 안전

5. n8n 설치

데이터 폴더를 생성한다.

# n8n 폴더 생성
mkdir -p ~/n8n/data
cd ~/n8n

# 데이터 폴더 권한 설정 (n8n 컨테이너 유저: 1000)
sudo chown -R 1000:1000 ~/n8n/data

💡 chown -R 1000:1000의 의미
n8n 컨테이너가 사용하는 유저 ID가 1000번이기 때문이다. 이 권한 설정을 하지 않으면 n8n이 데이터를 저장하지 못한다.

docker-compose.yml 파일을 작성한다.

sudo apt install -y nano   # 터미널에서 파일 편집하는 텍스트 에디터 설치
nano docker-compose.yml   # 파일 작성

아래 내용을 복사해서 붙여넣는다.
(주의: YOUR_NGROK_DOMAINYOUR_OPENSSL_RAND_HEX_32 부분은 본인의 정보로 교체할 것)

version: "3.8"

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"         # ✅ 외부 IP 직접 접근 차단
    environment:
      - N8N_HOST=YOUR_NGROK_DOMAIN
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://YOUR_NGROK_DOMAIN
      - GENERIC_TIMEZONE=Asia/Seoul
      - N8N_EDITOR_BASE_URL=https://YOUR_NGROK_DOMAIN
      - N8N_SECURE_COOKIE=false       # ✅ 세션/쿠키 문제 해결
      - N8N_PROXY_HOPS=1              # ✅ ngrok 프록시 경유 시 rate-limit 방지
      - N8N_ENCRYPTION_KEY=YOUR_OPENSSL_RAND_HEX_32 # ✅ 암호화키 고정
    volumes:
      - ./data:/home/node/.n8n

Ctrl + S로 저장하고 Ctrl + X로 종료한다.

n8n을 실행한다.

# 컨테이너 백그라운드 실행
docker-compose up -d

# 실행 확인
docker ps

STATUS가 "Up"이면 정상이다.

6. ngrok 터널 실행

백그라운드로 ngrok을 실행한다.

nohup ngrok http --domain=YOUR_NGROK_DOMAIN 5678 > /dev/null 2>&1 &

브라우저에서 https://YOUR_NGROK_DOMAIN으로 접속한다.
n8n 초기 계정 생성 화면이 나오면 성공이다! 🎉

데이터 영속성 보장

~/n8n/data 폴더를 서버의 '안전 금고'로 지정했다. n8n 컨테이너를 삭제하거나 업데이트해도 이 폴더에 저장된 워크플로우와 자격 증명은 유지된다.

volumes:
  - ./data:/home/node/.n8n

이 설정이 없으면 컨테이너를 재시작할 때마다 모든 데이터가 사라지니 필수다.

로컬 n8n과 서버 n8n을 함께 운영하는 법

일반적인 개발 플로우는 다음과 같다.

로컬 n8n (개발/테스트)   ➔   완성   ➔   서버 n8n (운영)

왜 이렇게 해야 하는가?
서버 n8n에서 직접 테스트하다가 워크플로우가 꼬이면 운영 중인 자동화가 멈춘다. 로컬에서는 아무리 실수해도 서비스에 영향이 없다.

버전 일치가 중요하다
로컬 n8n과 서버 n8n의 버전이 다르면 같은 워크플로우가 다르게 동작할 수 있다. 예를 들어 바이너리 데이터를 다룰 때, 구버전과 최신 버전은 내부 처리 코드가 다르다.

// 구버전 (로컬)
const binaryData = $input.first().binary.data;

// 최신버전 (서버)
const binaryData = await this.helpers.getBinaryDataBuffer(0, Object.keys($input.first().binary)[0]);

이런 차이 때문에 로컬에서는 작동하던 워크플로우가 서버에서는 에러를 낸다.
버전을 맞추는 방법은 간단하다. 로컬 n8n도 Docker로 실행하고, docker-compose.yml에서 이미지 태그를 서버와 동일하게 지정하면 끝이다.

image: n8nio/n8n:latest

실제 운영 경험

GitHub 자동화 워크플로우를 서버에 배포할 때 문제가 발생했다. Discord 노드에서 서버 선택이 초기화되어 있었다. 로컬에서 설정한 자격 증명(Credential)이 서버로 넘어오지 않았기 때문이다.

자격 증명은 보안상 각 n8n 인스턴스에 독립적으로 암호화되어 저장된다. 로컬에서 설정했다고 해서 서버에 자동으로 복사되지 않는다.

해결 방법: 서버 n8n에서 각 자격 증명을 한 번씩 다시 추가하고, 워크플로우의 노드에서 서버 크레덴셜을 재선택해주면 완벽하게 돌아간다.

주요 명령어 정리 (Cheat Sheet)

# n8n 실행
cd ~/n8n && docker-compose up -d

# n8n 중지
cd ~/n8n && docker-compose down

# n8n 재시작
cd ~/n8n && docker-compose restart

# n8n 실시간 로그 확인
docker logs n8n -f

# n8n 최신 버전 업데이트
cd ~/n8n && docker-compose pull && docker-compose up -d

# Ngrok 백그라운드 실행
nohup ngrok http --domain=YOUR_NGROK_DOMAIN 5678 > /dev/null 2>&1 &

# Ngrok 종료
pkill ngrok

한계 및 주의사항

  • 성능: e2-micro는 1GB RAM, 1vCPU다. 복잡한 워크플로우를 동시에 여러 개 실행하면 느려진다. 간단한 마케팅/알림 자동화 용도로는 충분하지만, 대규모 데이터 크롤링에는 부적합하다.
  • ngrok 무료 플랜: 도메인 1개만 제공되며, 첫 접속 시 ngrok 배너가 뜬다. 웹훅을 받을 때는 지장이 없지만, 클라이언트에게 직접 제공하는 웹 서비스 용도로는 유료 플랜이 필요하다.
  • 정책 변경 리스크: GCP가 Always Free 정책을 변경하면 비용이 발생할 수 있다. 2026년 현재는 안전하지만, 장기적으로 정책 메일은 잘 확인해야 한다.

결론을 맺으며...

제목: 밤샘으로 얻어낸 '평생 무료' n8n 서버 구축기

"공짜 점심은 없다"는 말, 서버 구축하면서 실감했다. 도메인부터 SSL, Docker 권한 설정까지... 유료 서비스면 1분이면 끝날 일을 무료 조합으로 맞추느라 꼴딱 밤을 샛다.

하지만 후회는 없다. 이 지난한 과정 끝에 나는 평생 관리비 0원인 나만의 자동화 엔진을 얻었으니까.

안정적인 운영을 위해 '로컬(개발)-서버(운영)' 이원화 체제를 구축했다. 내 컴퓨터에서 편하게 워크플로우를 만들고, 서버에서는 오직 실행만 담당하게 하는 방식이다. 버전만 맞춰두면 워크플로우 이식도 순식간이다.

삽질의 시간은 길었지만, 이제 24시간 쉬지 않고 돌아가는 나만의 비서가 생겼다. 유료 클라우드에 의존하지 않는 독립적인 자동화 생태계를 구축했다는 사실이 가장 뿌듯하다.

참고 링크

다음 이전