์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿš€ n8n + PostgreSQL Docker Compose ์„ค์น˜ ํŠœํ† ๋ฆฌ์–ผ

์•ˆ๋…•ํ•˜์„ธ์š”! ์˜ค๋Š˜์€ ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ ํˆด์ธ n8n์„ PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ•จ๊ป˜ Docker Compose๋กœ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค๋“œ๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์กฐ๊ธˆ ๋ณต์žกํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ฐจ๊ทผ์ฐจ๊ทผ ๋”ฐ๋ผ์˜ค์‹œ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ n8n์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


n8n์ด ๋ญ์˜ˆ์š”?

n8n์€ ์˜คํ”ˆ์†Œ์Šค ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™” ํˆด์ด์—์š”.
์‰ฝ๊ฒŒ ๋งํ•ด, ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ์ž๋™ํ™”ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด:

  • ์ด๋ฉ”์ผ์ด ์˜ค๋ฉด ์ž๋™์œผ๋กœ ๊ตฌ๊ธ€ ์‹œํŠธ์— ๊ธฐ๋ก
  • RSS ํ”ผ๋“œ์—์„œ ์ƒˆ ๊ธ€์ด ์˜ฌ๋ผ์˜ค๋ฉด Slack์œผ๋กœ ์•Œ๋ฆผ ๋ณด๋‚ด๊ธฐ
  • API์—์„œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์™€์„œ DB์— ์ €์žฅ

์ด๋Ÿฐ ๊ฑธ ํด๋ฆญ ๋ช‡ ๋ฒˆ๋งŒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.


1. Docker Compose ํŒŒ์ผ ์ค€๋น„

๋จผ์ €, docker-compose.yml ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
์•„๋ž˜ ๋‚ด์šฉ์„ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด์„œ ๋ถ™์—ฌ ๋„ฃ์–ด ์ฃผ์„ธ์š”.

version: '3.8'

services:
  postgres:
    image: postgres:16
    container_name: postgres_n8n
    restart: always
    environment:
      POSTGRES_USER: n8nuser
      POSTGRES_PASSWORD: yourpasswd # ๊ผญ ๋‹ค๋ฅธ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋ณ€๊ฒฝ!
      POSTGRES_DB: n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - n8n_network

  n8n:
    image: n8nio/n8n:1.114.2 # ํŠน์ • ๋ฒ„์ „์œผ๋กœ ์‹คํ–‰
    container_name: n8n_workflow
    restart: always
    ports:
      - "5678:5678"
    environment:
      DB_TYPE: 'postgresdb'
      DB_POSTGRESDB_HOST: postgres_n8n
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8nuser
      DB_POSTGRESDB_PASSWORD: yourpasswd # ์œ„์—์„œ ์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๋™์ผํ•ด์•ผ ํ•จ
      N8N_ENCRYPTION_KEY: 'secretkey425524qdfe' # ๊ผญ ์ž์‹ ๋งŒ์˜ ํ‚ค๋กœ ๋ณ€๊ฒฝ!
      NODE_FUNCTION_ALLOW_EXTERNAL: '*' # ์™ธ๋ถ€ ๋ชจ๋“ˆ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
      GENERIC_TIMEZONE: 'Asia/Seoul'
      WEBHOOK_URL: 'https://your-domain.com' # ๋„๋ฉ”์ธ์ด ์—†๋‹ค๋ฉด ์ด ์ค„์€ ์ง€์›Œ๋„ ๋จ
    volumes:
      - D:/Docker/n8n:/home/node/.n8n # ์œˆ๋„์šฐ ๊ธฐ์ค€ ์ €์žฅ ๊ฒฝ๋กœ
    depends_on:
      - postgres
    networks:
      - n8n_network

volumes:
  postgres_data:

networks:
  n8n_network:

2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜(์„ค์ • ๊ฐ’) ์‚ดํŽด๋ณด๊ธฐ

์ด ๋ถ€๋ถ„์€ ๊ผญ ํ™•์ธํ•ด ์ฃผ์„ธ์š” ๐Ÿ‘‡

  • POSTGRES_PASSWORD: DB ๋น„๋ฐ€๋ฒˆํ˜ธ โ†’ ์ ˆ๋Œ€ ๊ทธ๋Œ€๋กœ ๋‘์ง€ ๋ง๊ณ  ์ž์‹ ๋งŒ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋ฐ”๊พธ์„ธ์š”.
  • N8N_ENCRYPTION_KEY: ์›Œํฌํ”Œ๋กœ์šฐ ์•ˆ์˜ ๋ฏผ๊ฐ ์ •๋ณด๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋Š” ํ‚ค โ†’ ๊ผญ ๋žœ๋ค ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝํ•˜์„ธ์š”.
  • WEBHOOK_URL: ๋„๋ฉ”์ธ์ด ์—†๋‹ค๋ฉด ๊ทธ๋ƒฅ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.
  • volumes: n8n๊ณผ PostgreSQL์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ ์ €์žฅํ•  ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. (์œˆ๋„์šฐ/๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•˜์„ธ์š”.)

3. ์‹คํ–‰ํ•˜๊ธฐ

ํ„ฐ๋ฏธ๋„(๋˜๋Š” PowerShell)์„ ์—ด๊ณ  docker-compose.yml์ด ์žˆ๋Š” ํด๋”๋กœ ์ด๋™ํ•œ ๋’ค ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

docker-compose up -d

์ž ์‹œ ๊ธฐ๋‹ค๋ฆฌ๋ฉด PostgreSQL๊ณผ n8n์ด ๋™์‹œ์— ์‹คํ–‰๋ผ์š”.


4. ์ ‘์†ํ•ด๋ณด๊ธฐ

๋ธŒ๋ผ์šฐ์ €์—์„œ ์•„๋ž˜ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.

http://localhost:5678

n8n ์ดˆ๊ธฐ ํ™”๋ฉด์ด ๋œจ๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค ๐ŸŽ‰


5. ๋งˆ๋ฌด๋ฆฌ

์—ฌ๊ธฐ๊นŒ์ง€ ๋”ฐ๋ผ์˜ค์…จ๋‹ค๋ฉด ์ด์ œ n8n์„ PostgreSQL๊ณผ ํ•จ๊ป˜ ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ…Œ์ŠคํŠธ ์šฉ๋„๋ผ๋ฉด SQLite๋กœ๋„ ์ถฉ๋ถ„ํ•˜์ง€๋งŒ,
  • ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” PostgreSQL์„ ์“ฐ๋Š” ๊ฒŒ ํ›จ์”ฌ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ๋ถ€ํ„ฐ๋Š” ์ง์ ‘ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋งŒ๋“ค๊ณ , ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ๋งˆ์Œ๊ป ์ž๋™ํ™”ํ•ด๋ณด์„ธ์š”.