Loop · Split In Batches
1만 건 메일 발송, 5천 행 API 호출 — 한 번에 다 보내면 Rate Limit 또는 메모리 초과. 100개씩 끊어 보내고 잠시 쉬는 패턴이 정공법.
Ch.13 의 Code 노드로 데이터를 가공할 수 있게 됐다면, 이번엔 그걸 대량으로 처리하는 패턴. Slack 노드에 1만 건 그냥 던지면 Rate Limit 에서 폭망. OpenAI API 도 분당 호출 제한. 답은 — 100개씩 끊어 보내고 잠시 wait.
Split In Batches 노드의 동작

이 노드의 동작은 살짝 특이 — 입력 items 를 N개씩 끊어 자기 자신을 여러 번 출력합니다. 한 번 실행마다 N 개씩 통과시키고, 후속 노드들이 다 끝나면 다시 다음 N 개. 모든 배치가 끝날 때까지 반복.
핵심 패턴 — Wait 와의 짝
Split In Batches 뒤에 일반 노드를 한 번 실행한 후 다시 처음으로 돌아가게 하려면 — Wait 노드 또는 마지막 노드 출력을 다시 Split In Batches 로 연결합니다. n8n 캔버스에서 화살표를 거꾸로 그리면 됨 (루프).
Schedule → Get Rows(시트 전체) → Split In Batches(50개) → Send Email → Wait(2초) → 다시 Split In Batches 로 루프이 패턴으로 1만 건이라도 (50개 × 200 배치 × 2초 = 약 7분) 안전하게 발송. Rate Limit 안 걸림.
Rate Limit 별 권장 Batch Size
서비스 doc 확인 후 한도의 50~70% 로 설정. 너무 빠듯하면 가끔 일시적 429 발생.
실수 패턴 + 진행 상황 추적
Split In Batches 만 추가하고 다음 노드들을 일직선으로 연결 → 첫 100개만 처리되고 워크플로 끝남. 마지막 노드를 다시 Split In Batches 로 연결해야 함.
1만 행을 한꺼번에 Get Rows 로 불러오면 메모리 부담. 가능하면 Limit + Offset 으로 시트도 끊어 읽기. n8n 컨테이너 메모리 1GB 라면 5천 행이 안전 상한.
진행 상황 추적은 $runIndex 로 — Split In Batches 내부 변수, 현재 몇 번째 배치인지. Slack 알림 노드에 ={{ "배치 " + $runIndex + "/" + Math.ceil($json.totalItems / 100) + " 완료" }} 식으로 매 배치마다 진행 알림 가능.
실전 — 1만 건 LLM 요약 워크플로
RSS 50 피드의 새 글 5천 건을 OpenAI gpt-4o-mini 로 요약해 시트에 누적하는 시나리오:
OpenAI gpt-4o-mini 의 분당 한도 약 500 TPM 이라 batch 20 + 2초 wait = 분당 600 호출이 안전. 5000건 처리 시간 = 약 8분. 시트 권한 제한도 함께 안 걸림.
이 패턴이 운영 환경의 "대량 처리" 표준 — Split In Batches 가 메모리·Rate Limit 두 가지 문제를 한 번에 푸는 만능 도구.
다음 Ch.15 — Merge. 여러 흐름을 다시 하나로 합치는 패턴. Split 했으면 결국 Merge 도 알아야.