개발자와 자동화 애호가들은 앱과 서비스를 원활하게 연결하는 오픈 소스 자동화 플랫폼인 n8n과 같은 워크플로우 도구를 호스팅하는 비용 효율적인 방법을 자주 찾습니다. 다행히 Hugging Face Spaces는 2 vCPU, 16GB RAM, 50GB 디스크 공간을 갖춘 강력한 무료 티어를 제공하여 비용을 발생시키거나 복잡한 인프라를 관리할 필요 없이 n8n을 배포할 수 있도록 합니다. 이 가이드는 Supabase 데이터베이스 설정부터 환경 변수 구성 및 일반적인 문제 해결에 이르기까지 전체 과정을 안내합니다.
무료 n8n 배포를 위해 Hugging Face Spaces를 선택해야 하는 이유
Hugging Face Spaces는 개발자가 머신러닝 모델과 애플리케이션을 호스팅하는 방식을 혁신하고 있지만, 그 다재다능함은 n8n과 같은 워크플로우 자동화 도구로 확장됩니다. 대역폭이나 저장 공간에 비용을 청구하는 기존 VPS 제공업체와 달리, Hugging Face는 영구적인 배포를 지원하는 풍부한 무료 티어를 제공합니다. 결과적으로 Docker 오케스트레이션이나 서버 프로비저닝의 오버헤드를 피하고 워크플로우 로직에 집중할 수 있습니다.
또한 n8n은 대부분의 개인 또는 소규모 팀 사용 사례에 최소한의 리소스만 필요하므로 이 환경에서 잘 작동합니다. PostgreSQL 데이터베이스에 대한 기본 지원을 통해 Supabase와 같은 무료 서비스와 쉽게 연결하여 세션 간 데이터 영속성을 보장할 수 있습니다. 그러나 Spaces는 48시간 동안 활동이 없으면 절전 모드로 전환되며, 이는 나중에 사전 예방적 전략으로 다룰 것입니다.
Hugging Face에 배포하면 검색 가능성이 향상됩니다. `https://yourusername-n8n.hf.space`와 같은 스페이스 URL은 검색 엔진이 빠르게 색인하는 공유 가능한 자산이 됩니다. 또한 콘텐츠 자동화를 위한 n8n 워크플로우(예: RSS 피드를 블로그 게시물로 변환)를 통합하면 관련 쿼리에서 사이트 순위가 높아집니다. 따라서 이 설정은 비용을 절감할 뿐만 아니라 온라인 존재감을 증폭시킵니다.
요약하자면, Hugging Face Spaces는 확장성과 단순성을 제공하므로 "n8n 무료 배포" 검색에 최적화된 개발자에게 이상적입니다. 다음으로, 우리는 기본적인 데이터베이스 레이어를 준비할 것입니다.
전제 조건: n8n 배포를 위한 필수 계정 및 도구
배포를 시작하기 전에 필요한 계정을 수집하고 보안 자격 증명을 생성해야 합니다. 이 준비 단계는 원활한 실행을 보장하고 구성 중 오류를 최소화합니다.
먼저, huggingface.co/join에서 무료 Hugging Face 계정을 만드세요. 배포 URL의 일부가 되므로 (예: `yourprofile-n8n.hf.space`) 기억하기 쉬운 프로필 이름을 선택하세요. 이메일을 인증하여 Space 생성 권한을 잠금 해제하세요.
다음으로, supabase.com/dashboard/sign-up에서 Supabase에 가입하세요. Supabase는 무료 플랜에서 500MB 저장 공간과 무제한 API 요청을 제공하는 관리형 PostgreSQL 인스턴스를 제공하며, 이는 n8n의 워크플로우 데이터에 완벽합니다. 가입 시 데이터베이스 비밀번호를 안전하게 기록해 두세요. 쉽게 복구할 수 없을 것입니다.
Supabase에 로그인한 후, 새 프로젝트를 만드세요. "n8n-prod-db"와 같이 설명적인 이름을 지정하고 강력한 비밀번호를 설정하세요. 프로젝트가 초기화될 때까지 기다리세요. 일반적으로 2-3분 정도 소요됩니다. 그런 다음 프로젝트 대시보드의 "연결(Connect)" 섹션으로 이동하세요.
여기에서 n8n과의 최적의 성능을 위해 "트랜잭션 풀러(Transaction pooler)" 아래의 SQLAlchemy 연결 문자열 형식을 선택하세요. 다음 주요 세부 정보를 추출하세요.
- 호스트: 서버 엔드포인트 (예: `db.yourproject.supabase.co`).
- 포트: 동시 쿼리를 효율적으로 처리하기 위해 풀링된 연결에는 6543을 사용하세요.
- 사용자: 데이터베이스 사용자 이름 (예: `postgres`).
- 데이터베이스 이름: 프로젝트별 DB 이름 (예: `postgres`).
- 비밀번호: 프로젝트 생성 시 설정한 비밀번호.
노출을 피하기 위해 비밀번호 관리자와 같은 보안 메모 앱에 이 정보들을 저장하세요.
또한 n8n의 민감한 데이터 처리를 위한 암호화 키를 생성하세요. 터미널을 열고 다음을 실행하세요.
openssl rand -base64 32
이 명령은 `aXNDkPqW3mZ8vL5rT7uY2bN4jH6kM9pQ1sE0wR3tF2yG`와 같은 32바이트 랜덤 문자열을 생성합니다. 나중에 사용할 수 있도록 그대로 복사하세요.
마지막으로, n8n이 처음이라면 기본 사항을 숙지하세요. `npm install -g n8n`을 통해 데스크톱 버전을 일시적으로 설치하여 워크플로우를 로컬에서 테스트하고 호환성을 보장하세요. 이러한 전제 조건이 갖춰지면 배포를 간소화하고 잠재적인 다운타임을 줄일 수 있습니다.
자연스럽게 전환하여, n8n의 스키마 요구 사항을 지원하도록 Supabase 데이터베이스를 구성해 보겠습니다.
Supabase PostgreSQL 설정: 영구적인 n8n 워크플로우를 위한 핵심 기반
Supabase는 PostgreSQL의 복잡성을 추상화하여 데이터베이스 관리를 단순화하지만, n8n 통합을 위해 정확하게 구성해야 합니다. n8n은 워크플로우, 실행 및 자격 증명 저장을 위해 PostgreSQL에 의존하므로, 여기서의 실수는 초기화 실패로 이어집니다.
먼저 Supabase 프로젝트 대시보드에 접속하세요. "SQL 편집기(SQL Editor)"를 클릭하여 초기화 쿼리를 실행하세요. n8n은 최적의 성능을 위해 특정 테이블과 인덱스를 기대하지만, 행 수준 보안(RLS)을 신중하게 활성화하면 Supabase가 첫 연결 시 이러한 것들을 자동으로 생성합니다.
보안 강화를 위해 `workflow_entity` 및 `execution_entity`와 같은 핵심 테이블에 RLS를 활성화하세요. 편집기에서 다음 SQL 스니펫을 실행하세요.
-- 핵심 테이블에 RLS 활성화
ALTER TABLE workflow_entity ENABLE ROW LEVEL SECURITY;
ALTER TABLE execution_entity ENABLE ROW LEVEL SECURITY;
ALTER TABLE credentials_entity ENABLE ROW LEVEL SECURITY;
-- 인증된 접근을 위한 정책 생성 (Supabase는 JWT를 통해 인증 처리)
CREATE POLICY "Users can view own workflows" ON workflow_entity
FOR ALL USING (auth.uid() = user_id);
-- 다른 엔티티에 대한 유사한 정책
CREATE POLICY "Users can manage own executions" ON execution_entity
FOR ALL USING (auth.uid() = created_by_id);
쿼리를 저장하고 실행하세요. 이 정책들은 무단 접근을 방지하며, n8n의 다중 사용자 기능과 일치합니다.
다음으로, 연결 풀링을 구성하세요. Supabase 설정에서 데이터베이스(Database) > 연결 풀링(Connection Pooling) 아래의 트랜잭션 풀러(transaction pooler)를 "켜기(On)"로 전환하세요. 이 모드는 포트 6543을 사용하여 n8n의 동시 웹훅 트리거에 걸쳐 로드를 분산합니다. pgAdmin 또는 Supabase의 내장 클라이언트와 같은 도구를 사용하여 연결을 테스트하세요.
psql "postgresql://postgres:[YOUR_PASSWORD]@db.yourproject.supabase.co:6543/postgres"
성공하면 `postgres=#` 프롬프트가 표시됩니다. `\dt`를 실행하여 테이블을 나열하고, n8n을 위한 빈 스키마가 준비되었는지 확인하세요.
워크플로우의 SEO 최적화를 위해 사용자 정의 메타데이터 테이블 추가를 고려하세요. 예를 들어, 워크플로우별 SEO 키워드를 저장할 수 있습니다.
CREATE TABLE seo_metadata (
id SERIAL PRIMARY KEY,
workflow_id INTEGER REFERENCES workflow_entity(id),
keywords TEXT[],
title VARCHAR(255),
description TEXT
);
이 확장은 n8n이 블로그용 메타 태그 생성을 자동화하여 검색 순위를 높이는 데 도움이 됩니다.
또한 Supabase의 분석 대시보드를 통해 사용량을 모니터링하세요. 무료 티어는 월 50,000개의 활성 행으로 제한되며, 이는 100개 이상의 워크플로우에 충분합니다. 한도에 가까워지면 Supabase가 사전에 알려줍니다.
데이터베이스가 강화되었으니, Hugging Face Space를 복제하는 단계로 진행하세요. 이는 라이브 n8n 인스턴스에 대한 게이트웨이입니다.
단계별 배포: Hugging Face에서 n8n Space 복제 및 구성하기
이제 핵심 배포를 실행합니다. Hugging Face의 "이 스페이스 복제(Duplicate this Space)" 기능은 사전 구성된 n8n 템플릿을 복제하여 설정 시간을 10분 이내로 단축시킵니다.
huggingface.co/spaces/tomowang/n8n에서 템플릿 스페이스로 이동하세요. 눈에 띄는 "이 스페이스 복제(Duplicate this Space)" 버튼을 클릭하세요. 이 작업은 Dockerfile, app.py (Streamlit과 같은 서빙용), 그리고 n8n 바이너리를 포함한 저장소를 포크합니다.
복제 대화 상자에서 다음을 지정하세요.
- 스페이스 이름: URL 예상값(예: `yourprofile-n8n.hf.space`)과 정확히 일치하도록 `n8n`을 입력하세요. 다르게 입력하면 404 오류가 발생합니다.
- 가시성: 즉시 접근을 허용하려면 "공개(Public)"를 선택하세요. 비공개 스페이스는 임베딩을 제한하고 인증 루프를 트리거합니다.
- 하드웨어: 확장이 GPU를 요구하지 않는 한 무료 CPU 기본(2 vCPU, 16GB RAM)을 유지하세요.
다음으로, "변수 및 비밀(Variables and Secrets)" 탭에서 환경 변수를 구성하세요. 이 매개변수들은 n8n의 런타임 동작을 구동합니다. 테이블을 다음과 같이 채우세요.
| 변수 | 값/예시 | 설명 |
|---|---|---|
DB_POSTGRESDB_PASSWORD |
Supabase DB 비밀번호 (예: s3cur3P@ssw0rd) |
데이터베이스 접근 인증. 비밀로 표시. |
DB_POSTGRESDB_USER |
Supabase 사용자 (예: postgres) |
연결을 위한 데이터베이스 사용자 이름. |
DB_POSTGRESDB_HOST |
Supabase 호스트 (예: db.yourproject.supabase.co) |
서버 엔드포인트. |
DB_POSTGRESDB_PORT |
6543 | 고가용성을 위한 풀링된 포트. |
DB_POSTGRESDB_DATABASE |
postgres |
기본 데이터베이스 이름. |
N8N_ENCRYPTION_KEY |
생성된 키 (예: aXNDkPqW3mZ8vL5rT7uY2bN4jH6kM9pQ1sE0wR3tF2yG) |
자격 증명 및 민감한 데이터 암호화. |
WEBHOOK_URL |
https://yourprofile-n8n.hf.space/ |
수신 웹훅의 기본 URL. 후행 슬래시 포함. |
N8N_EDITOR_BASE_URL |
https://yourprofile-n8n.hf.space/ |
UI 접근 지점; 일관성을 위해 웹훅과 일치. |
N8N_VERSION |
stable 또는 특정 버전 (예: 1.0.0) |
n8n 릴리스 고정; 변경 시 자동 재시작. |
GENERIC_TIMEZONE |
UTC 또는 America/New_York |
워크플로우 타임스탬프 설정. |
TZ |
GENERIC_TIMEZONE과 일치 |
시스템 시간대 재정의. |
NODE_ENV |
production |
최적화 및 보안 헤더 활성화. |
민감한 변수(비밀번호, 키)를 비밀(secrets)로 표시하여 저장소에 암호화하세요. "스페이스 복제(Duplicate Space)"를 클릭하여 빌드를 트리거하세요. Hugging Face는 Docker 이미지를 컴파일하고, 종속성(Node.js, n8n)을 설치하며, 데이터베이스를 초기화합니다. "설정(Settings)" 탭에서 진행 상황을 모니터링하세요.
완료되면(5-10분), `N8N_EDITOR_BASE_URL`에서 인스턴스에 접속하세요. n8n의 직관적인 대시보드가 나타나며, 소유자 계정 설정을 요청합니다. 강력한 비밀번호로 자격 증명을 생성하고, 원하는 경우 이메일 알림을 활성화하세요.
확인을 위해 테스트 워크플로우를 활성화하세요. cron 노드를 Slack 알리미에 연결하세요. 수동으로 실행하고, 삽입을 위해 Supabase 로그를 확인하세요. 성공하면 엔드투엔드 기능이 확인됩니다.
SEO를 위해 UI를 사용자 정의하는 경우 Space의 index.html에 메타 태그를 삽입하세요.
<meta name="description" content="Hugging Face Spaces에서의 무료 n8n 자동화">
<meta name="keywords" content="n8n 배포, 무료 워크플로우 자동화, Hugging Face 튜토리얼">
이 방법은 크롤링 가능성을 향상시킵니다. 배포가 완료되었으니, 안정성을 위해 최적화하세요.
웹훅 및 OAuth 구성: n8n 인스턴스에서 보안 통합 활성화
배포 후, n8n을 웹훅과 OAuth를 통해 외부 서비스와 통합합니다. 이는 API 동기화 또는 소셜 게시와 같은 실제 자동화에 중요합니다. 여기에서의 잘못된 구성은 흐름을 방해하므로, 다음 정확한 단계를 따르세요.
웹훅부터 시작하세요. n8n에서 워크플로우에 웹훅 노드를 추가하고 HTTP 메서드를 POST로 설정하세요. 프로덕션 URL은 `WEBHOOK_URL`에서 자동으로 채워지며, 예: `https://yourprofile-n8n.hf.space/webhook/abc123`입니다. 페이로드를 curl로 테스트하세요.
curl -X POST https://yourprofile-n8n.hf.space/webhook/abc123 \
-H "Content-Type: application/json" \
-d '{"test": "data"}'
실행 로그를 모니터링하세요. 성공적으로 수신되면 하위 노드를 트리거합니다. 이제 Google Sheets 또는 Discord와 같은 서비스를 위한 OAuth를 처리합니다. n8n의 자격 증명 관리자는 Space와 일치하는 리디렉션 URI를 필요로 합니다. Google의 경우:
- console.cloud.google.com을 방문하여 새 OAuth 2.0 클라이언트 ID를 생성하세요.
- 승인된 리디렉션 URI를 `https://yourprofile-n8n.hf.space/rest/oauth2-credential/callback`으로 설정하세요.
- n8n에서 Google 자격 증명을 추가하고 클라이언트 ID/비밀을 입력하세요.
- 승인하세요. n8n은 Supabase 스토리지를 통해 토큰 갱신을 처리합니다.
Discord에 대해서도 반복하세요. 리디렉션 URI는 위와 동일하며, `bot` 및 `applications.commands`로 범위가 지정됩니다. 클라우드 자격 증명을 재사용하지 마세요. Hugging Face의 도메인이 다르므로 콜백이 무효화됩니다.
브라우저 개발자 도구를 통해 문제 해결: 302 리디렉션 또는 401 오류에 대한 네트워크 탭을 검사하세요. 필요한 경우 `N8N_OAUTH_REDIRECT_URL`을 조정하세요. 기본 URL로도 충분합니다.
이러한 구성은 안전하고 확장 가능한 통합을 가능하게 하여 n8n 배포가 프로덕션 트래픽을 효과적으로 처리하도록 보장합니다.
절전 모드 방지 및 Hugging Face에서 n8n의 24/7 가동 시간 보장
Hugging Face Spaces는 48시간 동안 활동이 없으면 절전 모드로 전환되어 n8n을 일시 중지하고 예약된 워크플로우를 중단시킵니다. 자동화된 핑을 사용하여 이를 적극적으로 완화할 수 있습니다.
n8n에서 자체 핑 워크플로우를 구현하세요. 24시간마다 cron 노드를 예약하여 자체 `WEBHOOK_URL/ping`에 HTTP GET 요청을 보내세요. 이 엔드포인트는 Space의 app.py에 간단한 Express 경로를 통해 추가되며, 200 OK로 응답하여 활동을 알립니다.
견고성을 위해 GitHub Actions를 통합하세요. Space 저장소에 `.github/workflows/keep-alive.yml`을 생성하세요.
name: Keep Alive
on:
schedule:
- cron: '0 */12 * * *' # 12시간마다
workflow_dispatch:
jobs:
ping:
runs-on: ubuntu-latest
steps:
- name: Ping Space
run: curl https://yourprofile-n8n.hf.space/ping
커밋하고 푸시하세요. Actions는 서버 측에서 실행되어 절전 모드를 우회합니다. GitHub 알림을 통해 모니터링하세요.
또는 UptimeRobot의 무료 티어를 사용하여 5분마다 URL에 핑을 보내세요. 이 외부 서비스는 내부 워크플로우 없이도 활성 상태를 유지하도록 보장합니다.
일반적인 문제 해결: 배포 문제 효율적으로 해결하기
세심한 설정에도 불구하고 문제가 발생할 수 있습니다. Hugging Face 로그를 사용하여 체계적으로 진단하고 해결하세요.
문제 1: 접근 시 404 오류. 원인: 스페이스 이름 불일치. 해결책: 설정(Settings) > 일반(General)에서 "n8n"으로 이름을 변경하고 다시 빌드하세요. 공개 가시성은 임베딩 블록 문제를 해결합니다.
문제 2: "스페이스 준비 중" 멈춤. 원인: 빌드 실패, 종종 유효하지 않은 환경 변수 때문. 해결책: 빌드 로그에서 구문 오류(예: 이스케이프되지 않은 비밀번호)를 확인하세요. 수정하고 새로 복제하세요.
문제 3: 데이터베이스 연결 끊김. 원인: 잘못된 Supabase 자격 증명 또는 포트. 해결책: `psql` 테스트로 유효성을 검사하세요. 포트를 6543으로 업데이트하고 스페이스를 다시 시작하세요.
문제 4: OAuth 실패. 원인: 잘못된 리디렉션 URI. 해결책: 정확한 `hf.space` 콜백으로 자격 증명을 다시 만드세요. 브라우저 캐시를 지우세요.
문제 5: Helmet 보안 헤더가 Iframe을 차단. 원인: 프로덕션 모드는 `X-Frame-Options: sameorigin`을 강제합니다. 해결책: `NODE_ENV=development`를 일시적으로 설정하거나, Dockerfile에서 헤더를 완화하기 위해 템플릿을 포크하세요.
ENV N8N_SECURE_COOKIE=FALSE
Hugging Face 콘솔을 통해 로그 접근: "로그(Logs)" 탭을 클릭하여 실시간 표준 출력/오류를 확인하세요. 문제를 정확히 파악하려면 "error"로 필터링하세요.
고급 디버깅을 위해 n8n의 디버그 모드를 활성화하세요. `N8N_LOG_LEVEL=debug` 환경 변수를 추가하세요. 이 상세 설정은 웹훅 페이로드를 추적하는 데 도움이 됩니다.
이러한 문제들을 사전에 해결함으로써 탄력적인 배포를 유지할 수 있습니다.
결론: 자신감을 가지고 배포, 자동화 및 확장
이제 Supabase와 모범 사례로 강화된 Hugging Face Spaces에 n8n을 무료로 배포하기 위한 포괄적인 청사진을 갖게 되었습니다. 이 설정은 API 오케스트레이션부터 콘텐츠 파이프라인에 이르기까지 무한한 자동화를 가능하게 하며, SEO 및 가동 시간을 최적화합니다.
통합을 원활하게 테스트하려면 Apidog를 무료로 다운로드하는 것을 잊지 마세요. 실험하고, 반복하고, 스페이스를 공유하세요. 커뮤니티 피드백은 혁신을 가속화합니다. 오늘 바로 배포를 시작하고 워크플로우를 변화시키세요。
