Set / Edit Fields / Split In Batches — 데이터 정제의 기술

Set / Edit Fields / Split In Batches — 데이터 정제의 기술

API가 데이터를 내 마음대로 주지 않는다. 필드 이름이 다르고, 불필요한 데이터가 섞여 있고, 배열이 중첩되어 있다. 데이터 정제 노드는 이 혼돈을 질서로 바꿔준다.

Edit Fields (Set) 노드

데이터를 원하는 형태로 가공하는 가장 기본적인 노드다. 필드를 추가하고, 이름을 바꾸고, 필요 없는 것을 제거한다.

매핑 모드

모드 설명 적합한 경우
Manual Mapping 필드를 하나씩 수동 지정 정밀한 데이터 가공
Auto-Map Input Fields 입력 필드를 자동으로 그대로 통과 일부 필드만 추가/수정

Manual Mapping 사용법

  1. "+ Add Field" 클릭
  2. Name: 출력할 필드 이름
  3. Type: 데이터 타입 (String, Number, Boolean, Object, Array)
  4. Value: 값 (고정값 또는 Expression)

예제: API 응답 데이터 정제

입력 (API 응답):

{
  "user_first_name": "길동",
  "user_last_name": "홍",
  "user_email_address": "[email protected]",
  "account_created_at": "2026-01-15T09:30:00Z",
  "internal_user_id": "USR-12345",
  "debug_info": {...}
}

Edit Fields 설정:

이름:    {{ $json.user_last_name + $json.user_first_name }}
이메일:  {{ $json.user_email_address }}
가입일:  {{ DateTime.fromISO($json.account_created_at).toFormat('yyyy-MM-dd') }}
Keep Only Set Fields: ON

출력 (정제된 데이터):

{
  "이름": "홍길동",
  "이메일": "[email protected]",
  "가입일": "2026-01-15"
}

internal_user_id, debug_info 등 불필요한 필드가 제거되고, 필드 이름도 한글로 정리되었다.

Keep Only Set Fields 옵션

ON OFF
직접 설정한 필드 출력 기존 필드 유지 + 새 필드 추가
불필요한 데이터 제거에 적합 기존 데이터에 필드를 추가할 때 적합

Split Out 노드 — 배열을 펼친다

하나의 아이템 안에 배열 데이터가 있을 때, 배열의 각 요소를 개별 아이템으로 분리한다.

문제 상황

// 하나의 아이템
{
  "orderId": "ORD-001",
  "products": [
    { "name": "키보드", "price": 50000 },
    { "name": "마우스", "price": 30000 },
    { "name": "모니터", "price": 300000 }
  ]
}

이 상태에서 각 상품을 개별 처리하려면 배열을 "펼쳐야" 한다.

Split Out 설정

Field To Split Out: products
Include: Other fields (orderId를 각 아이템에 포함)

결과

// 3개의 개별 아이템으로 분리
[
  { "orderId": "ORD-001", "name": "키보드", "price": 50000 },
  { "orderId": "ORD-001", "name": "마우스", "price": 30000 },
  { "orderId": "ORD-001", "name": "모니터", "price": 300000 }
]

이제 각 상품에 대해 개별적으로 후속 처리가 가능하다.


Aggregate 노드 — 펼쳐진 것을 다시 합친다

Split Out의 반대. 여러 아이템을 하나로 합친다.

주요 모드

모드 설명
Aggregate Individual Fields 특정 필드의 값들을 배열로 모은다
Aggregate All Item Data 모든 아이템을 하나의 배열로 합친다

예제: 이름 목록 만들기

// 입력: 3개 아이템
[
  { "name": "홍길동", "score": 85 },
  { "name": "김철수", "score": 92 },
  { "name": "이영희", "score": 78 }
]

Aggregate 설정:

Mode: Aggregate Individual Fields
Field: name → Output Field: names
Field: score → Output Field: scores

결과:

{
  "names": ["홍길동", "김철수", "이영희"],
  "scores": [85, 92, 78]
}

Split In Batches — 대량 데이터 분할 처리

API에는 속도 제한(Rate Limit) 이 있다. 한 번에 1000개의 요청을 보내면 대부분의 API가 429 Too Many Requests 에러를 반환한다.

Split In Batches 노드는 데이터를 묶음(batch) 단위로 나눠서 처리한다.

기본 동작

입력: 1000개 아이템
         │
[Split In Batches: 50개씩]
         │
  Batch 1: 아이템 1~50   → [API 호출] → [Wait: 1초]
  Batch 2: 아이템 51~100  → [API 호출] → [Wait: 1초]
  Batch 3: 아이템 101~150 → [API 호출] → [Wait: 1초]
  ...
  Batch 20: 아이템 951~1000 → [API 호출]

설정

설정 설명
Batch Size 한 번에 처리할 아이템 수

워크플로우 구조

Split In Batches는 루프 구조를 만든다:

[Split In Batches] ──▶ [처리 노드] ──▶ [Split In Batches로 되돌아감]
     (Done 출력) ──▶ [완료 후 노드]

두 개의 출력이 있다: - Loop: 아직 처리할 배치가 남아있을 때 - Done: 모든 배치 처리 완료

Rate Limiting 패턴

[Split In Batches: 10개] → [HTTP Request] → [Wait: 1초] → [Split In Batches]
                           (Done) → [완료 알림]

Wait 노드를 사이에 넣으면 배치 간 대기 시간을 추가할 수 있다. 이것으로 API 속도 제한을 우회한다.


Rename Keys 노드

필드 이름을 일괄 변경하는 전용 노드. Edit Fields보다 간편하게 이름만 바꿀 수 있다.

사용법

Old Key Name: user_email_address
New Key Name: email

Old Key Name: user_first_name
New Key Name: firstName

언제 쓰는가?

  • API 응답 필드명이 내 시스템과 다를 때
  • snake_case → camelCase 변환이 필요할 때
  • 기존 데이터는 유지하고 이름만 바꿀 때

실전 워크플로우: CSV 데이터 정제 파이프라인

CSV 파일의 데이터를 정제해서 DB에 넣는 파이프라인을 설계해보자.

[Schedule] → [HTTP: CSV 다운로드] → [Extract From File] → [Filter: 빈 행 제거]
                → [Edit Fields: 정제] → [Split In Batches: 100개] → [DB Insert]

Step 1: CSV 다운로드

HTTP Request:
  Method: GET
  URL: https://example.com/data/export.csv
  Response Format: File

Step 2: CSV → JSON 변환

Extract From File:
  Operation: Extract From CSV
  Header Row: true

Step 3: 빈 행 필터링

Filter:
  Condition: $json.email is not empty

Step 4: 데이터 정제

Edit Fields:
  이름: {{ $json["이름"].trim() }}
  이메일: {{ $json["이메일"].toLowerCase().trim() }}
  전화번호: {{ $json["연락처"].replace(/-/g, '') }}
  가입일: {{ DateTime.fromFormat($json["등록일"], 'yyyy/MM/dd').toISO() }}
  Keep Only Set Fields: ON

Step 5: 배치 처리

Split In Batches: Batch Size = 100
  → PostgreSQL: Insert
  → Wait: 500ms
  → Split In Batches (loop)

노드 선택 가이드

"이 작업에는 어떤 노드를 써야 하지?"

하고 싶은 것 추천 노드
필드 추가/수정/제거 Edit Fields (Set)
필드 이름만 변경 Rename Keys
배열을 개별 아이템으로 분리 Split Out
여러 아이템을 하나로 합치기 Aggregate
대량 데이터 분할 처리 Split In Batches
조건에 맞는 아이템만 통과 Filter
불필요한 필드 제거만 Edit Fields (Keep Only Set Fields: ON)
데이터 복잡한 변환 Code (JavaScript/Python)

📝 정리

  • [x] Edit Fields (Set): 필드 추가, 수정, 제거. 데이터 정제의 기본
  • [x] Keep Only Set Fields: ON이면 지정한 필드만 남기고 나머지 제거
  • [x] Split Out: 배열 필드를 개별 아이템으로 "펼치기"
  • [x] Aggregate: 여러 아이템을 하나로 "합치기" (Split Out의 반대)
  • [x] Split In Batches: 대량 데이터를 N개씩 묶어 처리 (Rate Limiting 대응)
  • [x] Rename Keys: 필드 이름만 간단히 일괄 변경

다음 편 예고

11편: Error Trigger + 에러 핸들링 — 장애에 강한 워크플로우 만들기

워크플로우가 실패하면 어떻게 되는가? 아무도 모르게 조용히 실패하지 않도록, 에러를 감지하고 알리고 복구하는 프로덕션급 안정성을 구축한다.