좋아, “용돈 자동 계산” n8n 시나리오를 바로 쓰게 정리해 줄게.
인증 없이(=간편 테스트) 할 수 있는 두 가지 버전을 준비했어.
1) 버전 A: Webhook(웹훅)로 계산 요청 → 계산 → 바로 응답
- Webhook(웹훅, Webhook → “URL로 보내면 작동하는 초인종”, 한국어: 주소로 요청 보내면 자동으로 실행되는 방식)
- 코드(Code) 노드 한 개로 계산
- **Respond to Webhook(웹훅 응답)**으로 합계 돌려줌
흐름
Webhook Trigger → Code(계산) → Respond to Webhook
입력(JSON 예시)
json
{ "childName": "민수", "base": 10000, "tasksCompleted": 7, "perTask": 1000, "goal": 5, "bonus": 5000, "penalty": 2000, "cap": 30000 }
Code 노드 (그대로 붙여쓰기)
js
// 들어온 JSON const x = $json; // 숫자 안전 변환 const toNum = v => Number(v ?? 0); const base = toNum(x.base); // 기본용돈 const tasksCompleted = toNum(x.tasksCompleted); // 완료 과제 수 const perTask = toNum(x.perTask); // 1개당 보상 const goal = toNum(x.goal); // 목표 과제 수 const bonus = toNum(x.bonus); // 목표 달성 보너스 const penalty = toNum(x.penalty); // 벌점(감액) const cap = toNum(x.cap); // 상한(최대치) // 계산 let variablePart = tasksCompleted * perTask; // 변동 보상 let bonusApplied = tasksCompleted >= goal ? bonus : 0; let total = base + variablePart + bonusApplied - penalty; // 하한/상한 처리 if (total 0 && total > cap) total = cap; // 결과+설명 return [{ json: { childName: x.childName ?? "이름없음", base, tasksCompleted, perTask, goal, bonus, penalty, cap, total, readable: `자녀(${x.childName ?? "이름없음"})의 이번 용돈은 총 ${total.toLocaleString()}원입니다.`, details: { variablePart, bonusApplied, afterPenalty: base + variablePart + bonusApplied - penalty }, timestampKST: new Date().toLocaleString("ko-KR", { timeZone: "Asia/Seoul" }) } }];
Respond to Webhook 노드 설정
- Response Body 에
{{ $json }}또는{{ $json.readable }} - 테스트는 curl로 간단히 가능:
bash
curl -X POST "https:///webhook/allowance" \ -H "Content-Type: application/json" \ -d '{ "childName": "민수", "base": 10000, "tasksCompleted": 7, "perTask": 1000, "goal": 5, "bonus": 5000, "penalty": 2000, "cap": 30000 }'
핵심(쉽게):
- Webhook: “주소로 JSON 보내면 시작!”
- Code: “계산해!”
- Respond: “계산 결과 돌려줘!”
2) 버전 B: 매주 자동 계산(Schedule) + 규칙 적용 + 로그 저장(선택)
- Schedule(스케줄 → 정해진 시간에 자동 실행, 한국어: 시간표대로 자동으로 켜짐)
- Set(세트 → 값 만들기/고정하기) 로 “가짜 데이터 or 고정 규칙” 주입
- Code(코드) 로 계산
- (선택) Google Sheets 로 저장(로그; 이건 인증 필요)
흐름
Schedule Trigger → Set(입력/규칙) → Code(계산) → (선택) Google Sheets Append
Schedule Trigger 예
-
매주 월·금 22:30
-
Cron mode에서:
-
Minutes:
30 -
Hours:
22 -
Days of Month:
* -
Months:
* -
Days of Week:
1,5(월=1, 화=2 … 일=7) -
토·일 제외는 이미 위에서 주중만 설정했으니 충족!
Set 노드(규칙/입력 예시)
json
{ "childName": "민수", "base": 10000, "perTask": 1000, "goal": 5, "bonus": 5000, "penalty": 0, "cap": 30000, "tasksCompleted": 0 }
실제 **tasksCompleted(이번 주 과제 수)**는
- 전 노드에서 계산하거나
- 별도 입력(예: Google Form → Webhook) 으로 넣어도 된다.
Code 노드 (동일 계산식 사용)
위 버전 A의 Code를 그대로 사용.
단, tasksCompleted 값을 Set이나 앞 노드 출력에서 받아오면 됨.
(선택) Google Sheets Append
-
Authentication 필요(구글 계정 연결)
-
Columns 예:
-
날짜(KST), 자녀이름, 기본, 과제수, 1개당, 보너스, 벌점, 상한, 총액
-
Value 매핑:
-
날짜:
{{$json.timestampKST}} -
자녀이름:
{{$json.childName}} -
기본:
{{$json.base}} -
과제수:
{{$json.tasksCompleted}} -
1개당:
{{$json.perTask}} -
보너스:
{{$json.bonus}} -
벌점:
{{$json.penalty}} -
상한:
{{$json.cap}} -
총액:
{{$json.total}}
규칙(로직) 디자인 팁
-
필수 입력(Required fields, 필수 값): 기본(base), 과제수(tasksCompleted), 1개당(perTask)
-
옵션(Optional): goal, bonus, penalty, cap
-
우선순위:
-
총액 = 기본 + (과제수 × 1개당) + (목표 달성이면 보너스) – 벌점
-
하한 0원, 상한 cap 적용
-
검증(Validation, 값 점검): 음수, NaN 방지 →
Number(v ?? 0) -
가변 규칙: 나이대/요일/특정 주차에 따라 perTask, bonus 바꾸기 가능(If 노드 or 코드 조건)
에러/경고(⚠) 안 뜨게 하는 체크리스트
- 노드 비활성화(Disabled) 꺼두지 말 것 → Enable
- Code 노드는 반드시
return [{ json: {...} }]형태로 반환 - 앞 노드에서 최소 1개 아이템이 흘러오게 만들기(Set/Webhook 중 하나)
용어 짧게 정리(아이들식+한글)
- Webhook(웹훅): 문을 두드리면(요청 보내면) 바로 작동하는 초인종
- Schedule(스케줄): 시간표
- Set(세트): 값을 직접 넣는 상자
- Code(코드): 계산기
- Respond(응답): 계산 결과를 바로 돌려줌