본문 바로가기
서버구축 (WEB,DB)

n8n Task Runner 기본적인 개념과 구성, 실행 모드 및 설정 방법

by 날으는물고기 2025. 2. 27.

n8n Task Runner 기본적인 개념과 구성, 실행 모드 및 설정 방법

Task Runner 개요

Task Runner는 보안성과 성능을 고려하여 특정 작업을 실행하는 일반적인 메커니즘입니다. 특히 n8n의 Code 노드에서 사용자가 제공한 JavaScript 코드를 실행하는 데 활용됩니다.

n8n에서는 기존 환경 변수 N8N_RUNNERS_ENABLED의 비활성화 상태가 더 이상 지원되지 않으며, 향후 버전에서 기본적으로 Task Runner가 활성화될 예정입니다. 따라서, 환경 변수를 설정하여 Task Runner를 활성화하는 것이 중요합니다.

Task Runner의 구성 요소

Task Runner 기능은 다음 세 가지 주요 구성 요소로 이루어집니다.

  1. Task Runner
    • 실제 작업을 수행하는 실행기입니다.
    • Code 노드의 JavaScript 코드를 실행합니다.
  2. Task Broker
    • 작업을 관리하고 Task Runner와 Task Requester 간의 통신을 조율하는 역할을 합니다.
    • n8n 인스턴스(메인 및 워커)가 Task Broker 역할을 수행합니다.
  3. Task Requester
    • 실행할 작업을 요청하는 구성 요소입니다.
    • n8n의 Code 노드가 Task Requester 역할을 합니다.

작업 처리 흐름

  1. Task Requester(Code 노드)가 작업 요청을 Task Broker(n8n 인스턴스)로 전송합니다.
  2. Task Runner는 Task Broker와 WebSocket을 통해 연결되며, 실행 가능한 작업을 대기합니다.
  3. Task Broker가 실행할 작업을 Task Runner에게 할당합니다.
  4. Task Runner가 JavaScript 코드를 실행하고, 결과를 Task Broker에 반환합니다.
  5. Task Broker는 결과를 Task Requester에게 전달합니다.

Task Runner의 실행 모드

Task Runner는 다음 두 가지 방식으로 실행할 수 있습니다.

1) 내부 모드(Internal Mode)

  • n8n 인스턴스가 Task Runner를 자식 프로세스(child process)로 실행합니다.
  • n8n 프로세스가 Task Runner의 라이프사이클을 관리하고, 동일한 UID/GID를 사용합니다.
  • 별도의 컨테이너 관리 없이 간단한 설정으로 실행 가능하지만, 격리 수준이 낮고 확장성이 부족할 수 있습니다.

2) 외부 모드(External Mode)

  • Task Runner가 n8n 인스턴스 외부에서 독립적으로 실행됩니다.
  • 일반적으로 Kubernetes 같은 오케스트레이션 툴을 사용하여 Side-Car 컨테이너로 배포됩니다.
  • Task Runner가 완전히 분리되어 독립적인 관리가 가능하며, 격리 수준이 높아 보안성이 증가합니다.
  • Queue 모드를 사용할 경우, 각 n8n 컨테이너(메인 및 워커)마다 자체 Task Runner가 필요합니다.

📌 Side-Car 컨테이너란?

  • Side-Car 패턴은 애플리케이션 컨테이너와 함께 동작하는 별도의 컨테이너를 의미합니다.
  • n8n이 실행되는 컨테이너 옆에서 Task Runner를 별도로 실행하여, 메인 프로세스와 격리된 작업 환경을 제공합니다.

외부 모드(External Mode) 설정 방법

외부 Task Runner를 설정하려면, n8n 인스턴스와 Task Runner 컨테이너의 환경 변수를 적절히 구성해야 합니다.

n8n 인스턴스 환경 변수 설정

환경 변수 설명
N8N_RUNNERS_ENABLED=true Task Runner를 활성화
N8N_RUNNERS_MODE=external 외부 모드로 실행
N8N_RUNNERS_AUTH_TOKEN=<랜덤한 보안 토큰> Task Runner와 Broker 간의 인증을 위한 보안 토큰
N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0 Task Broker가 외부 연결을 허용하도록 설정

💡 중요

  • 기본적으로 Task Broker는 localhost에서만 실행되지만, 여러 컨테이너가 실행되는 환경에서는 외부 연결을 허용해야 합니다.

Task Runner 컨테이너 설정

Task Runner는 n8n Docker 이미지에 포함되어 있으며, task-runner-launcher를 실행하는 방식으로 구동됩니다.

 

실행 명령어

command: ["/usr/local/bin/task-runner-launcher", "javascript"]

Task Runner 컨테이너 환경 변수 설정

환경 변수 설명
N8N_RUNNERS_AUTH_TOKEN=<랜덤한 보안 토큰> Task Broker와 연결하기 위한 인증 토큰 (n8n 인스턴스와 동일해야 함)
N8N_RUNNERS_MAX_CONCURRENCY=5 동시에 실행할 수 있는 최대 Task 수
N8N_RUNNERS_TASK_BROKER_URI=localhost:5679 Task Broker 서버 주소 (n8n 인스턴스의 내부 주소)
N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=15 비활성 상태일 때 Task Runner가 종료되기 전 대기하는 시간(초)
NODE_OPTIONS=--max-old-space-size=<메모리 제한> Task Runner의 Node.js 프로세스의 메모리 제한
GENERIC_TIMEZONE=<타임존> n8n 인스턴스와 동일한 기본 타임존 설정

🔹 추가 정보

  • N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=0으로 설정하면 자동 종료 기능이 비활성화됩니다.
  • NODE_OPTIONS를 적절히 설정하면 메모리 사용량을 최적화할 수 있습니다.

Task Runner 사용 시 고려 사항

✅ 보안

  • 인증 토큰(N8N_RUNNERS_AUTH_TOKEN)을 반드시 설정하여 Task Runner가 인증된 연결만 허용하도록 구성해야 합니다.
  • 외부에서 접근 가능한 Task Runner 환경에서는 반드시 네트워크 접근 제한을 설정해야 합니다.

✅ 성능 최적화

  • N8N_RUNNERS_MAX_CONCURRENCY 값을 조정하여 동시 실행 가능한 Task 수를 최적화해야 합니다.
  • 메모리 설정(NODE_OPTIONS)을 조정하여 과도한 리소스 사용을 방지합니다.

✅ 확장성

  • Kubernetes와 함께 사용하면 확장성이 뛰어남 (필요할 때 자동으로 Task Runner를 증설 가능)
  • Queue 모드를 사용할 경우 각 n8n 인스턴스에 자체 Task Runner가 필요하므로, 컨테이너 간 Task Broker 통신을 원활하게 구성해야 합니다.

결론

  • Task Runner는 보안성과 성능을 고려하여 JavaScript 코드 실행을 분리하는 기능입니다.
  • Internal Mode는 간단하지만 격리 수준이 낮고, External Mode는 보안성과 확장성이 뛰어납니다.
  • 환경 변수 설정을 올바르게 구성해야 안정적인 Task Runner 운영이 가능합니다.
  • 특히 인증 토큰, Broker 주소, 메모리 제한, 동시 실행 개수 등을 적절히 설정하여 운영해야 합니다.

🚀 추천 설정

  • 소규모 환경: Internal Mode
  • 보안이 중요한 환경: External Mode + Side-Car 패턴
  • 대규모 환경(Kubernetes 사용): Queue Mode + Task Runner 분리

 

이제 n8n에서 Task Runner를 올바르게 설정하고 활용할 수 있습니다. 🎯

728x90

댓글