Set·IF·Switch 로 안 풀리는 복잡한 변환은 결국 코드. n8n 의 Code 노드는 JavaScript(또는 Python)를 박스 안에 그대로 쓸 수 있게 합니다.
입문·기초편의 노드들 — Manual·Schedule·Webhook·HTTP·Set·IF·Switch·메일·시트·Slack — 만으로도 워크플로 70% 는 짤 수 있습니다. 나머지 30% 는 "이 데이터를 좀 복잡하게 가공해야 하는데..." 의 영역. 그게 Code 노드.
언제 Code 노드를 써야 하나
Code 노드를 쓰는 신호 3가지 ① Set 노드의 표현식이 한 줄을 넘기 시작함 ② IF 노드가 5개 이상 중첩됨 ③ 같은 변환을 여러 워크플로에서 반복 — 함수화 욕구
반대로 — 안 써도 되면 안 쓰는 게 정답. Code 노드는 강력하지만 시각적 워크플로의 장점(누가 봐도 흐름 이해) 을 깎아먹어요. "Set 노드 5개로 풀리면 Set 5개" 가 더 좋습니다.
Code 노드 — 실제 화면
이전 노드 + → "code" 검색 → Code 노드. 언어 선택(JavaScript / Python) 후 큰 에디터가 열립니다.
Code 노드의 두 모드:
Mode:
Run Once for All Items (items 전체 한 번 — 집계·정렬 등)
Run Once for Each Item (item 마다 한 번 — 변환·매핑 등)
패턴 1 — 전체 item 변환 (Run Once for All)
// items 100개 받아 각자 변환
const out = [];
for (const item of $input.all()) {
const u = item.json;
out.push({
json: {
name: u.firstName + ' ' + u.lastName,
total: u.qty * u.price,
isVIP: u.amount > 100000,
}
});
}
return out;
$input.all() 이 이전 노드의 items 배열. 각자 변환해 새 배열 반환. 반환 형식은 무조건 [{json: {...}}, ...] — 이게 n8n 의 표준 item 형태(Ch.4).
패턴 2 — item 별 처리 (Run Once for Each)
// 이 모드에선 $json 이 자동 현재 item
return {
json: {
summary: `${$json.name}님: ${$json.total.toLocaleString()}원`,
tag: $json.total > 50000 ? '큰주문' : '소주문',
}
};
이 모드는 n8n 이 알아서 item 마다 코드를 실행. 코드는 한 item 만 처리하면 되고, 반환도 한 객체. Set 노드와 거의 같은 일인데 더 자유로움.
패턴 3 — 외부 데이터 활용 + 집계
// 매출 100건의 카테고리별 합계
const by = {};
for (const it of $input.all()) {
const c = it.json.category;
by[c] = (by[c] || 0) + it.json.amount;
}
return Object.entries(by).map(([cat, sum]) => ({
json: { category: cat, total: sum }
}));
입력 100건 → 출력 카테고리 수만큼. n8n 의 일반 노드론 SQL GROUP BY 가 어렵지만 Code 노드론 5줄.
n8n 특수 함수 + 외부 라이브러리
# n8n 특수 함수 (Code 노드에서만)
$input.all() // 입력 items 전체
$input.first() // 첫 item
$input.itemMatching(0) // 인덱스 매칭
$workflow.id // 워크플로 ID
$execution.id // 이번 실행 ID# 내장 라이브러리
DateTime // Luxon (Ch.5 와 동일)
crypto // Node.js crypto
Buffer // 바이너리 처리
외부 npm 패키지는 설치 안 됨 (보안). 필요하면 HTTP Request 노드로 외부 API 호출해 결과 받아오는 패턴 권장.
Python 모드 — n8n 의 Python Code 노드는 Pyodide 기반(브라우저 안 Python). 실행 속도 JS 대비 매우 느림, 외부 라이브러리 거의 없음. JavaScript 익숙치 않아도 한 번 JS 로 가는 게 효율적.
다음 Ch.14 — Loop · Split In Batches. 1만 건 데이터를 100개씩 끊어 처리하는 패턴. Code 노드의 단점(메모리)을 보완하는 정공법.