๋ฐ˜์‘ํ˜•

n8n์€ ๋‹ค์–‘ํ•œ ์•ฑ๊ณผ ์„œ๋น„์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™” ํ”Œ๋žซํผ์ด๋‹ค. ์ฝ”๋”ฉ ์—†์ด ๋งˆ์šฐ์Šค ๋“œ๋ž˜๊ทธ๋กœ ๋…ธ๋“œ(Node)๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, ์•Œ๋ฆผ ๋ฐœ์†ก, ์ด๋ฉ”์ผ ์ „์†ก, API ํ˜ธ์ถœ ๋“ฑ์„ ์†์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋ณต์žกํ•˜๊ณ  ๊ณ ๋„ํ™”๋œ ์ž‘์—…๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

ํŠนํžˆ AI ์‹œ๋Œ€์— n8n์€ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์™€ AI ๋ชจ๋ธ์„ ์ด์–ด์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ—ˆ๋ธŒ ์—ญํ• ์„ ํ•œ๋‹ค. ์™ธ๋ถ€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ AI๋กœ ์š”์•ฝ·๋ถ„๋ฅ˜·์ƒ์„ฑํ•œ ๋’ค, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ฉ”์ผ·๋ฉ”์‹ ์ €·์Šคํ”„๋ ˆ๋“œ์‹œํŠธ·DB ๋“ฑ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์„ ํ•˜๋‚˜์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณ ๊ฐ ๋ฌธ์˜๋ฅผ AI๋กœ ๋ถ„์„ํ•˜์—ฌ ์Šฌ๋ž™์œผ๋กœ ์ž๋™ ๋ผ์šฐํŒ…ํ•˜๊ฑฐ๋‚˜ ๋งค์ผ ์•„์นจ ํŠน์ • ๋‰ด์Šค๋ฅผ ํฌ๋กค๋งํ•ด์„œ AI ์š”์•ฝ๋ณธ์„ ๋…ธ์…˜์— ์Œ“๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Make, Zapier ๊ฐ™์€ ๊ฒฝ์Ÿ ๋„๊ตฌ์™€ ๋‹ฌ๋ฆฌ n8n์€ ์…€ํ”„ ํ˜ธ์ŠคํŒ…(Self-hosting)์„ ์ง€์›ํ•œ๋‹ค๋Š” ์žฅ์ ๋„ ์žˆ๋‹ค. ๋„์ปค(Docker)๋งŒ ๋‹ค๋ฃฐ ์ค„ ์•ˆ๋‹ค๋ฉด ์‹œ๋†€๋กœ์ง€ NAS๋‚˜ ๊ฐœ์ธ ์„œ๋ฒ„์— ์„ค์น˜ํ•ด์„œ ์‹คํ–‰ ํšŸ์ˆ˜ ์ œํ•œ ์—†์ด ์„œ๋ฒ„ ๋น„์šฉ๋งŒ์œผ๋กœ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์…€ํ”„ ํ˜ธ์ŠคํŒ…์€ ์™ธ๋ถ€ ํด๋ผ์šฐ๋“œ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋‚ด๋ถ€ ์„œ๋ฒ„์—์„œ๋งŒ ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ ๋ณด์•ˆ๊ณผ ๋ฐ์ดํ„ฐ ์ฃผ๊ถŒ ์ธก๋ฉด์—์„œ๋„ ์œ ๋ฆฌํ•˜๋‹ค.

 

 

ํŠธ๋ฆฌ๊ฑฐ ์ข…๋ฅ˜ 3๊ฐ€์ง€


  • Manual Trigger: ๊ฐœ๋ฐœ ์ค‘ ํ…Œ์ŠคํŠธ/์ˆ˜๋™ ์‹คํ–‰์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉ
  • Schedule Trigger: ๋งค์ผ/๋งค์ฃผ/๋งค์‹œ๊ฐ„์ฒ˜๋Ÿผ ์ •๊ธฐ์ ์ธ ์‹คํ–‰์ด ํ•„์š”ํ•  ๋•Œ
  • Webhook: ์™ธ๋ถ€ ์•ฑ์ด๋‚˜ ์„œ๋น„์Šค๊ฐ€ HTTP ์š”์ฒญ์„ ๋ณด๋ƒˆ์„ ๋•Œ (์ด๋ฒคํŠธ)

 

 

์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์„ฑ


 

  • ํŠธ๋ฆฌ๊ฑฐ(Trigger): ์›Œํฌํ”Œ๋กœ์šฐ ์‹œ์ž‘์ 
  • ๋…ธ๋“œ(Node): ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„
  • ์—ฃ์ง€(Edge): ๋…ธ๋“œ์™€ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์„ 

 

 

๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ ๋งŒ๋“ค์–ด๋ณด๊ธฐ


๐Ÿ’ก ์›Œํฌํ”Œ๋กœ์šฐ ๋ชฉํ‘œ: ZenQuotes์—์„œ ๋ช…์–ธ ์กฐํšŒ → OpenAI API๋กœ ๋ฒˆ์—ญ → ์ด๋ฉ”์ผ๋กœ ์ „๋‹ฌ

 

์‹ค์Šต์„ ์œ„ํ•ด n8n cloud ๊ณ„์ •์„ ๋งŒ๋“ค๊ณ  ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. n8n cloud๋Š” n8n์—์„œ ์ง์ ‘ ์ œ๊ณตํ•˜๋Š” ํ˜ธ์ŠคํŒ… ์„œ๋น„์Šค๋กœ, ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ”๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ํšŒ์›๊ฐ€์ž… ํ›„ 14์ผ ๋™์•ˆ Pro ํ”Œ๋žœ ๊ธฐ๋Šฅ์„ ๋ฌด๋ฃŒ๋กœ ์ฒดํ—˜ํ•  ์ˆ˜ ์žˆ๊ณ , ์ตœ๋Œ€ 1000ํšŒ ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰์„ ์ œ๊ณตํ•œ๋‹ค. ์‹ค์Šต์šฉ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•œ ์ˆ˜์ค€์ด๋‹ค.

 

HTTP Request ๋…ธ๋“œ ์ƒ์„ฑ

์šฐ์ธก ๋…ธ๋“œ ํŒจ๋„(๋‹จ์ถ•ํ‚ค N) > HTTP Request ๊ฒ€์ƒ‰ ํ›„ ์ถ”๊ฐ€.

 

HTTP Request ๋…ธ๋“œ๋ฅผ ์—ด์–ด์„œ Method๋Š” GET์„ ์„ ํƒํ•˜๊ณ  URL์—๋Š” ์•„๋ž˜ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

https://zenquotes.io/api/random

 

OpenAI > Message a model ๋…ธ๋“œ ์ถ”๊ฐ€

์ขŒ์ธก Input ๋…ธ๋“œ์—์„œ Execute previous nodes ๋ฒ„ํŠผ ํด๋ฆญํ•˜๋ฉด ์ด์ „ ๋…ธ๋“œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โ‘  Credential: OpenAI ์ถ”๊ฐ€ ํ˜น์€ n8n์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฌด๋ฃŒ OpenAI API credits ์„ ํƒ

โ‘ก Resource: Text

โ‘ข Operation: Message a Model

โ‘ฃ Model: gpt-4o-mini ๊ฐ™์€ ์ €๋ ดํ•œ ๋ชจ๋ธ ์„ ํƒ

โ‘ค Messages:

 

๏ฟญ Type: Text

๏ฟญ Role: User

๏ฟญ Prompt:

Please translate this quote, but not the author to Korean. Include the author name, even though you don't need to translate it.

Quote: {{ $json.q }}
Author: {{ $json.a }}

Reply only with the translation no chatter or extra words.

 

Input ํŒจ๋„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๋“œ๋ž˜๊ทธํ•˜๊ฑฐ๋‚˜ {{ $json.q }} ์ค‘๊ด„ํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด์„œ ํ•„์š”ํ•œ ์†์„ฑ์„ ์ง์ ‘ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. $json ๋ณ€์ˆ˜๋Š” ์ด์ „ ๋…ธ๋“œ์—์„œ ์ „๋‹ฌ๋ฐ›์•„ ํ˜„์žฌ ์ฒ˜๋ฆฌ ์ค‘์ธ ์•„์ดํ…œ์˜ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. 

 

n8n์—์„œ {{ expression }} ์ค‘๊ด„ํ˜ธ ์•ˆ์ชฝ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹์ด๋‹ค. {{ ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ํ•œ ์นธ ๋„์šฐ๊ฑฐ๋‚˜ ์ค‘๊ด„ํ˜ธ ํ‘œํ˜„์‹ ์•ˆ์—์„œ $๋‹ฌ๋Ÿฌ ๊ธฐํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ž๋™์™„์„ฑ ์ œ์•ˆ์ด ํ‘œ์‹œ๋œ๋‹ค.

{{ new Date() }} // Date: 2026-04-26T09:03:19.840-04:00

 

์ค‘๊ด„ํ˜ธ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ ํ•„๋“œ๋ฅผ Expression ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. Fixed๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๊ณ ์ •๋œ ๊ฐ’์„ ๋„ฃ๋Š” ๋ชจ๋“œ๋กœ, ์ •์ ์ธ ๊ฐ’์„ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

์‹คํ–‰ ํ…Œ์ŠคํŠธ

ํŠธ๋ฆฌ๊ฑฐ ์™ผ์ชฝ Execute Workflow ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์‹คํ–‰ํ•ด ๋ณธ๋‹ค. Manual Trigger ์‹คํ–‰์€ Executions ํฌ๋ ˆ๋”ง์ด ์ฐจ๊ฐ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

OpenAI ๋…ธ๋“œ ๋”๋ธ”ํด๋ฆญ ํ›„ ์šฐ์ธก OUTPUT ์ฐฝ์— ๋ฒˆ์—ญ ๊ฒฐ๊ณผ ๋‚˜์˜ค๋ฉด ์„ฑ๊ณต.

 

์ด๋ฉ”์ผ ๋…ธ๋“œ ์ถ”๊ฐ€

Gmail > Send a message ์ถ”๊ฐ€.

 

Credential ์ถ”๊ฐ€ ํ›„ ํ•„๋“œ ๋‚ด์šฉ ์ž…๋ ฅ. ์ขŒ์ธก INPUT ์ฐฝ์˜ text ์†์„ฑ์„ Message ํ•„๋“œ๋กœ ๋“œ๋ž˜๊ทธํ•˜๋ฉด ํ•ด๋‹น ๊ฐ’์ด ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋œ๋‹ค.

 

Execute step ๋ˆŒ๋Ÿฌ์„œ ํ…Œ์ŠคํŠธ. ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฉ”์ผ ๋„์ฐฉํ•˜๋ฉด ์„ฑ๊ณต.

 

Add option > Append n8n Attribution์— ์ฒดํฌํ•ด์ œํ•˜๋ฉด This email was sent … ํ‘ธํ„ฐ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

Schedule Trigger ์ถ”๊ฐ€

๋…ธ๋“œ ํŒจ๋„(๋‹จ์ถ•ํ‚ค N) > schedule ๊ฒ€์ƒ‰ > Schedule Trigger ์ถ”๊ฐ€.

 

๊ธฐ์กด ์ˆ˜๋™ ํŠธ๋ฆฌ๊ฑฐ์˜ ์—ฃ์ง€๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ์Šค์ผ€์ค„ ํŠธ๋ฆฌ๊ฑฐ ์—ฃ์ง€ ์—ฐ๊ฒฐ.

 

์Šค์ผ€์ค„ ํŠธ๋ฆฌ๊ฑฐ ์‹œ๊ฐ„ ์„ค์ •. ์‹ค์Šต์šฉ์œผ๋กœ๋Š” 5๋ถ„ ๊ฐ„๊ฒฉ ์ •๋„๊ฐ€ ์ ๋‹นํ•˜๋‹ค.

 

์šฐ์ธก ์ƒ๋‹จ Publish ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์Šค์ผ€์ค„์ด ํ™œ์„ฑํ™”๋œ๋‹ค. ์Šค์ผ€์ค„ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค Executions ํฌ๋ ˆ๋”ง์ด ์ฐจ๊ฐ๋˜๋ฏ€๋กœ ์ฃผ์˜ํ•˜์ž. ์Šค์ผ€์ค„์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด Unpublish ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ๋‹ค.

 

Executions ํƒญ์—์„œ ์ด์ „ ์‹คํ–‰ ๋‚ด์—ญ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฐ ๋…ธ๋“œ๋ฅผ ๋”๋ธ”ํด๋ฆญํ•˜๋ฉด ๋ฐ์ดํ„ฐ ๋“ฑ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

๋…ธ๋“œ ์‹คํ–‰ ์ˆœ์„œ

์œ ์šฉํ•œ ๋‹จ์ถ•ํ‚ค

๏ฟญ ์ด๋ฆ„ ๋ณ€๊ฒฝ: ๋…ธ๋“œ ์„ ํƒ > Space
๏ฟญ ๋…ธ๋“œ ์ข…๋ฅ˜ ๋ณ€๊ฒฝ: ๋…ธ๋“œ ์„ ํƒ > R
๏ฟญ ๋…ธ๋“œ ๋ณต์ œ: Cmd + D

 

๋…ธ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ํ๋ฆ„์— ๋”ฐ๋ผ ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค. ํ•˜๋‚˜์˜ ๋…ธ๋“œ์—์„œ ์—ฌ๋Ÿฌ ๋ธŒ๋žœ์น˜๋กœ ๋‚˜๋‰˜๋Š” ๊ฒฝ์šฐ ์œ„ → ์•„๋ž˜ ๋ธŒ๋žœ์น˜ ์ˆœ์„œ๋กœ ์‹คํ–‰๋œ๋‹ค. ์•„๋ž˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ๋…ธ๋“œ๋ฅผ ๊ตฌ์„ฑํ–ˆ์„ ๋•Œ 1๋ฒˆ ๋ธŒ๋žœ์น˜๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๊ณ , ๊ทธ๋‹ค์Œ 2๋ฒˆ ๋ธŒ๋žœ์น˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

 

 

์กฐ๊ฑด·๋ถ„๊ธฐ·๋ฃจํ”„ ์›Œํฌํ”Œ๋กœ์šฐ ์‹ค์Šต


๐Ÿ’ก ์›Œํฌํ”Œ๋กœ์šฐ ํ๋ฆ„

  1. ์œ ๋จธ API์—์„œ ์œ ๋จธ ๋ฐ›์•„์˜ค๊ธฐ (ICanHazDadJoke ์ด์šฉ)
    • GET ์„ฑ๊ณต(200 OK): 2๋ฒˆ ์ง„ํ–‰
    • GET ์‹คํŒจ: 30์ดˆ ๋Œ€๊ธฐ ํ›„ ๋‹ค์‹œ ์‹œ๋„
  2. AIํ•œํ…Œ ์กฐํšŒํ•œ ์œ ๋จธ๊ฐ€ ์žฌ๋ฐŒ๋Š”์ง€ ์—ฌ๋ถ€ ํ‰๊ฐ€
    • ์žฌ๋ฐŒ๋‹ค๊ณ  ํŒ๋‹จ: ์ด๋ฉ”์ผ ์ „์†ก ํ›„ ์›Œํฌํ”Œ๋กœ์šฐ ์ข…๋ฃŒ
    • ์žฌ๋ฏธ์—†์œผ๋ฉด: 5์ดˆ ๋Œ€๊ธฐ > ์œ ๋จธ ๋‹ค์‹œ ์กฐํšŒ > AI๊ฐ€ ์žฌ๋ฐŒ๋‹ค๊ณ  ํ‰๊ฐ€ํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
    • ํ‰๊ฐ€ ์˜ค๋ฅ˜: ๋‹ค์‹œ ํ‰๊ฐ€ ์š”์ฒญ

 

HTTP Request ๋…ธ๋“œ

์š”์ฒญ ์ •๋ณด ์ž…๋ ฅ ํ›„ Execute step ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ์œ ๋จธ API๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์กฐํšŒ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ์‘๋‹ต ๋ฐ์ดํ„ฐ์˜ status ๊ฐ’์ด 200์ด๋ฉด ์š”์ฒญ ์„ฑ๊ณต์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

  • Method: GET
  • URL: https://icanhazdadjoke.com
  • Send Headers: ์ฒดํฌ
  • Headers
    • Name: Accept
    • Value: application/json

 

If ๋…ธ๋“œ ์ถ”๊ฐ€

HTTP Request ๋…ธ๋“œ ๋’ค์— If ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ API ์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ ์ •์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. json.status ๊ฐ’์ด 200์ด๋ฉด ์„ฑ๊ณต, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‹คํŒจ๋กœ ๋ถ„๊ธฐํ•œ๋‹ค.

 

API ์กฐํšŒ ์‹คํŒจ ๋ถ„๊ธฐ — Wait ๋…ธ๋“œ

Wait ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ API ์กฐํšŒ์— ์‹คํŒจํ–ˆ์„ ๋•Œ 30์ดˆ ๋Œ€๊ธฐ ํ›„ ๋‹ค์‹œ ์‹œ๋„ํ•˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.

 

๊ทธ๋‹ค์Œ Wait ๋…ธ๋“œ์˜ ์—ฃ์ง€๋ฅผ ๋“œ๋ž˜๊ทธํ•ด์„œ HTTP Request์— ์—ฐ๊ฒฐํ•œ๋‹ค.

 

API ์กฐํšŒ ์„ฑ๊ณต ๋ถ„๊ธฐ — OpenAI ๋…ธ๋“œ

์œ ๋จธ API ์กฐํšŒ์— ์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด AI๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๋‹น ์œ ๋จธ๊ฐ€ ์žฌ๋ฐŒ๋Š”์ง€ ํ‰๊ฐ€ํ•œ๋‹ค.

 

If ๋…ธ๋“œ์˜ ์„ฑ๊ณต ๋ถ„๊ธฐ๋ฅผ OpenAI ๋…ธ๋“œ์— ์—ฐ๊ฒฐํ•˜๊ณ , API ์‘๋‹ต์˜ $json.joke ๊ฐ’์„ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ์ „๋‹ฌํ•œ๋‹ค. AI๊ฐ€ ์œ ๋จธ๋ฅผ ํ‰๊ฐ€ํ•œ ๋’ค ์žฌ๋ฐŒ์œผ๋ฉด is_funny, ์žฌ๋ฏธ์—†์œผ๋ฉด is_not_funny ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ”„๋กฌํ”„ํŠธ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.

 

ํ”„๋กฌํ”„ํŠธ์—์„œ ์ž…๋ ฅ๊ฐ’์„ <joke>...</joke> ๊ฐ™์€ ํƒœ๊ทธ๋กœ ๊ฐ์‹ธ๋ฉด, AI๊ฐ€ ์ง€์‹œ๋ฌธ๊ณผ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ํƒœ๊ทธ๋ฅผ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„์™€ ์—ญํ• ์„ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๊ธฐ๋ฒ•์„ XML ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ํ”„๋กฌํ”„ํŒ…์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

Tell me if this joke is funny: 

<joke>
{{ $json.joke }}
</joke>

Reply ONLY with `is_funny` or `is_not_funny`. Anything else is NOT allowed.

Be extremely critical. You're hard to please.

 

AI ์‘๋‹ต ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ — If ๋…ธ๋“œ

AI๊ฐ€ ์ž˜๋ชป๋œ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ–ˆ์„ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด If ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์‘๋‹ต๊ฐ’์ด is_funny, is_not_funny ๋‘˜ ๋‹ค ์•„๋‹Œ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๋กœ ํŒ๋‹จํ•˜๊ณ , ๋‹ค์‹œ OpenAI ๋…ธ๋“œ๋กœ ๋Œ์•„๊ฐ€์„œ ์œ ๋จธ๋ฅผ ์žฌํ‰๊ฐ€ํ•˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.

 

์—ฌ๊ธฐ์„œ true ๋ถ„๊ธฐ๋Š” is_funny, is_not_funny ๋‘˜ ์ค‘ ์–ด๋А ๊ฐ’๋„ ์•„๋‹Œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์ƒํ™ฉ์„ ์˜๋ฏธํ•œ๋‹ค. If ๋…ธ๋“œ์˜ true ๋ถ„๊ธฐ ์—ฃ์ง€๋ฅผ ๋“œ๋ž˜๊ทธํ•ด์„œ OpenAI๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค.

 

์žฌ๋ฐŒ๋Š” ์œ ๋จธ์ธ์ง€ ํŒ๋‹จ — If ๋…ธ๋“œ

AI๊ฐ€ ์œ ๋จธ๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, AI ์‘๋‹ต๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์žฌ๋ฐŒ๋Š” ์œ ๋จธ์ธ์ง€ ํŒ๋‹จํ•ด์•ผ ํ•œ๋‹ค. ์‘๋‹ต๊ฐ’์ด is_funny ์ธ์ง€ ํ™•์ธํ•˜๋Š” If ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

์ด์ „ If ๋…ธ๋“œ์˜ false ๋ถ„๊ธฐ(ํ—ˆ์šฉ๋œ ์‘๋‹ต๊ฐ’) ์—ฃ์ง€๋ฅผ ๋“œ๋ž˜๊ทธํ•ด์„œ ์—ฐ๊ฒฐํ•œ๋‹ค.

 

์žฌ๋ฐŒ๋Š” ์œ ๋จธ ์ด๋ฉ”์ผ ์ „์†ก

AI๊ฐ€ ์žฌ๋ฐŒ๋‹ค๊ณ  ํ‰๊ฐ€ํ•˜๋ฉด(true ๋ถ„๊ธฐ) ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด Gmail > Send a message ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

์ด์ „ If ๋…ธ๋“œ์˜ true ๋ถ„๊ธฐ(์žฌ๋ฐŒ๋Š” ์œ ๋จธ) ์—ฃ์ง€๋ฅผ ๋“œ๋ž˜๊ทธํ•ด์„œ ์—ฐ๊ฒฐํ•œ๋‹ค.

 

์žฌ๋ฏธ์—†๋Š” ์œ ๋จธ ๋‹ค์‹œ ์กฐํšŒ

AI๊ฐ€ ์œ ๋จธ๋ฅผ ์žฌ๋ฏธ์—†๋‹ค๊ณ  ํ‰๊ฐ€ํ–ˆ๋‹ค๋ฉด, false ๋ถ„๊ธฐ๋ฅผ ํ†ตํ•ด Wait ๋…ธ๋“œ๋กœ ์ด๋™ํ•˜๋„๋ก ์„ค์ •ํ•œ๋‹ค. Wait ๋…ธ๋“œ๋Š” ๊ณผ๋„ํ•œ API ํ˜ธ์ถœ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€๊ธฐ ๋‹จ๊ณ„๋‹ค.

 

๋Œ€๊ธฐ๊ฐ€ ๋๋‚˜๋ฉด ์ƒˆ๋กœ์šด ์œ ๋จธ๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด Wait ๋…ธ๋“œ๋ฅผ HTTP Request ๋…ธ๋“œ์— ์—ฐ๊ฒฐํ•œ๋‹ค.

 


๊ธฐ๋ณธ์ ์ธ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์„ฑ์„ ์™„๋ฃŒํ–ˆ๋‹ค. Execute workflow ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•ด ๋ณด์ž. n8n์€ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ฐ ๋…ธ๋“œ์˜ ์ƒํƒœ์™€ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ‘œ์‹œํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์ˆœ์„œ์™€ ๊ฒฐ๊ณผ๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜์‘ํ˜•