발행일: 2026-10-06(화) 11:44
홈›도서›하루 30분 n8n ④›성능 병목 진단과 최적화
DAY 20★★★

성능 병목 진단과 최적화

📖 이론10분
🛠️ 실습15분
🎯 미션5분

"병목은 항상 단 하나다. 그것을 찾아라."

— 엘리야후 골드랫 (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현재 실행 기록 수 확인
  1. 터미널에서 execution_entity 카운트 쿼리 실행
  2. 5만 건 이상이면 EXECUTIONS_DATA_PRUNE 설정 추가
  3. docker compose restart n8n 후 DB 크기 재확인
Step 2메모리 사용량 점검
  1. docker stats 명령어로 현재 컨테이너별 메모리 확인
  2. n8n 컨테이너가 설정 RAM의 80% 이상이면 최적화 필요
  3. docker-compose.yml에 mem_limit: 2g 설정 추가 고려
Step 3느린 워크플로우 찾기
  1. n8n Executions 탭에서 실행 시간이 긴 워크플로우 확인
  2. 가장 오래 걸리는 워크플로우 1개 선택해서 구조 분석
  3. Filter 노드 위치 조정 또는 Split In Batches 적용 검토
🚀 DAY 20 미션

현재 n8n 서버의 성능 상태를 진단하고, 실행 기록 자동 정리 설정을 완료한 뒤 가장 느린 워크플로우 1개를 최적화하세요.

☑️ 미션 체크리스트
  • docker stats로 메모리 사용량 확인 완료
  • execution_entity 카운트 확인 완료
  • EXECUTIONS_DATA_PRUNE 설정 완료 및 적용
  • 느린 워크플로우 1개 발견 및 최적화 적용
💡 힌트: 실행 기록이 적은 초기라면 Split In Batches 노드를 테스트용으로 만들어서 대용량 처리 방법을 익혀두세요.
🎯 성공 기준: 실행 기록 자동 정리 설정이 완료되고, DB 크기가 이전보다 줄었거나 더 이상 증가하지 않는 상태
← 이전
PART 3 미니 프로젝트: 10인 팀 n8n 운영 환경 설계
다음 →
Queue Mode로 n8n 수평 확장하기
← 목차로 돌아가기