2026년 9월 13일 내용 개정. 공식 문서와 대조해 설명과 예제를 정리했습니다. 설치 버전에 따라 화면과 옵션 이름은 달라질 수 있습니다.
외부에서 받은 금액이 숫자 12000이 아니라 문자열 ‘12,000’이면 바로 비교하거나 더할 때 문제가 생길 수 있습니다. 이 실습에서는 이름의 공백을 정리하고 금액을 숫자로 바꾸되, 비어 있거나 잘못된 값은 확인 대상으로 남깁니다. 정상값으로 보이게 만드는 것보다 잘못된 입력을 구별하는 것이 목표입니다.
이 글에서 확인할 내용: 문자열 금액을 정리하고 누락값을 분리한 뒤 변환 결과와 합계를 확인합니다. 대표 사진과 본문 사진은 작업 환경 참고용입니다. 대표 사진: Danial Igdery / Unsplash.

1. 먼저 입력 형식을 정하기
예제에서 허용하는 금액은 0 이상의 정수, 또는 12,000처럼 세 자리마다 쉼표가 있는 문자열입니다. 원 단위 정수만 처리하므로 음수·소수·통화 기호가 필요하다면 규칙을 따로 확장해야 합니다. ‘1,2’처럼 잘못된 쉼표 표기를 12로 받아들이지 않도록 검사합니다.
Manual Trigger 뒤에 Sample이라는 Code 노드를 만들고 JavaScript / Run Once for All Items에서 실행합니다.
return [
{ json: { id: "A101", name: " 민준 ", amount: "12,000" } },
{ json: { id: "A102", name: "지수", amount: "" } },
{ json: { id: "A103", name: "서연", amount: "1,2" } },
{ json: { id: "A104", name: "도윤", amount: 0 } }
];
2. Code 노드로 정리하기
두 번째 Code 노드를 연결하고 동일한 실행 모드를 사용합니다. 현재 입력은 $input.all()로 가져옵니다. 과거 Function 예제의 items 변수가 현재 Code에 자동으로 있다고 가정하지 마세요. 모드 차이는 Code 공식 문서에서 확인할 수 있습니다.
const input = $input.all();
return input.map((item, index) => {
const raw = item.json.amount;
const text = typeof raw === "string" ? raw.trim() : "";
const validText = /^([0-9]+|[0-9]{1,3}(,[0-9]{3})+)$/.test(text);
const amount = typeof raw === "number"
? raw
: validText ? Number(text.replace(/,/g, "")) : NaN;
const valid = Number.isSafeInteger(amount) && amount >= 0;
const cleanName = String(item.json.name ?? "").trim();
return {
json: {
...item.json,
cleanName,
amountNumber: valid ? amount : null,
needsReview: !valid || cleanName.length === 0
},
pairedItem: { item: index }
};
});
원래 amount를 그대로 남기고 amountNumber를 추가하므로, 변환이 실패해도 원본을 비교할 수 있습니다. null은 정상 숫자가 아님을 나타냅니다. pairedItem은 이 단일 입력의 새 출력이 어떤 입력 아이템에서 왔는지 연결합니다. 이 예제에는 파일이 없으며, 파일을 함께 변환한다면 binary 보존도 별도로 고려해야 합니다.
3. 예상 결과와 잘못된 변환 비교
| id | 원본 amount | amountNumber | needsReview |
|---|---|---|---|
| A101 | 문자열 12,000 | 12000 | false |
| A102 | 빈 문자열 | null | true |
| A103 | 문자열 1,2 | null | true |
| A104 | 숫자 0 | 0 | false |
Number(”)는 0이므로 무조건 Number()를 적용하면 빈 금액을 실제 0원으로 잘못 처리할 수 있습니다. 쉼표를 전부 지우는 방식도 먼저 형식을 검사해야 합니다. 정리 후에는 IF 노드의 Boolean 조건으로 needsReview가 true인 건을 확인 목록에 보내세요.

4. 합계가 필요하면 검토 대상부터 분리
IF의 false 출력에 Code 노드를 연결하고 Run Once for All Items에서 아래처럼 합계를 구할 수 있습니다. 검토 대상과 정상 데이터가 섞인 상태에서는 실행하지 않습니다.
const items = $input.all();
const total = items.reduce((sum, item) => sum + item.json.amountNumber, 0);
return [{ json: { count: items.length, total } }];
예제의 정상 데이터는 A101과 A104이므로 count는 2, total은 12000입니다. 이 단계는 여러 아이템을 요약 1개로 바꿉니다. 따라서 후속 단계에서 특정 신청자 한 명의 .item 참조를 기대하지 말고, 요약용 필드를 사용하세요. 정상 데이터가 0개이면 앞 분기에서 이 노드 자체가 실행되지 않을 수 있습니다.

5. 적용 전 추가로 시험할 입력
- amount가 null 또는 없는 경우: 확인 대상으로 남는지 확인합니다.
- amount가 ‘ 1,000 ‘인 경우: 1000으로 변환되는지 확인합니다.
- amount가 ’12원’, ‘-5’, ‘1.5’인 경우: 이 실습 규칙에서는 거부되어야 합니다.
- name이 공백뿐인 경우: 금액이 정상이더라도 확인 대상으로 분류되어야 합니다.
실제 업무에서 환불·외화·소수 금액을 다룬다면 이 코드를 그대로 사용하지 말고 허용 범위와 반올림 규칙부터 바꾸세요. 예제는 입력 표준화 학습을 위한 것이며 모든 금액 형식을 처리하는 범용 파서는 아닙니다.
함께 읽을 실습
n8n 아이템이란? JSON 배열과 여러 아이템의 차이
n8n 표현식: $json·item·first·all 참조 차이와 예제