TimewareTimeware
블로그 목록으로
블로그

n8n으로 Contentful + Slack + PostgreSQL 연동하기: 실전 워크플로 5가지

코딩 없이, 또는 최소한의 코드로 CMS-알림-DB를 연결하는 n8n 워크플로 실전 사례. Timeware에서 실제로 사용 중인 5개 워크플로 설계와 주의사항.

2026년 3월 5일Timeware Engineeringn8nautomationcontentfulpostgresqlworkflow
n8n으로 Contentful + Slack + PostgreSQL 연동하기: 실전 워크플로 5가지

요약

코딩 없이, 또는 최소한의 코드로 CMS-알림-DB를 연결하는 n8n 워크플로 실전 사례. Timeware에서 실제로 사용 중인 5개 워크플로 설계와 주의사항.

n8n으로 Contentful + Slack + PostgreSQL 연동하기: 실전 워크플로 5가지

Executive Summary - Topic: n8n 기반 SaaS 도구 통합 자동화 실전 패턴 - Target: 풀스택 개발자, 운영 엔지니어, 노코드/로우코드 자동화 담당자 - TL;DR 1: n8n Self-hosted는 월 비용 $0~$20로 Make.com/Zapier 대비 80% 절감 - TL;DR 2: Webhook → 처리 → 다중 액션 패턴이 80%의 유스케이스를 커버 - TL;DR 3: 에러 처리 없는 자동화는 시한폭탄 — Error Workflow를 반드시 연결

Timeware 사이트를 운영하면서 생각보다 많은 것을 n8n으로 자동화하고 있습니다. 처음에는 "이런 것도 되나?"였는데, 지금은 n8n 없이 어떻게 운영했나 싶을 정도입니다.

오늘은 실제로 사용 중인 5개 워크플로를 공유합니다. 설계 이유와 함께 실수했던 부분도 솔직하게 씁니다.

n8n을 선택한 이유

Zapier, Make.com과 비교해서 n8n을 선택한 주요 이유:

기준ZapierMake.comn8n (Self-hosted)
월 비용$49~$299$9~$99$0 (서버 비용만)
실행 횟수 제한있음있음없음
커스텀 코드제한적제한적JavaScript 자유 사용
Self-hosted불가불가가능 (Docker)
데이터 외부 전송있음있음없음 (Self-hosted)

저희는 VPS에 n8n을 Docker로 배포해 사용합니다. 초기 설정에 2~3시간이 걸리지만, 이후 운영 비용이 거의 없습니다.

yaml
1# docker-compose.yml (n8n self-hosted)
2version: '3.8'
3services:
4 n8n:
5 image: n8nio/n8n:latest
6 ports:
7 - "5678:5678"
8 environment:
9 - N8N_BASIC_AUTH_ACTIVE=true
10 - N8N_BASIC_AUTH_USER=admin
11 - N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}
12 - WEBHOOK_URL=https://n8n.yourdomain.com
13 - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
14 - DB_TYPE=postgresdb
15 - DB_POSTGRESDB_HOST=db
16 - DB_POSTGRESDB_DATABASE=n8n
17 - DB_POSTGRESDB_USER=n8n
18 - DB_POSTGRESDB_PASSWORD=${DB_PASSWORD}
19 volumes:
20 - n8n_data:/home/node/.n8n
21 depends_on:
22 - db
23
24 db:
25 image: postgres:17
26 environment:
27 POSTGRES_DB: n8n
28 POSTGRES_USER: n8n
29 POSTGRES_PASSWORD: ${DB_PASSWORD}
30 volumes:
31 - postgres_data:/var/lib/postgresql/data
32
33volumes:
34 n8n_data:
35 postgres_data:

워크플로 1: Contentful 게시 → Slack 알림 + 색인 제출

문제: 블로그 포스트가 Contentful에 게시됐을 때, 팀에 알리고 IndexNow로 검색엔진 색인을 빠르게 요청하고 싶다.

설계:

code
1[Contentful Webhook 트리거]
2
3[Webhook 노드: POST /webhook/contentful-publish]
4
5[Switch 노드: 이벤트 타입 분기]
6 ├─ 'ContentManagement.Entry.publish'
7 │ ↓
8 │ [HTTP Request: IndexNow API 호출]
9 │ ↓
10 │ [Slack: #blog-publish 채널 알림]
11
12 └─ 기타 이벤트 → 무시

주요 설정:

javascript
1// Slack 메시지 구성 (Function 노드)
2const entry = $input.item.json;
3const slug = entry.fields?.slug?.['en-US'];
4const title = entry.fields?.title?.['en-US'];
5const url = `https://www.timeware.kr/blog/${slug}`;
6
7return {
8 json: {
9 text: `📝 새 블로그 포스트가 게시됐습니다!`,
10 blocks: [
11 {
12 type: 'section',
13 text: {
14 type: 'mrkdwn',
15 text: `*<${url}|${title}>*\n${url}`
16 }
17 }
18 ]
19 }
20};

워크플로 2: 리드 폼 제출 → DB 저장 + 알림 + 자동 응답 이메일

문제: 진단 폼 제출 시 DB 저장, 팀 알림, 고객 자동 응답이 동시에 필요하다.

설계 (병렬 처리):

code
1[Webhook: POST /api/lead (Next.js에서 호출)]
2
3[데이터 검증 + 정제 (Function 노드)]
4
5[병렬 실행]
6 ├─ [PostgreSQL: leads 테이블에 INSERT]
7 ├─ [Slack: #new-leads 채널에 알림]
8 └─ [이메일: 고객에게 접수 확인 메일]

PostgreSQL 노드 설정:

sql
1INSERT INTO leads (
2 name, email, company, phone,
3 pain_point, current_system, expected_effect,
4 budget_range, submitted_at
5) VALUES (
6 $1, $2, $3, $4, $5, $6, $7, $8, NOW()
7)
8ON CONFLICT (email)
9DO UPDATE SET
10 updated_at = NOW(),
11 last_submission = excluded.submitted_at
12RETURNING id, email

중요:ON CONFLICT로 같은 이메일의 중복 제출을 처리합니다. 이걸 빠뜨리면 중복 리드가 쌓입니다.

워크플로 3: GitHub Actions 완료 → Slack 상태 업데이트

문제: 블로그 자동 발행 GitHub Actions 완료 시 팀에 결과를 알리고 싶다.

설계:

code
1[GitHub Webhook: workflow_run 이벤트]
2
3[Switch: conclusion 분기]
4 ├─ 'success' → Slack 성공 메시지
5 ├─ 'failure' → Slack 실패 알림 + 담당자 멘션
6 └─ 기타 → 무시
javascript
1// 실패 시 담당자 멘션 포함 메시지
2const workflow = $input.item.json.workflow_run;
3const isFailure = workflow.conclusion === 'failure';
4
5if (isFailure) {
6 return {
7 json: {
8 text: `🚨 GitHub Actions 실패\n*${workflow.name}*\n<@U1234567890> 확인 필요`,
9 channel: '#ops-alerts'
10 }
11 };
12}

워크플로 4: 정기 리드 리포트 (매주 월요일 09:00)

문제: 주간 리드 현황을 자동으로 집계해서 팀에 공유하고 싶다.

설계:

code
1[Cron 트리거: 매주 월요일 09:00 KST]
2
3[PostgreSQL: 주간 통계 쿼리]
4
5[데이터 포매팅 (Function 노드)]
6
7[Slack: #weekly-report 채널]

PostgreSQL 쿼리:

sql
1SELECT
2 COUNT(*) FILTER (WHERE submitted_at >= NOW() - INTERVAL '7 days') AS new_leads_7d,
3 COUNT(*) FILTER (WHERE submitted_at >= NOW() - INTERVAL '30 days') AS new_leads_30d,
4 COUNT(*) AS total_leads,
5 ROUND(AVG(CASE WHEN status = 'converted' THEN 1 ELSE 0 END)::NUMERIC * 100, 1) AS conversion_rate,
6 MODE() WITHIN GROUP (ORDER BY pain_point) AS top_pain_point
7FROM leads

워크플로 5: Contentful 초안 생성 → 스프레드시트 동기화

문제: 블로그 초안 목록을 Google Sheets에 자동으로 동기화해서 콘텐츠 캘린더로 사용하고 싶다.

설계:

code
1[Cron: 매일 08:00]
2
3[Contentful API: 모든 초안(draft) 엔트리 조회]
4
5[데이터 정제]
6
7[Google Sheets: upsert (slug 기준 중복 방지)]

절대 빠뜨리면 안 되는 것: Error Workflow

n8n에서 가장 중요하지만 가장 자주 빠뜨리는 설정: Error Workflow.

워크플로가 실패했을 때 아무것도 안 하면, 며칠 뒤에야 리드가 DB에 저장되지 않았다는 것을 발견하게 됩니다.

javascript
1// Error Workflow 노드 (Slack 알림)
2const error = $input.item.json;
3const workflowName = error.workflow?.name || 'Unknown Workflow';
4const errorMessage = error.execution?.error?.message || 'Unknown error';
5const executionId = error.execution?.id;
6
7return {
8 json: {
9 text: `🔴 n8n 워크플로 실패\n*${workflowName}*\n오류: ${errorMessage}\n실행 ID: ${executionId}`,
10 channel: '#ops-alerts'
11 }
12};

설정 방법: 워크플로 설정(Settings) → Error Workflow에서 에러 핸들러 워크플로를 지정합니다.

n8n 운영 팁

1. 실행 로그 보관 기간 설정

code
1# n8n 환경변수
2EXECUTIONS_DATA_PRUNE=true
3EXECUTIONS_DATA_MAX_AGE=336 # 14일 (시간 단위)

오래된 실행 로그가 쌓이면 DB가 커집니다. 14~30일 보관을 권장합니다.

2. 민감한 값은 Credentials로

API 키, 비밀번호는 워크플로 내 하드코딩 대신 n8n Credentials에 저장합니다. 암호화되어 저장되고, 여러 워크플로에서 재사용 가능합니다.

3. 웹훅 URL은 랜덤 경로 사용

code
1# 추측하기 어려운 웹훅 경로
2https://n8n.yourdomain.com/webhook/a3f8b9c2d1e4f7g6h5i0

마치며

n8n의 학습 곡선은 생각보다 낮습니다. 첫 번째 워크플로를 만드는 데 30분~1시간이면 됩니다. 그리고 한 번 익숙해지면, "이것도 자동화할 수 있겠는데?"라는 생각이 자꾸 납니다.

시작점으로 추천하는 첫 워크플로: Slack에서 /n8n-ping 명령어를 치면 "pong"을 응답하는 것. 아주 단순하지만, Webhook → Slack 연동의 기본을 익힐 수 있습니다.

FAQ

Q. n8n과 Zapier/Make.com 중 어떤 것을 선택해야 하나요? A. 기술 역량이 있고 데이터 보안이 중요하다면 n8n Self-hosted가 유리합니다. 비개발자가 주로 사용하거나 빠른 시작이 필요하다면 Make.com이 적합합니다. n8n은 월 비용이 거의 없지만 초기 설정에 기술적 노력이 필요합니다.

Q. n8n으로 처리할 수 없는 자동화는 어떤 경우인가요? A. 복잡한 ML/AI 추론이 필요한 경우, 1초 미만의 실시간 응답이 필요한 경우, 수백만 건 대용량 배치 처리는 n8n보다 전용 솔루션이 적합합니다. n8n은 이벤트 기반 통합과 중간 복잡도의 자동화에 최적화되어 있습니다.

Q. n8n 워크플로가 실패했을 때 어떻게 대응하나요? A. 반드시 Error Workflow를 설정하세요. 모든 워크플로에 Error Workflow를 연결하면 실패 시 즉시 Slack 알림을 받을 수 있습니다. n8n의 Executions 탭에서 실패한 실행을 확인하고 재시작할 수 있습니다.