๋ฐ˜์‘ํ˜•

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

 

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

 

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

 

 

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


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

 

 

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


 

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

 

 

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


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

 

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

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

 

ZenQuotes API Endpoint:

GET https://zenquotes.io/api/random

 

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

 

โ‘  OpenAI Credential ์ถ”๊ฐ€

โ‘ก Resource: Text

โ‘ข Operation: Message a Model

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

โ‘ค Messages (์ขŒ์ธก Input ๋…ธ๋“œ์—์„œ Execute previous nodes ๋ฒ„ํŠผ ํด๋ฆญํ•˜๋ฉด ์ด์ „ ๋…ธ๋“œ ๋ฐ์ดํ„ฐ ์กฐํšŒ ๊ฐ€๋Šฅ)

 

๏ฟญ 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 ๋…ธ๋“œ ๋”๋ธ”ํด๋ฆญ ํ›„ ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฒˆ์—ญ ๊ฒฐ๊ณผ ๋‚˜์˜ค๋ฉด ์„ฑ๊ณต.

 

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

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

 

Credential ์ถ”๊ฐ€ ํ›„ ์•„๋ž˜์ฒ˜๋Ÿผ ํ•„๋“œ ์ž…๋ ฅ. 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 ๋…ธ๋“œ๋กœ ๋Œ์•„๊ฐ€์„œ ์œ ๋จธ๋ฅผ ์žฌํ‰๊ฐ€ํ•˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.

 

์ด If ๋…ธ๋“œ์—์„œ 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 ๋…ธ๋“œ์— ์—ฐ๊ฒฐํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•