Set / Edit Fields / Split In Batches — 데이터 정제의 기술
API가 데이터를 내 마음대로 주지 않는다. 필드 이름이 다르고, 불필요한 데이터가 섞여 있고, 배열이 중첩되어 있다. 데이터 정제 노드는 이 혼돈을 질서로 바꿔준다.
Edit Fields (Set) 노드
데이터를 원하는 형태로 가공하는 가장 기본적인 노드다. 필드를 추가하고, 이름을 바꾸고, 필요 없는 것을 제거한다.
매핑 모드
| 모드 | 설명 | 적합한 경우 |
|---|---|---|
| Manual Mapping | 필드를 하나씩 수동 지정 | 정밀한 데이터 가공 |
| Auto-Map Input Fields | 입력 필드를 자동으로 그대로 통과 | 일부 필드만 추가/수정 |
Manual Mapping 사용법
- "+ Add Field" 클릭
- Name: 출력할 필드 이름
- Type: 데이터 타입 (String, Number, Boolean, Object, Array)
- 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 + 에러 핸들링 — 장애에 강한 워크플로우 만들기
워크플로우가 실패하면 어떻게 되는가? 아무도 모르게 조용히 실패하지 않도록, 에러를 감지하고 알리고 복구하는 프로덕션급 안정성을 구축한다.