W5 여신 금액·등급별 자동 승인 경로 분기 0%
🏦 Phase 2 · AI + 조건 분기 결합
W5

여신 금액·등급별 자동 승인 경로 분기

GPT AI 분석 + IF/Switch 조건 분기 = 하이브리드 의사결정

GPT AI Agent
IF / Switch
Slack
Gmail
약 90분
Recap & What's New

🔄 W4 → W5: 무엇이 달라지나?

W4: AI가 텍스트를 읽고 "분류"만 해줬습니다. (이메일 → 5종 분류)
W5: AI가 "분석"까지 합니다. (재무 데이터 → 위험도 평가 + 1문단 요약)

그리고 AI 분석 결과 + 금액 조건(숫자 규칙)을 결합해서 최종 경로를 결정합니다.
AI 판단 + 규칙 판단 = 하이브리드 분기 — 이것이 W5의 핵심!
Context · 왜 이 실습을 하나요?

🏢 상황 설정: 승인 결재가 3일이나 걸려요

👨‍💼
이준혁 차장
ER은행 여신심사팀 · 심사 총괄
여신 신청이 들어오면 금액과 고객 상태에 따라 승인 경로가 다릅니다. 소액·우량이면 바로 자동승인, 중간 규모면 팀장 결재, 대규모면 본부 심사위원회 위임. 문제는 이 판단을 사람이 하나씩 하다보니 승인까지 평균 3일이 걸린다는 겁니다. 특히 업종 위험도 분석은 심사역마다 기준이 달라 일관성도 떨어집니다.
😩 이준혁 차장의 고민
"소액 우량 건까지 팀장 결재를 받느라 시간이 낭비돼요. 업종 위험도도 심사역마다 달리 평가하고. AI가 일관된 기준으로 초기 분석을 해주고, 금액에 따라 자동으로 경로를 나눠주면 좋겠어요."

📊 여신 승인 3경로

자동승인
1억 미만 AND
AI 위험도 "낮음"
즉시 승인 처리
+ 신청자 통보
👤
팀장승인
1억~10억 OR
AI 위험도 "보통"
팀장 이메일
+ Slack DM
🏛️
본부위임
10억 초과 OR
AI 위험도 "높음"
본부 심사위원회
+ 담당임원 알림
📋 의사결정 매트릭스 — 금액 × AI 위험도
AI 위험도 "낮음"AI 위험도 "보통"AI 위험도 "높음"
1억 미만✅ 자동승인👤 팀장승인🏛️ 본부위임
1억~10억👤 팀장승인👤 팀장승인🏛️ 본부위임
10억 초과🏛️ 본부위임🏛️ 본부위임🏛️ 본부위임
💡 핵심: 왜 AI + 규칙을 함께 쓰나요?
금액은 숫자니까 IF/Switch로 판단 가능 (W2에서 배운 것).
업종 위험도는 "이 업종이 요즘 경기 어때?" 같은 판단이라 AI가 필요 (W4에서 배운 것).

W5 = W2(규칙 분기) + W4(AI 판단)을 결합한 것입니다!
Goal · 오늘 만들 워크플로

🎯 완성 워크플로 구조

📌 Sheets Trigger → AI 분석 → 금액+위험도 복합 분기 → 3경로 처리
📋 Sheets
Trigger
🤖 GPT
AI Agent
⚙️ Set
결과 파싱
🔀 Switch
3경로 분기
✅ 자동승인
Gmail + Sheets
👤 팀장승인
Gmail + Slack
🏛️ 본부위임
Gmail + Slack
📊 심사이력 Sheets 기록 (전 경로 공통)
W4와 다른 점: W4는 AI 분류 결과만으로 Switch → W5는 AI 분석 + 금액 조건을 결합해서 Switch. 이것이 "하이브리드 분기"!
Preparation · 시작 전 준비

📋 사전 준비 (10분)

A
여신 신청 시트 (확장 버전) 만들기
심사 이력 시트 포함

1. Google Sheets에 「여신신청_심사」 시트를 만듭니다. W1보다 열이 많습니다:

신청인이메일업종신청금액(만원)신용등급부채비율(%)영업이익률(%)담당심사역
A건설a@test.com건설업5000AA1208.5김철수
B유통b@test.com도소매업50000BBB2003.2이영수
C테크c@test.comIT서비스8000A8015.3김철수
D물류d@test.com해운업200000BB350-2.1박영미
E식품e@test.com식품제조3000A+9011.7이영수
💡 기대 경로: A건설(5천만·AA) → 자동승인 / B유통(5억·BBB) → 팀장승인 / C테크(8천만·A) → 자동승인 / D물류(200억·BB) → 본부위임 / E식품(3천만·A+) → 자동승인

2. Google Sheets에 「여신신청_이력」 시트를 만듭니다. 빈 테이블로 생성하여 AI의 자동 분류 이력을 관리합니다.

접수일시신청인업종신청금액신용등급AI위험도승인경로분석요약
B
Slack Webhook 준비
팀장·본부 알림용 Slack 채널 Webhook

Slack에서 2개 채널의 Incoming Webhook URL을 준비합니다:

1. #여신-팀장승인 채널 → Webhook URL 복사

2. #여신-본부위임 채널 → Webhook URL 복사

Slack → 채널 세부 정보 열기 → 통합 → 앱 추가 → "Incoming WebHooks" 설치 → 채널에 앱 추가
Step-by-Step · 모범답안 가이드

🔧 실습: 워크플로 만들기 (60분)

1
Sheets Trigger + AI Agent Node
⏱ 약 20분 · GPT에게 업종 위험도 분석 시키기

Sheets Trigger는 W1과 동일합니다. 핵심은 AI Agent 프롬프트입니다.

// Sheets Trigger → "여신신청_심사" 시트 / Row Added // AI Agent Node 기본 설정 (W4와 동일) Chat Model: GPT-sonnet-4-20250514 Max Tokens: 500 ← W4보다 길게 (분석 요약 포함)

📝 System Prompt — 업종 위험도 분석

📋 System Prompt
당신은 ER은행 여신 심사 전문가입니다. 기업의 업종, 신용등급, 재무 수치(부채비율, 영업이익률)를 종합 분석하여 여신 위험도를 평가하세요. 【위험도 판정 기준】 - "낮음": 신용등급 A 이상 AND 부채비율 150% 이하 AND 영업이익률 5% 이상 - "보통": 위의 조건 중 1~2개 미달 OR 신용등급 BBB - "높음": 신용등급 BB 이하 OR 부채비율 300% 초과 OR 영업이익률 마이너스 【응답 형식 — 반드시 JSON으로만 응답】 { "위험도": "낮음", "분석요약": "건설업 AA등급, 부채비율 120%로 업종 평균 이하, 영업이익률 8.5%로 안정적. 우량 차주로 판단.", "주의사항": "건설업 경기 변동에 따른 모니터링 필요" } JSON 외에 다른 텍스트를 절대 추가하지 마세요.

User Message:

기업명: {{ $json.신청인 }} 업종: {{ $json.업종 }} 신용등급: {{ $json.신용등급 }} 부채비율: {{ $json['부채비율(%)'] }}% 영업이익률: {{ $json['영업이익률(%)'] }}% 신청금액: {{ $json['신청금액(만원)'] }}만원

✅ 테스트 확인

🤖 GPT 응답 예시 — A건설
{ "위험도": "낮음", "분석요약": "건설업 AA등급, 부채비율 120%로 업종 평균 대비 양호, 영업이익률 8.5%로 수익성 안정적. 우량 차주로 판단.", "주의사항": "건설업 경기 사이클에 따른 분기별 모니터링 권고" }
2
Set 노드 — AI 결과 + 금액 조건 결합
⏱ 약 10분 · 🆕 최종 경로를 여기서 결정!
🆕 Core Pattern

이번 Set 노드가 W5의 핵심입니다. AI 위험도와 금액을 동시에 판단해서 최종 경로를 결정합니다.

// Set 노드 — AI 결과 파싱 + 최종 경로 결정 AI위험도: {{ JSON.parse($json.output).위험도 }} 분석요약: {{ JSON.parse($json.output).분석요약 }} 주의사항: {{ JSON.parse($json.output).주의사항 }} // 원본 데이터 참조 신청인: {{ $('Google Sheets Trigger').item.json.신청인 }} 이메일: {{ $('Google Sheets Trigger').item.json.이메일 }} 신청금액: {{ $('Google Sheets Trigger').item.json['신청금액(만원)'] }} 업종: {{ $('Google Sheets Trigger').item.json.업종 }} 신용등급: {{ $('Google Sheets Trigger').item.json.신용등급 }} // ★ 핵심: 최종 경로 결정 (Expression) 승인경로: {{(() => { const amt = Number($('Google Sheets Trigger').item.json['신청금액(만원)']); const risk = JSON.parse($json.output).위험도; if (amt >= 100000 || risk === '높음') return '본부위임'; if (amt >= 10000 || risk === '보통') return '팀장승인'; return '자동승인'; })()}}
💡 Expression 안에서 if문 쓰기!
{{ }} 안에서 JavaScript의 if/else를 사용할 수 있습니다. 위 코드를 말로 풀면:

1. 금액 10억 이상 OR AI 위험도 "높음" → "본부위임"
2. 금액 1억 이상 OR AI 위험도 "보통" → "팀장승인"
3. 나머지 (소액 + 낮은 위험) → "자동승인"

⚠️ 순서가 중요! "본부위임"을 먼저 체크합니다. 10억이면 위험도와 관계없이 본부위임이니까요.

✅ 확인

"Test step" → A건설은 "자동승인", B유통은 "팀장승인", D물류는 "본부위임"이 나오면 성공!

3
Switch 노드 — 3경로 분기
⏱ 약 5분 · W4에서 배운 Switch 활용
// Switch 노드 설정 Mode: Rules Data Type: String Value: {{ $json.승인경로 }} Output 0: Equal → "자동승인" Output 1: Equal → "팀장승인" Output 2: Equal → "본부위임"

W4의 Switch(5경로)와 동일한 패턴. 이번에는 3경로입니다.

4
경로 ① 자동승인 — 즉시 처리 + 신청자 통보
⏱ 약 10분 · Gmail로 승인 완료 이메일

Switch Output 0 → Gmail 노드 연결

// Gmail — 자동승인 통보 To: {{ $json.이메일 }} ← 신청 고객에게 Subject: [ER은행] 여신 승인 완료 — {{ $json.신청인 }} Message: (HTML)
<div style="font-family:sans-serif;max-width:560px;padding:24px"> <div style="background:#d1fae5;border-left:4px solid #10b981;padding:14px;border-radius:0 8px 8px 0"> <strong>✅ 여신 승인이 완료되었습니다</strong> </div> <p><strong>{{ $json.신청인 }}</strong>님의 {{ $json.업종 }} 여신 신청이 승인되었습니다.</p> <table style="width:100%;border-collapse:collapse;margin:16px 0"> <tr style="background:#f0fdf4"> <td style="padding:8px 12px;border:1px solid #ddd;font-weight:bold">승인 금액</td> <td style="padding:8px 12px;border:1px solid #ddd">{{ Number($json.신청금액).toLocaleString() }}만원</td> </tr> <tr> <td style="padding:8px 12px;border:1px solid #ddd;font-weight:bold">승인 유형</td> <td style="padding:8px 12px;border:1px solid #ddd">자동승인 (소액·우량)</td> </tr> </table> <p>🤖 <strong>AI 심사 의견:</strong> {{ $json.분석요약 }}</p> </div>
5
경로 ② 팀장승인 + 경로 ③ 본부위임
⏱ 약 15분 · Gmail + Slack 동시 알림

경로 ② 팀장승인

Switch Output 1 → Gmail(팀장 이메일) + Slack(#여신-팀장승인) 병렬 연결

// Gmail — 팀장 승인 요청 To: teamlead@ERbank.com Subject: [승인요청] {{ $json.신청인 }} — {{ Number($json.신청금액).toLocaleString() }}만원 본문: 아래 참고
<div style="font-family:sans-serif;max-width:560px;padding:24px"> <div style="background:#ffedd5;border-left:4px solid #f97316;padding:14px;border-radius:0 8px 8px 0"> <strong>❗️팀장 승인이 필요합니다.</strong> </div> <p><strong>{{ $json.신청인 }}</strong>님의 {{ $json.업종 }} 여신 신청이 접수되었습니다.</p> <table style="width:100%;border-collapse:collapse;margin:16px 0"> <tr style="background:#ffedd5"> <td style="padding:8px 12px;border:1px solid #ddd;font-weight:bold">신청 금액</td> <td style="padding:8px 12px;border:1px solid #ddd">{{ Number($json.신청금액).toLocaleString() }}만원</td> </tr> <tr> <td style="padding:8px 12px;border:1px solid #ddd;font-weight:bold">승인 유형</td> <td style="padding:8px 12px;border:1px solid #ddd">팀장승인</td> </tr> <tr> <td style="padding:8px 12px;border:1px solid #ddd;font-weight:bold">AI 위험도</td> <td style="padding:8px 12px;border:1px solid #ddd">{{ $json['AI위험도'] }}</td> </tr> <tr> <td style="padding:8px 12px;border:1px solid #ddd;font-weight:bold">주의사항</td> <td style="padding:8px 12px;border:1px solid #ddd">{{ $json['주의사항'] }}</td> </tr> </table> <p>🤖 <strong>AI 심사 의견:</strong> {{ $json.분석요약 }}</p> </div>
// Slack Webhook — #여신-팀장승인 채널 Method: POST URL: (팀장승인 채널 Webhook URL) Body: { "text": "👤 *팀장 승인 요청* ━━━━━━━━━━━ 🏢 {{ $json.신청인 }} ({{ $json.업종 }}) 💰 {{ Number($json.신청금액).toLocaleString() }}만원 📊 신용등급: {{ $json.신용등급 }} · AI위험도: {{ $json.AI위험도 }} 🤖 {{ $json.분석요약 }} ⚠️ {{ $json.주의사항 }}" }

경로 ③ 본부위임

Switch Output 2 → 동일 구조, 어조만 강화:

// Gmail — 본부 위임 요청 To: committee@ERbank.com Subject: 🚨[본부심사 위임] {{ $json.신청인 }} — {{ Number($json.신청금액).toLocaleString() }}만원 CC: executive@ERbank.com 본문: 아래 참고
<div style="font-family:sans-serif;max-width:560px;padding:24px"> <div style="background:#fee2e2;border-left:4px solid #ef4444;padding:14px;border-radius:0 8px 8px 0"> <strong>‼️ 본부 위임건 입니다.</strong> </div> <p><strong>{{ $json.신청인 }}</strong>님의 {{ $json.업종 }} 여신 신청이 접수되었습니다.</p> <table style="width:100%;border-collapse:collapse;margin:16px 0"> <tr style="background:#fee2e2"> <td style="padding:8px 12px;border:1px solid #ddd;font-weight:bold">신청 금액</td> <td style="padding:8px 12px;border:1px solid #ddd">{{ Number($json.신청금액).toLocaleString() }}만원</td> </tr> <tr> <td style="padding:8px 12px;border:1px solid #ddd;font-weight:bold">승인 유형</td> <td style="padding:8px 12px;border:1px solid #ddd">팀장승인</td> </tr> <tr> <td style="padding:8px 12px;border:1px solid #ddd;font-weight:bold">AI 위험도</td> <td style="padding:8px 12px;border:1px solid #ddd">{{ $json['AI위험도'] }}</td> </tr> <tr> <td style="padding:8px 12px;border:1px solid #ddd;font-weight:bold">주의사항</td> <td style="padding:8px 12px;border:1px solid #ddd">{{ $json['주의사항'] }}</td> </tr> </table> <p>🤖 <strong>AI 심사 의견:</strong> {{ $json.분석요약 }}</p> </div>
// Slack Webhook — #여신-팀장승인 채널 Method: POST URL: (본부 위임 채널 Webhook URL) Body: { "text": "👤 *본부 위임 요청* ━━━━━━━━━━━ 🏢 {{ $json.신청인 }} ({{ $json.업종 }}) 💰 {{ Number($json.신청금액).toLocaleString() }}만원 📊 신용등급: {{ $json.신용등급 }} · AI위험도: {{ $json.AI위험도 }} 🤖 {{ $json.분석요약 }} ⚠️ {{ $json.주의사항 }}" }
6
심사 이력 기록 + 전체 테스트
⏱ 약 10분 · 5건 테스트로 경로 정확도 확인

📝 Sheets 이력 기록

Set 노드에서 병렬로 Sheets 노드를 연결합니다 (Switch와 별개).

// 심사이력 시트 — Append Row 접수일시: {{ $now.format('yyyy-MM-dd HH:mm') }} 신청인: {{ $json.신청인 }} 업종: {{ $json.업종 }} 신청금액: {{ $json.신청금액 }} 신용등급: {{ $json.신용등급 }} AI위험도: {{ $json.AI위험도 }} 승인경로: {{ $json.승인경로 }} 분석요약: {{ $json.분석요약 }}

🧪 전체 테스트 — 5건 검증

기업금액등급AI 위험도 (기대)경로 (기대)
A건설5,000만AA낮음✅ 자동승인
B유통5억BBB보통👤 팀장승인
C테크8,000만A낮음✅ 자동승인
D물류200억BB높음🏛️ 본부위임
E식품3,000만A+낮음✅ 자동승인
⚠️ AI가 위험도를 다르게 판단할 수 있어요!
GPT의 판단은 매번 미세하게 다를 수 있습니다. B유통의 위험도가 "보통" 대신 "높음"으로 나올 수도 있어요. 이것은 AI의 특성입니다.

대응 방법: 프롬프트의 판정 기준을 더 구체적으로 적거나, Set 노드에서 금액 기반 규칙을 우선 적용하면 일관성이 높아집니다.

🔧 자주 발생하는 문제

Expression 안의 if문이 에러 나요
{{ }} 안에서 여러 줄 코드를 쓸 때, 줄바꿈 대신 세미콜론(;)으로 구분하거나, n8n의 Code 노드(JavaScript)를 대신 사용할 수 있습니다. Expression이 복잡하면 Code 노드가 더 편합니다.
금액이 텍스트로 인식돼요
Sheets에서 가져온 숫자가 문자열일 수 있습니다. Number($json['신청금액(만원)'])로 명시적 변환하세요. 쉼표가 있으면 .replace(/,/g, '')로 제거 후 변환.
Slack 메시지가 한 줄로 나와요
Slack Webhook에서 줄바꿈은 \n을 사용합니다. JSON Body 안에서 실제 줄바꿈을 넣으면 에러가 납니다.
Self-Check · 완료 확인

✅ W5 실습 완료 체크리스트

AI Agent가 업종·신용등급·재무 수치로 위험도를 분석한다
Set 노드에서 AI 위험도 + 금액을 결합해 "승인경로" 필드를 생성한다
Switch 3경로(자동승인/팀장승인/본부위임)가 정확히 분기된다
자동승인 → 신청자에게 승인 완료 이메일이 도착한다
팀장승인 → Gmail + Slack #여신-팀장승인 채널에 알림이 간다
본부위임 → Gmail + Slack #여신-본부위임 채널에 알림이 간다
심사이력 시트에 5건 모두 기록된다 (경로·AI분석 포함)
5건 테스트 중 4건 이상 기대 경로와 일치한다
Key Concepts · 오늘 배운 것

📌 W5 핵심 개념 정리

H
하이브리드 분기
AI 판단(텍스트 분석) + 규칙 판단(숫자 조건)을 결합. AI가 "위험도"를 매기고, IF 규칙이 "금액"을 체크해서 최종 경로를 결정합니다.
A
AI "분석" vs AI "분류"
W4는 5개 라벨 중 하나를 고르는 분류. W5는 재무 데이터를 해석하고 근거를 제시하는 분석. 프롬프트가 더 구체적이고, 응답에 "요약"과 "주의사항"이 포함됩니다.
E
Expression 내 JavaScript
{{ }} 안에서 if/else, 변수 선언, 함수 호출이 모두 가능합니다. 복잡해지면 Code 노드(JavaScript 전용)로 분리하는 것이 깔끔합니다.
📋
의사결정 매트릭스
2개 축(금액 × 위험도)으로 경로를 결정하는 표. 실무에서 복잡한 승인 규칙을 시각화하고 n8n으로 구현할 때 반드시 먼저 그려봐야 합니다.
🧱 Phase 2 중간 정리 (W4~W5)
W4: AI 분류 → Switch 분기 (AI만 판단)
W5: AI 분석 + 규칙 결합 → Switch 분기 (AI + 규칙 하이브리드)

다음 주(W6)에서는 각자 실제 부서 데이터로 end-to-end 파이프라인을 완성합니다!
Next Week Preview

👉 W6 미리보기

📊
부서별 실무 파이프라인 완성
여신·리스크팀: 재무제표 위험도 분석 / 영업·WM팀: 만기 고객 개인화 안내

W6는 부서별 분반으로 진행됩니다. 여신·리스크팀은 기업 재무제표 자동 위험도 분석을, 영업·WM팀은 만기 도래 예금 고객에게 GPT가 맞춤 추천 문안을 생성하는 파이프라인을 완성합니다. Phase 2의 마무리 실전 프로젝트입니다.

n8n GPT API Gmail + Sheets
ER은행 AX 업무혁신 과정 · Track 1 · W5 실습 가이드 · 2026