본문으로 건너뛰기

루프

n8n에서의 루프

여러 데이터 항목을 처리하거나 특정 작업을 반복적으로 실행해야 할 때(예: 주소록에 있는 모든 연락처에게 메시지를 보내는 경우) 루프(loop)를 사용하면 매우 유용합니다. n8n은 이러한 반복 작업을 자동으로 처리하므로, 대부분의 경우 워크플로 내에서 명시적으로 루프를 구성할 필요가 없습니다. 다만 몇 가지 예외적인 노드가 존재합니다.

n8n에서 루프 사용하기

n8n의 노드는 임의 개수의 데이터 항목을 입력으로 받아 처리한 후 결과를 출력합니다. 각 데이터 항목은 개별 데이터 포인트 또는 노드 출력 테이블의 한 행으로 이해할 수 있습니다.

Customer Datastore 노드 출력

일반적으로 노드는 각 데이터 항목에 대해 한 번씩 실행됩니다. 예를 들어, Customer Datastore 노드에 있는 각 고객의 이름과 메모를 Slack 메시지로 전송하려면 다음 단계만 수행하면 됩니다:

  1. Slack 노드를 Customer Datastore 노드에 연결합니다.
  2. 파라미터를 설정합니다.
  3. 노드를 실행합니다.

데이터 항목 하나당 메시지 하나씩, 총 다섯 개의 메시지를 받게 됩니다.

이처럼 n8n에서는 노드를 명시적으로 순환 구조로 연결하지 않아도 여러 데이터 항목을 일괄 처리할 수 있습니다.

루프 생성하기

n8n은 일반적으로 입력된 모든 데이터 항목을 자동으로 개별 처리하지만, 특정 상황에서는 수동으로 루프를 만들어야 할 수도 있습니다. 어떤 노드들이 모든 데이터 항목을 자동으로 개별 처리하지 않는지 확인하려면 「노드 예외 목록」을 참조하세요.

조건이 만족될 때까지 루프 실행

n8n 워크플로에서 루프를 만들려면, 한 노드의 출력을 이전 노드의 입력으로 연결하세요. 그리고 IF 노드를 추가하여 언제 루프를 중단할지 판단합니다.

다음은 IF 노드를 사용해 루프를 구현한 예제 워크플로입니다:

예제 워크플로의 에디터 뷰

모든 데이터 항목이 처리될 때까지 루프 실행

모든 데이터 항목이 처리될 때까지 루프를 실행하려면 Loop Over Items 노드를 사용하세요. 각 데이터 항목을 개별적으로 처리하려면 배치 크기(Batch Size)를 1로 설정합니다.

또한 데이터를 배치 단위로 처리할 수도 있습니다. 대량의 입력 데이터를 처리하거나 특정 배치의 반환 데이터를 처리해야 할 때, 이 방식은 API 속도 제한(rate limit)을 피하는 데 도움이 됩니다.

Loop Over Items 노드는 모든 입력 데이터 항목을 지정된 배치 크기로 나누어 다음 노드에 전달한 후 자동으로 종료되므로, 별도로 IF 노드를 추가하여 루프를 중단시킬 필요가 없습니다.

노드 예외 사항

다음 노드 및 작업은 워크플로 내에서 수동으로 루프를 설계해야 합니다:

  • CrateDB: insertupdate 작업은 한 번만 실행됩니다.
  • Code 노드 (모든 데이터 항목에 대해 한 번 실행 모드): 입력된 코드 스니펫을 기반으로 모든 데이터 항목을 처리합니다.
  • Execute Workflow 노드 (모든 데이터 항목에 대해 한 번 실행 모드).
  • HTTP Request: 페이지네이션(pagination) 로직을 직접 처리해야 합니다. API 호출이 페이지네이션된 결과를 반환하는 경우, 각 페이지의 데이터를 가져오기 위해 루프를 만들어야 합니다.
  • Microsoft SQL: insert, update, delete 작업은 한 번만 실행됩니다.
  • MongoDB: insertupdate 작업은 한 번만 실행됩니다.
  • QuestDB: insert 작업은 한 번만 실행됩니다.
  • Redis:
    • Info(정보): 입력 데이터에 항목이 여러 개 있더라도 이 작업은 한 번만 실행됩니다.
  • RSS Read: 요청된 URL에 대해 한 번만 실행됩니다.
  • TimescaleDB: insertupdate 작업은 한 번만 실행됩니다.