자동화 기초 03 환경변수 기초: 타임존/URL/실행 데이터(로그) 최소 설정

2편에서 Webhook 테스트로 “트리거 → 처리 → 실행” 흐름을 잡았다면, 3편은 셀프호스팅에서 가장 많이 터지는 포인트인 환경변수(Environment variables)를 “최소만” 정리합니다. n8n은 도커/도커 컴포즈 환경에서 environment: 항목으로 환경변수를 설정하는 방식이 공식 문서에 정리돼 있습니다. :contentReference[oaicite:0]{index=0}

이 글을 끝내면
  • 로컬에서도 반드시 맞춰야 하는 타임존 설정을 알고
  • 서버로 옮길 때 필수로 마주치는 URL/Webhook 관련 변수의 역할을 이해하고
  • 디스크/성능에 직결되는 실행 데이터(Executions) 저장/정리의 기본값과 관리 포인트를 잡을 수 있습니다.

0) 환경변수는 “로컬에서 대충”하면, 서버에서 100% 다시 합니다

로컬 단계에서는 localhost로만 접속하니까 문제가 안 보일 수 있습니다. 하지만 서버(도메인/HTTPS/리버스 프록시)로 넘어가는 순간, n8n이 표시하는 URL이 틀리거나(Webhook URL), 외부 서비스가 콜백을 못 보내거나, 실행 데이터가 쌓여 디스크가 터지는 문제가 한 번에 옵니다. 그래서 지금은 “최소 세트”만 먼저 고정합니다.

1) 최소 타임존 세트: GENERIC_TIMEZONE + TZ

스케줄(Cron)이나 날짜 처리 노드가 들어가는 순간 타임존이 꼬이면 디버깅이 지옥이 됩니다. 로컬부터 Asia/Seoul로 맞춰 두는 걸 추천합니다.

environment:
  - GENERIC_TIMEZONE=Asia/Seoul
  - TZ=Asia/Seoul

(참고) 도커/컴포즈에서 환경변수를 넣는 방식은 n8n 공식 “Configuration methods”에 예시가 있습니다. :contentReference[oaicite:1]{index=1}

2) URL/Webhook 세트: “서버로 갈 때” 꼭 필요해지는 변수들

2-1. n8n이 Webhook URL을 만드는 방식

n8n은 기본적으로 N8N_PROTOCOL, N8N_HOST, N8N_PORT를 조합해서 Webhook URL을 만들어 표시합니다. :contentReference[oaicite:2]{index=2} 그런데 리버스 프록시 뒤에서 동작하면 내부 포트(보통 5678)와 외부 포트(보통 443)가 달라져서 이 방식이 깨집니다. :contentReference[oaicite:3]{index=3}

2-2. 그래서 WEBHOOK_URL이 필요합니다

n8n이 리버스 프록시 뒤에 있을 때는 WEBHOOK_URL을 수동으로 설정해 에디터 UI에 올바른 Webhook URL이 표시되고, 외부 서비스에도 정확히 등록되게 해야 합니다. :contentReference[oaicite:4]{index=4}

서버(운영)에서 자주 쓰는 URL 관련 변수
  • N8N_PROTOCOL: 보통 https
  • N8N_HOST: 예) n8n.example.com
  • N8N_PORT: 내부 실행 포트(기본 5678)
  • WEBHOOK_URL: 예) https://n8n.example.com/ (리버스 프록시 뒤에서 필수) :contentReference[oaicite:5]{index=5}
  • N8N_PROXY_HOPS: 리버스 프록시 환경에서 권장 설정(보통 1) :contentReference[oaicite:6]{index=6}

이 URL 세트는 5~6편(서버/HTTPS/리버스프록시)에서 실제 compose 템플릿과 함께 완성합니다. 지금은 “왜 WEBHOOK_URL이 필요한지”만 확실히 이해하면 됩니다. :contentReference[oaicite:7]{index=7}

3) 실행 데이터(Executions) 최소 설정: 디스크 터지기 전에 잡자

n8n은 워크플로우 실행 결과(성공/실패/수동 실행 등)를 저장합니다. 특히 n8n 1.0부터는 “성공/실패/수동 실행을 기본 저장”으로 바뀌었고, SQLite 성능 저하를 막기 위해 실행 데이터 정리(prune) 기본값도 함께 안내합니다. :contentReference[oaicite:8]{index=8}

3-1. “어디에 저장되나”부터

기본 DB가 SQLite일 때는 실행 데이터가 쌓이면 디스크가 커질 수 있고, prune로 삭제해도 디스크 공간이 자동으로 줄지 않고 재사용될 수 있습니다. 필요하면 시작 시 vacuum 옵션을 통해 공간 정리 동작을 하도록 설정할 수 있습니다. :contentReference[oaicite:9]{index=9}

3-2. 실행 모드(regular/queue) 같은 기본 변수도 여기서 시작

실행 관련 환경변수 페이지에는 EXECUTIONS_MODE 같은 핵심 변수가 정리되어 있고, 파일 기반 설정(_FILE 접미사)도 지원합니다. :contentReference[oaicite:10]{index=10}

초보자용 운영 팁(지금은 개념만)
  • 로컬에서는 실행 데이터가 조금 쌓여도 괜찮지만, 서버에서는 반드시 “저장/보관/정리” 정책이 필요합니다. :contentReference[oaicite:11]{index=11}
  • 민감한 값은 _FILE 방식으로 파일에서 읽게 할 수 있습니다(운영에서 유용). :contentReference[oaicite:12]{index=12}

4) 로컬용 compose.yaml에 “최소 환경변수 세트” 적용 예시

1편에서 만든 로컬 compose.yaml에, 지금 편에서 다룬 “타임존 최소 세트”를 반영한 예시입니다. (서버용 URL/Webhook 변수는 5~6편에서 HTTPS/도메인 준비가 끝난 뒤에 넣습니다.)

services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      - NODE_ENV=production
      - N8N_PORT=5678
      - GENERIC_TIMEZONE=Asia/Seoul
      - TZ=Asia/Seoul
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:

도커 컴포즈에서 환경변수를 넣는 방식은 n8n 공식 “Configuration methods”에서 동일하게 설명합니다. :contentReference[oaicite:13]{index=13}

5) 안티그래비티 프롬프트 예시: “환경변수 최소 세트”를 정확히 뽑아내는 말투

프롬프트 1) 로컬 최소 세트 점검 + compose 반영

n8n을 Docker Compose로 로컬 운영 중이야.
공식 문서 기준으로만 안내해줘.

목표:
- 로컬에서 최소 환경변수 세트를 정리하고 compose.yaml에 반영
- 특히 타임존(Asia/Seoul)과 실행 데이터(Executions) 관련해서
  초보자가 '당장' 알아야 하는 최소만

원하는 출력:
1) 로컬에서 우선 적용할 환경변수 목록(이유 포함)
2) compose.yaml 예시(필요한 부분만)
3) 서버로 갈 때 추가될 URL/WEBHOOK 관련 변수는 "다음 단계"로 구분해서 설명

프롬프트 2) 리버스 프록시/웹훅 URL 개념만 미리 이해하기

지금은 로컬인데, 나중에 서버+HTTPS+리버스 프록시로 운영할 거야.
공식 문서 기준으로만, WEBHOOK_URL / N8N_HOST / N8N_PROTOCOL / N8N_PORT가
왜 필요한지 초보자 관점에서 예시로 설명해줘.

조건:
- 내부는 5678로 돌고, 외부는 443(HTTPS)로 공개되는 상황을 가정
- '어떤 값으로 설정해야 하는지'는 5~6편에서 다룰 거라
  여기서는 개념/실수 포인트 중심으로 정리해줘

다음 편 예고

4편에서는 “로컬에서 마음껏 실험해도 망하지 않는” 세팅을 만듭니다. 핵심은 볼륨/백업/실수 복구 루틴입니다. 자동화를 배우는 과정에서는 실수가 필연이라, 복구 루틴을 먼저 만들어두면 학습 속도가 훨씬 빨라집니다.

댓글 남기기