n8n을 활용한 용돈 자동화 계산 시나리오

좋아, “용돈 자동 계산” 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(응답): 계산 결과를 바로 돌려줌

원하면 지금 워크플로우를 n8n 가져오기용 JSON으로 완성본 만들어줄게.
버전 A(웹훅), 버전 B(스케줄) 중 뭐부터 줄까?