"병목은 항상 단 하나다. 그것을 찾아라."
— 엘리야후 골드랫 (Eliyahu M. Goldratt, 『더 골』 저자) 🎯 오늘의 학습 목표 n8n 성능 저하의 5가지 원인을 파악하고 진단할 수 있다. Split In Batches 노드로 대용량 데이터를 효율적으로 처리할 수 있다. 실행 기록 과다 누적을 자동으로 정리하는 설정을 할 수 있다. n8n이 느려지는 5가지 원인 원인 1 — 대용량 데이터를 메모리에 한 번에 올림
엑셀 파일 10만 행을 한 번에 처리하려고 하면 RAM이 부족해집니다. Split In Batches 노드로 청크(작은 단위)로 나눠서 처리하세요.
원인 2 — 루프 안에서 불필요한 API 호출 반복
1000명 고객을 각각 API로 업데이트하는 방식을 배치 API로 한 번에 처리하는 방식으로 바꿉니다.
원인 3 — 실행 기록 과다 누적
오래 운영하면 DB가 무거워집니다. 5만 건 이상이면 정리가 필요합니다.
원인 4 — 단일 프로세스 과부하
Queue Mode(DAY 21)로 해결합니다.
원인 5 — 비효율적인 노드 순서
Filter 노드를 앞에 두면 뒤에서 처리할 데이터가 줄어들어 효율적입니다. 무거운 처리(API 호출, DB 쿼리)는 최대한 뒤로 미루고 필터링을 먼저 하세요.
실행 기록 수 확인
bash
docker compose exec postgres psql -U n8n_user n8n_db \
-c "SELECT COUNT(*) FROM execution_entity;"복사 실행 기록 자동 정리 설정 (.env)
dotenv
EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=30
EXECUTIONS_DATA_PRUNE_MAX_COUNT=50000복사 메모리 사용량 모니터링
bash
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}"복사 DB 전체 크기 및 테이블별 크기 확인 (상위 10개)
bash
# DB 전체 크기
docker compose exec postgres psql -U n8n_user n8n_db \
-c "SELECT pg_size_pretty(pg_database_size('n8n_db'));"
# 테이블별 크기 (상위 10개)
docker compose exec postgres psql -U n8n_user n8n_db \
-c "SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC LIMIT 10;"복사 메모리 제한 설정 (docker-compose.yml)
yaml
services:
n8n:
mem_limit: 2g
memswap_limit: 2g복사 🛠️ DAY 20 실습 Step 1 현재 실행 기록 수 확인
터미널에서 execution_entity 카운트 쿼리 실행 5만 건 이상이면 EXECUTIONS_DATA_PRUNE 설정 추가 docker compose restart n8n 후 DB 크기 재확인 Step 2 메모리 사용량 점검
docker stats 명령어로 현재 컨테이너별 메모리 확인 n8n 컨테이너가 설정 RAM의 80% 이상이면 최적화 필요 docker-compose.yml에 mem_limit: 2g 설정 추가 고려 Step 3 느린 워크플로우 찾기
n8n Executions 탭에서 실행 시간이 긴 워크플로우 확인 가장 오래 걸리는 워크플로우 1개 선택해서 구조 분석 Filter 노드 위치 조정 또는 Split In Batches 적용 검토 🚀 DAY 20 미션 현재 n8n 서버의 성능 상태를 진단하고, 실행 기록 자동 정리 설정을 완료한 뒤 가장 느린 워크플로우 1개를 최적화하세요.
☑️ 미션 체크리스트 docker stats로 메모리 사용량 확인 완료 execution_entity 카운트 확인 완료 EXECUTIONS_DATA_PRUNE 설정 완료 및 적용 느린 워크플로우 1개 발견 및 최적화 적용 💡 힌트: 실행 기록이 적은 초기라면 Split In Batches 노드를 테스트용으로 만들어서 대용량 처리 방법을 익혀두세요.
🎯 성공 기준: 실행 기록 자동 정리 설정이 완료되고, DB 크기가 이전보다 줄었거나 더 이상 증가하지 않는 상태