> Hello World !!!

     

@syaku

n8n - 워크플로우 자동화 도구

728x90
반응형

n8n - 워크플로우 자동화 도구

n8n은 오픈소스 워크플로우 자동화 도구로, Node.js와 TypeScript를 기반으로 개발되었습니다. Zapier나 Make(구 Integromat)와 같은 워크플로우 자동화 도구의 대안으로 사용할 수 있습니다.

github - https://github.com/n8n-io

기술 스택

주요 구성요소:

  • TypeScript/Node.js 기반 백엔드
  • Vue.js 기반 프론트엔드
  • Express 웹 프레임워크

Docker Compose로 설치하기

1. 작업 디렉토리 및 볼륨 생성

mkdir n8n
cd n8n

// 볼륨 생성
docker volume create n8n_data

2. docker-compose.yml 파일 생성

services:
  n8n:
    image: n8nio/n8n:latest
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=user
      - N8N_BASIC_AUTH_PASSWORD=password
      - GENERIC_TIMEZONE=Asia/Seoul
      - TZ=Asia/Seoul
    volumes:
      - n8n_data:/home/node/.n8n
    restart: unless-stopped
volumes:
  n8n_data:
    external: true

최신 Docker Compose에서는 version 속성이 더 이상 필요하지 않게 되었습니다. 이전에는 Compose 파일의 스키마 버전을 지정하기 위해 사용되었지만, 현재는 불필요합니다.

3. 실행 및 관리

# 시작
docker-compose up -d

# 중지
docker-compose down

# 재시작
docker-compose restart

주요 특징

  • 노드 기반 워크플로우: 드래그 앤 드롭으로 쉽게 자동화 구성
  • 다양한 통합: 400개 이상의 서비스와 연동 가능
  • 커스텀 기능: JavaScript/TypeScript로 사용자 정의 노드 개발 가능
  • 셀프 호스팅: 개인 서버에 설치하여 데이터 주권 확보
  • 실시간 테스트: 워크플로우 작성 중 실시간으로 결과 확인 가능

활용 사례

  • API 통합 및 데이터 동기화
  • 데이터 변환 및 가공
  • 자동화된 알림 시스템 구축
  • 정기적인 데이터 백업
  • 소셜 미디어 자동화
  • 이메일 마케팅 자동화

보안 설정

기본 인증을 활성화하여 무단 접근을 방지할 수 있습니다. docker-compose.yml의 환경변수에서 다음 항목을 설정하세요:

  • N8N_BASIC_AUTH_ACTIVE
  • N8N_BASIC_AUTH_USER
  • N8N_BASIC_AUTH_PASSWORD

설치가 완료되면 웹 브라우저에서 localhost:5678로 접속하여 워크플로우를 구성할 수 있습니다.

n8n 파일 권한 보안 오류와 해결 방법

n8n에서 발생하는 파일 권한 관련 보안 오류에 대해 설명하고 이를 해결하는 방법을 알아보겠습니다.

권한 문제 개요

n8n 설정 파일(/home/node/.n8n/config)의 권한이 0644로 설정되어 있어 너무 개방적이라는 경고가 발생합니다. 이러한 권한 설정은 다른 사용자들이 설정 파일을 읽을 수 있게 허용하므로 민감한 정보가 포함된 경우 보안 위험이 될 수 있습니다.

권한 설정 이해하기

현재 권한(0644)의 의미:

  • 소유자: 읽기와 쓰기 가능 (6)
  • 그룹: 읽기만 가능 (4)
  • 기타 사용자: 읽기만 가능 (4)

해결 방법

방법 1: 자동 권한 적용 (권장)
다음 환경 변수를 설정하여 올바른 파일 권한을 자동으로 적용할 수 있습니다:

N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true

방법 2: 권한 검사 비활성화
현재 권한을 유지하고 경고를 무시하려면 다음과 같이 설정합니다:

N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false

방법 3: 수동 권한 수정
다음 명령어로 파일 권한을 더 제한적으로 변경할 수 있습니다:

chmod 600 /home/node/.n8n/config

보안 모범 사례

보안을 위해 다음 사항들을 권장합니다:

  • N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true 환경 변수를 설정하여 자동 권한 적용 사용
  • 민감한 정보가 포함된 설정 파일은 소유자만 읽을 수 있도록 제한
  • n8n의 보안 모범 사례 준수

추가 참고사항

  • 권한을 변경한 후에는 n8n을 재시작해야 변경사항이 적용됩니다
  • Docker를 사용하는 경우 볼륨 마운트 지점의 권한도 확인해야 합니다
  • 설정 파일에는 데이터베이스 자격 증명과 같은 민감한 정보가 포함될 수 있으므로 적절한 권한 설정이 매우 중요합니다

이러한 보안 설정을 통해 n8n 설정 파일을 안전하게 관리할 수 있으며, 잠재적인 보안 위험을 최소화할 수 있습니다.

n8n의 클러스터링 구성 가이드

n8n은 대규모 워크플로우 처리와 고가용성을 위한 클러스터링을 지원합니다. 클러스터링을 통해 워크로드를 분산하고 시스템의 안정성을 높일 수 있습니다.

클러스터링 아키텍처

큐 모드 클러스터링

큐 모드는 워크플로우 실행을 여러 워커 노드에 분산하는 방식입니다.

구성 요소:

  • 메인 인스턴스: 워크플로우 관리 및 트리거 수신
  • 워커 인스턴스: 실제 워크플로우 실행 담당
  • Redis: 큐 시스템으로 활용
  • PostgreSQL: 중앙 데이터 저장소

멀티 메인 구성 (엔터프라이즈)

고가용성을 위한 멀티 메인 설정을 제공합니다.

주요 특징:

  • 팔로워 프로세스: API 요청 처리, UI 제공, 웹훅 수신
  • 리더 프로세스: 타이머 실행, 폴링 작업, 메시징 처리
  • 로드 밸런서를 통한 트래픽 분산

Docker Compose로 클러스터 구성하기

services:
  n8n-main:
    image: n8nio/n8n
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=password
      - QUEUE_BULL_REDIS_HOST=redis
      - N8N_MODE=main
    ports:
      - "5678:5678"
    depends_on:
      - postgres
      - redis

  n8n-worker:
    image: n8nio/n8n
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=password
      - QUEUE_BULL_REDIS_HOST=redis
      - N8N_MODE=worker
    depends_on:
      - postgres
      - redis

  postgres:
    image: postgres:13
    environment:
      - POSTGRES_DB=n8n
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=password
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:6-alpine
    volumes:
      - redis_data:/data

volumes:
  postgres_data:
  redis_data:

클러스터 구성 시 고려사항

1. 데이터베이스 설정

  • PostgreSQL을 사용하여 워크플로우 데이터 중앙 관리
  • 적절한 백업 전략 수립 필요

2. 큐 시스템

  • Redis를 사용한 효율적인 작업 분배
  • 워커 노드 간 작업 분산 처리

3. 네트워크 구성

  • 보안을 위한 내부 네트워크 구성
  • 로드 밸런서 설정 (세션 지속성 필요)

4. 모니터링

  • 각 노드의 상태 모니터링
  • 워크플로우 실행 현황 추적
  • 시스템 리소스 사용량 관찰

확장성 관리

수평적 확장:

  • 워커 노드 추가로 처리 능력 향상
  • 필요에 따라 동적으로 노드 수 조절

수직적 확장:

  • 개별 노드의 리소스 할당량 증가
  • 데이터베이스 및 Redis 성능 최적화

운영 팁

  • 모든 노드는 동일한 n8n 버전 사용
  • 정기적인 백업 구성
  • 시스템 모니터링 도구 활용
  • 장애 복구 계획 수립
  • 정기적인 성능 테스트 수행

이러한 클러스터 구성을 통해 n8n은 대규모 워크플로우 처리와 고가용성을 제공하며, 비즈니스 요구사항에 맞춰 유연하게 확장할 수 있습니다.

n8n의 실행 모드 비교: 일반 모드 vs 클러스터 모드

n8n은 사용 환경과 규모에 따라 두 가지 실행 모드를 제공합니다. 각 모드의 특징과 차이점을 살펴보겠습니다.

일반(Regular) 모드

일반 모드는 단일 인스턴스로 실행되는 기본 설정입니다.

기본 구성:

  • 단일 n8n 인스턴스
  • SQLite 데이터베이스 (기본값)
  • 내장 큐 시스템
  • 단일 프로세스에서 모든 작업 처리

장점:

  • 간단한 설치와 구성
  • 최소한의 리소스 요구
  • 소규모 워크플로우에 적합
  • 별도의 데이터베이스 서버 불필요

제한사항:

  • 수평적 확장 불가
  • 단일 장애점 존재
  • 동시 처리 능력 제한

클러스터(Queue) 모드

클러스터 모드는 대규모 워크플로우 처리와 고가용성을 위한 설정입니다.

필수 구성 요소:

  • PostgreSQL 데이터베이스
  • Redis 메시지 브로커
  • 메인 노드와 워커 노드 구성

장점:

  • 높은 확장성
  • 워크로드 분산 처리
  • 고가용성 지원
  • 장애 복구 기능
  • 대규모 워크플로우 처리 가능

고려사항:

  • 복잡한 초기 설정
  • 추가 인프라 요구
  • 운영 비용 증가
  • 모니터링 필요성 증가

모드 선택 가이드

일반 모드 선택:

  • 개발 환경이나 테스트용
  • 소규모 팀이나 개인 사용
  • 적은 수의 워크플로우 실행
  • 간단한 자동화 작업

클러스터 모드 선택:

  • 프로덕션 환경
  • 대규모 워크플로우 처리
  • 고가용성 필요
  • 많은 동시 실행 필요
  • 확장 가능성 고려

주의사항

  • 일반 모드에서는 절대로 여러 인스턴스를 하나의 데이터베이스에 연결하지 마세요
  • 클러스터 모드로 전환 시 데이터 마이그레이션 계획이 필요합니다
  • 모든 노드는 동일한 n8n 버전을 사용해야 합니다
  • 적절한 모니터링과 백업 전략이 필요합니다

이러한 특징들을 고려하여 사용 환경과 요구사항에 맞는 모드를 선택하면 됩니다.

그외 참고

Docker의 볼륨(Volume)과 바인드 마운트(Bind Mount) 비교

Docker에서 데이터를 저장하는 두 가지 주요 방식의 차이점을 설명드리겠습니다.

볼륨(Volume)

특징:

  • Docker가 완벽하게 관리
  • /var/lib/docker/volumes/ 디렉토리에 저장
  • Docker CLI 명령어로 관리 가능
  • 백업과 마이그레이션이 용이
  • Linux와 Windows 컨테이너 모두 지원

장점:

  • 성능이 더 우수함 (특히 Mac, Windows에서)
  • 여러 컨테이너 간 안전한 공유 가능
  • Docker API를 통한 관리 가능
  • 컨테이너의 크기를 증가시키지 않음

바인드 마운트(Bind Mount)

특징:

  • 호스트 시스템의 파일 시스템에 직접 의존
  • 호스트의 절대 경로를 사용
  • 호스트 OS의 디렉토리 구조에 종속적
  • Docker CLI로 직접 관리 불가

사용 사례:

  • 설정 파일 마운트
  • 개발 환경에서 소스 코드 공유
  • 호스트와 컨테이너 간 즉각적인 파일 공유 필요 시

권장 사용 시나리오

볼륨 사용:

services:
  app:
    volumes:
      - data_volume:/app/data

volumes:
  data_volume:

바인드 마운트 사용:

services:
  app:
    volumes:
      - ./config:/app/config
      - ./src:/app/src
  • 볼륨: 데이터베이스 저장소, 애플리케이션 데이터 등 영구 저장이 필요한 경우
  • 바인드 마운트: 개발 환경, 설정 파일, 소스 코드 등 호스트와 직접적인 파일 공유가 필요한 경우

Docker는 일반적으로 볼륨 사용을 권장하지만, 사용 사례에 따라 적절한 방식을 선택하는 것이 중요합니다.

728x90
반응형