
n8n์ ํ๋ง๋๋ก ๋งํ๋ฉด
๐ **“์ฝ๋ ์์ด(๋๋ ์ต์ํ์ ์ฝ๋๋ก) ์ฌ๋ฌ ์ฑ·์๋น์ค๋ฅผ ์๋์ผ๋ก ์ฐ๊ฒฐํด ์ฃผ๋ ์ํฌํ๋ก ์๋ํ ๋๊ตฌ”**์
๋๋ค.
1๏ธโฃ n8n์ ์ ์ฒด
- ์ด๋ฆ ๋ป: node-to-node
- ์ฑ๊ฒฉ: ์คํ์์ค ์ํฌํ๋ก ์๋ํ ํ๋ซํผ
- ์ญํ :
- “A๊ฐ ์ผ์ด๋๋ฉด → B ์คํ → ์กฐ๊ฑด์ ๋ฐ๋ผ C ๋๋ D ์คํ”
Zapier, Make(Integromat)์ ๊ฐ์ ๊ณ์ด์ด์ง๋ง ๊ฐ๋ฐ์ ์นํ์ ์ด๊ณ ์์ฒด ์๋ฒ ์ค์น ๊ฐ๋ฅํ ๊ฒ์ด ํฐ ์ฐจ์ด์ ๋๋ค.
2๏ธโฃ n8n์ผ๋ก ํ ์ ์๋ ๊ฒ๋ค
์์๋ก ๋ณด๋ฉด ๋ฐ๋ก ๊ฐ์ด ์์ ๐
๐น ์๋ํ ์์
- ๊ตฌ๊ธ ํผ ์ ์ถ →
Notion์ ์ ์ฅ →
์ฌ๋ ์๋ฆผ ์ ์ก - ์ด๋ฉ์ผ ์์ →
์ฒจ๋ถํ์ผ ๋ถ์ →
ChatGPT๋ก ์์ฝ →
๊ฒฐ๊ณผ๋ฅผ ์์ /DB์ ์ ์ฅ - API ํธ์ถ →
๋ฐ์ดํฐ ๊ฐ๊ณต →
๋์๋ณด๋์ฉ ๋ฐ์ดํฐ ์์ฑ
3๏ธโฃ ํต์ฌ ๊ตฌ์ฑ ๊ฐ๋
n8n์ ๋ ธ๋(Node) ๊ธฐ๋ฐ์ ๋๋ค.
| Node | ํ๋์ ์์ ๋จ์ (API ํธ์ถ, ์กฐ๊ฑด๋ฌธ, ์ด๋ฉ์ผ ๋ฐ์ก ๋ฑ) |
| Workflow | ๋ ธ๋๋ค์ ์ฐ๊ฒฐํ ์๋ํ ํ๋ฆ |
| Trigger | ์ํฌํ๋ก ์์ ์กฐ๊ฑด (์นํ , ์๊ฐ, ์ด๋ฒคํธ ๋ฑ) |
| Execution | ์ค์ ์คํ๋ ๊ธฐ๋ก |
๐ ๋๋๊ทธ ์ค ๋๋กญ + ํ์ํ๋ฉด JS ์ฝ๋ ์ฝ์ ๊ฐ๋ฅ
4๏ธโฃ ์ n8n์ ์ฐ๋๊ฐ?
โ ์ฅ์
- ์คํ์์ค (๋น์ฉ ํต์ ๊ฐ๋ฅ)
- ์์ฒด ์๋ฒ ์ค์น ๊ฐ๋ฅ → ๋ณด์/๋ฐ์ดํฐ ์ฃผ๊ถ
- API, DB, AI ์ฐ๋์ ๊ฐํจ
- ๋ณต์กํ ๋ก์ง (์กฐ๊ฑด, ๋ฐ๋ณต, ๋ถ๊ธฐ) ๊ตฌํ ๊ฐ๋ฅ
โ ๏ธ ๋จ์
- ์์ ๋ ธ์ฝ๋๋ ์๋ (๊ธฐ๋ณธ์ ์ธ ๋ก์ง ์ดํด ํ์)
- ์ด๊ธฐ ์ค์ ์ด Zapier๋ณด๋ค ์ด๋ ค์
5๏ธโฃ n8n vs ๋ค๋ฅธ ์๋ํ ํด
| ์คํ์์ค | โ | โ | โ |
| ์์ฒด ์๋ฒ | โ | โ | โ |
| ๋ณต์กํ ๋ก์ง | โญโญโญโญ | โญโญ | โญโญโญ |
| ๊ฐ๋ฐ์ ์นํ | โญโญโญโญ | โญ | โญโญ |
| ๋น์ฉ ์ ์ฐ์ฑ | โญโญโญโญ | โญ | โญโญ |
6๏ธโฃ ์์ฆ n8n์ด ๋จ๋ ์ด์ (ํนํ AI ์ชฝ)
- LLM (ChatGPT, Claude ๋ฑ)๊ณผ ์๋ํ ๊ฒฐํฉ
- AI ์์ด์ ํธ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ ๊ฐ๋ฅ
- RAG, ๋ฐ์ดํฐ ์์ง·์ ์ ์๋ํ์ ์ ํฉ
๐ ๊ทธ๋์ ์์ฆ์
“AI ์๋ํ ๋ฐฑ์๋” ์ฉ๋๋ก ๋ง์ด ์๋๋ค.
7๏ธโฃ ๋น์ ์๊ฒ ํนํ ์ ๋ง๋ ์ด์ (๋งฅ๋ฝ ๊ธฐ๋ฐ)
์ง๊ธ ๋น์ ์
- AI + ์ ์ฑ /ํ๊ฒฝ + ์๋น์ค ๊ธฐํ
- ๊ณต๋ชจ์ , ํด์ปคํค, R&D ์์ด๋์ด
๋ฅผ ๋์์ ๋ค๋ฃจ๊ณ ์์ฃ .
๐ n8n์
**“๊ธฐํ + ๊ธฐ์ ์ค๊ฐ ์ง์ ”**์ ์๋ ์ฌ๋์๊ฒ ์ต์ ์
๋๋ค.
n8n์์ ์ฌ๋๊ณผ gmail ์ฐ๋ํ๋ ๊ณผ์ ์์, ์ฌ๋์ oauth ๋ฐฉ์๊ณผ access token ๋ฐฉ์ ๋๊ฐ์ง๋ฅผ ์ ์ํ๋๋ฐ, ๊ฐ๋ ์ ์ผ๋ก ๊ตฌ๊ธ ๋ก๊ทธ์ธ์ ํ ๋, oauth ๋ฐฉ์๊ณผ access token์ ๊ฐ์ ๋ฐฉ์์ด ์๋๊ฐ? ์ ๋๊ฐ์ง๋ฅผ ๋ณ๋๋ก ์ ์ํ๋๊ฑด๊ฐ?
๐ ํต์ฌ ์์ฝ (๋จผ์ ๊ฒฐ๋ก ๋ถํฐ)
OAuth์ Access Token์ ๊ฐ์ ๊ฒ์ด ์๋๋๋ค.
**Access Token์ OAuth ๊ณผ์ ์ “๊ฒฐ๊ณผ๋ฌผ”**์ด๊ณ ,
**OAuth ๋ฐฉ์์ ํ ํฐ์ ์๋์ผ๋ก ๋ฐ๊ธ·๊ฐฑ์ ๊น์ง ๊ด๋ฆฌํด์ฃผ๋ “์ธ์ฆ ์ ์ฐจ ์ ์ฒด”**์ ๋๋ค.
๊ทธ๋์ n8n์์๋ ์ฌ์ฉ์ ํธ์์ฑ๊ณผ ์ด์ ๋ฐฉ์ ์ฐจ์ด ๋๋ฌธ์ ๋ ๊ฐ์ง๋ฅผ ๋ณ๋๋ก ์ ๊ณตํฉ๋๋ค.
1๏ธโฃ OAuth ๋ฐฉ์๊ณผ Access Token ๋ฐฉ์์ ๊ฐ๋ ์ ์ฐจ์ด
๐ OAuth (OAuth 2.0)
OAuth๋ ‘๋ก๊ทธ์ธ ๋ฐฉ์’์ด ์๋๋ผ, ๊ถํ ์์ ํ๋กํ ์ฝ์ ๋๋ค.
ํน์ง
- ์ฌ์ฉ์๊ฐ ๊ตฌ๊ธ/์ฌ๋ ๋ก๊ทธ์ธ ํ๋ฉด์์ ์ง์ ์น์ธ
- ์ฑ(n8n)์ด Access Token + Refresh Token์ ์๋์ผ๋ก ๋ฐ๊ธ๋ฐ์
- Access Token ๋ง๋ฃ ์ Refresh Token์ผ๋ก ์๋ ์ฌ๋ฐ๊ธ
- ๋ณด์ ์์ค ๋์
- ์ฅ๊ธฐ ์ด์(์๋ํ)์ ์ ํฉ
๐ ๊ตฌ๊ธ ๋ก๊ทธ์ธ = OAuth ์ธ์ฆ ํ๋ฆ์ ๋ํ์ ์ธ ์
๐ Access Token ๋ฐฉ์
์ด๋ฏธ ๋ฐ๊ธ๋ ํ ํฐ์ ์ฌ์ฉ์๊ฐ ์ง์ ์ ๋ ฅํ๋ ๋ฐฉ์
ํน์ง
- OAuth ์ธ์ฆ ํ๋ฉด ์์
- ๊ฐ๋ฐ์ ์ฝ์์์ ํ ํฐ์ ์ง์ ์์ฑ
- ํ ํฐ ๋ง๋ฃ ์ ์๋์ผ๋ก ์ฌ๋ฐ๊ธ
- ๋น ๋ฅด๊ฒ ํ ์คํธ ๊ฐ๋ฅ
- ๋จ๊ธฐ / ๊ฐ์ธ์ฉ / PoC์ ์ ํฉ
2๏ธโฃ ์ “๊ตฌ๊ธ ๋ก๊ทธ์ธ๋ OAuth์ธ๋ฐ” Access Token์ ๋ฐ๋ก ์ ๊ณตํ ๊น?
์ฌ๊ธฐ์ ํท๊ฐ๋ฆฌ๋ ํฌ์ธํธ๊ฐ ๋์ต๋๋ค.
โ ์ค์ํ ๊ตฌ๋ถ
| ์๋ฏธ | ์ธ์ฆ + ๊ถํ ์์ ์ ์ฒด ๊ณผ์ | OAuth ๊ฒฐ๊ณผ๋ฌผ |
| ์ฌ์ฉ์ ๋ก๊ทธ์ธ | ์์ | ์์ |
| ํ ํฐ ๊ฐฑ์ | ์๋ | ์๋ |
| ๊ด๋ฆฌ ๋์ด๋ | ์ฌ์ | ๋ฒ๊ฑฐ๋ก์ |
| ๋ณด์์ฑ | ๋์ | ์๋์ ์ผ๋ก ๋ฎ์ |
๐ ์ฆ,
๊ตฌ๊ธ ๋ก๊ทธ์ธ = OAuth ํ๋ก์ฐ
Access Token = ๊ทธ ๊ฒฐ๊ณผ๋ก ๋์จ ์ด์ ํ๋
3๏ธโฃ n8n์ด ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ์ ๊ณตํ๋ ์ด์
๐ฏ ์ด์ ๋ “์ฌ์ฉ์ ์ํฉ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ”์ ๋๋ค.
โ OAuth ๋ฐฉ์์ ์ ๊ณตํ๋ ์ด์
- ๋น๊ฐ๋ฐ์๋ ์ฝ๊ฒ ์ฌ์ฉ
- ํ ํฐ ์๋ ๊ฐฑ์
- ์ฅ๊ธฐ ์ํฌํ๋ก์ฐ์ ์์ ์
- ๊ธฐ์ ํ๊ฒฝ์ ์ ํฉ
๐ ์ถ์ฒ ๋ฐฉ์ (๋๋ถ๋ถ์ ๊ฒฝ์ฐ)
โ Access Token ๋ฐฉ์์ ์ ๊ณตํ๋ ์ด์
- ์ด๋ฏธ ํ ํฐ์ ๋ฐ๊ธํด๋ ๊ฒฝ์ฐ
- ์ฌ๋ด ๋ณด์ ์ ์ฑ ์ OAuth ๋ฆฌ๋ค์ด๋ ํธ ๋ถ๊ฐ
- ์๋ฒ ํ๊ฒฝ(air-gapped, ๋ด๋ถ๋ง)
- ๋น ๋ฅธ ํ ์คํธ/์์ ์๋ํ
๐ ์ ํ์ ·๊ณ ๊ธ ์ฌ์ฉ์์ฉ
4๏ธโฃ Slack / Gmail ๊ด์ ์์ ๋ณด๋ฉด
๐น Gmail (Google API)
- OAuth ์ฌ์ฉ ์
- Google ๊ณ์ ๋ก๊ทธ์ธ → ๊ถํ ์น์ธ
- Refresh Token ํฌํจ
- Access Token ๋ฐฉ์
- Google Cloud Console์์ ์ง์ ๋ฐ๊ธ
- ๋ง๋ฃ๋๋ฉด ์ฌ๋ฐ๊ธ ํ์
๐น Slack
- OAuth ๋ฐฉ์
- Workspace ์น์ธ
- Bot Token ์๋ ๊ด๋ฆฌ
- Access Token ๋ฐฉ์
- xoxb-xxxxx ํํ ํ ํฐ ์ง์ ์ ๋ ฅ
- ํ ํฐ ๋ง๋ฃ/๊ถํ ๋ณ๊ฒฝ ์ ์๋ ๋์
5๏ธโฃ ํ ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌํ๋ฉด
OAuth๋ “์๋์ผ๋ก ์ด์ ๋ฅผ ๋ฐ๊ธ·๊ด๋ฆฌํด์ฃผ๋ ์์คํ ”์ด๊ณ ,
Access Token์ “์ด๋ฏธ ๋ฐ๊ธ๋ ์ด์ ๋ฅผ ๊ทธ๋ฅ ๋ค๊ณ ์ฐ๋ ๋ฐฉ์”์ ๋๋ค.
n8n์
โ ์์ ์ ์ธ ์ด์์ ์ํ๋ ์ฌ์ฉ์์
โ ์ ์ด๊ถ์ ์ง์ ๊ฐ๊ณ ์ถ์ ์ฌ์ฉ์
๋ ๋ค๋ฅผ ๋ง์กฑ์ํค๊ธฐ ์ํด ๋ ๋ฐฉ์์ ๋ชจ๋ ์ ๊ณตํ๋ ๊ฒ์
๋๋ค.
๐ง ์ด๋ค ๊ฑธ ์ ํํด์ผ ํ ๊น?
| ์ฅ๊ธฐ ์๋ํ | โ OAuth |
| ๊ฐ์ธ ์คํ | Access Token |
| ๊ธฐ์ /ํ ํ๊ฒฝ | โ OAuth |
| ๋ด๋ถ๋ง/์ ์ฝ ํ๊ฒฝ | Access Token |
๐ ํต์ฌ ์์ฝ
Slack Access Token์ ์ ํจ๊ธฐ๊ฐ์ ๊ฐ๋ฐ์๊ฐ ์์๋ก ์ค์ ํ ์ ์์ต๋๋ค.
12์๊ฐ ๊ณ ์ ๋ ์๋๊ณ , “ํ ํฐ ์ข ๋ฅ + ์ํฌ์คํ์ด์ค ์ ์ฑ ”์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
์ฆ,
- โ ๊ฐ๋ฐ์๊ฐ “์์ ํ ํฐ” ๋๋ “12์๊ฐ ํ ํฐ”์ ์ ํํด์ ๋ง๋๋ ๊ตฌ์กฐ๋ ์๋๊ณ
- โ Slack์ด ํ ํฐ ํ์ ๋ณ๋ก ์ ์ฑ ์ ์ ํด๋๊ณ ,
- โ ์ผ๋ถ ๊ฒฝ์ฐ์๋ง 12์๊ฐ ๋ง๋ฃ + Refresh Token ๊ตฌ์กฐ๊ฐ ์ ์ฉ๋ฉ๋๋ค.
1๏ธโฃ Slack Access Token ์ ํ๋ถํฐ ์ ๋ฆฌ
Slack ํ ํฐ์ ํฌ๊ฒ ์๋์ฒ๋ผ ๋๋ฉ๋๋ค.
| Bot Token (๊ถ์ฅ) | xoxb-... | ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง๋ฃ ์์ |
| User Token | xoxp-... | ์ํฌ์คํ์ด์ค ์ ์ฑ ์ ๋ฐ๋ผ ๋ง๋ฃ ๊ฐ๋ฅ |
| OAuth v2 Access Token (Token Rotation ์ฌ์ฉ ์) | xoxb-... | 12์๊ฐ |
| Incoming Webhook | URL ํํ | ๋ง๋ฃ ์์ (๊ถํ ๊ณ ์ ) |
๐ ์ง๋ฌธํ์ “12์๊ฐ” ์ด์๋ ํน์ ์กฐ๊ฑด์์๋ง ๋ฐ์ํฉ๋๋ค.
2๏ธโฃ 12์๊ฐ ๋ง๋ฃ ํ ํฐ์ ์ธ์ ์๊ธฐ๋?
โ Slack์ Token Rotation ๊ธฐ๋ฅ์ด ํ์ฑํ๋ ๊ฒฝ์ฐ
Slack์ ๋ณด์์ ๊ฐํํ๊ธฐ ์ํด OAuth Token Rotation์ ๋์ ํ์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ด ์ผ์ ธ ์์ผ๋ฉด:
- Access Token ์ ํจ๊ธฐ๊ฐ: 12์๊ฐ
- ๋์ Refresh Token์ด ํจ๊ป ๋ฐ๊ธ๋จ
- Access Token ๋ง๋ฃ ์ → Refresh Token์ผ๋ก ์ฌ๋ฐ๊ธ
๐ ์ด๊ฑด Google OAuth์ ๋งค์ฐ ์ ์ฌํ ๊ตฌ์กฐ์ ๋๋ค.
3๏ธโฃ Access Token ๋ฐฉ์์์ “12์๊ฐ ๊ณ ์ ”์ธ๊ฐ?
โ ์๋๋๋ค. ์กฐ๊ฑด๋ถ์ ๋๋ค.
| Bot Token (Token Rotation โ) | ๋ฌด๊ธฐํ |
| Bot Token (Token Rotation โ ) | 12์๊ฐ |
| User Token | ์กฐ์ง ์ ์ฑ ์ ๋ฐ๋ผ ๋ค๋ฆ |
| Incoming Webhook | ๋ฌด๊ธฐํ |
์ฆ,
Access Token ๋ฐฉ์ = ๋ฌด์กฐ๊ฑด 12์๊ฐ โ
Token Rotation์ด ์ผ์ง OAuth Access Token๋ง 12์๊ฐ โญ
4๏ธโฃ ๊ฐ๋ฐ์๊ฐ ์ ํจ๊ธฐ๊ฐ์ ์กฐ์ ํ ์ ์์๊น?
โ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
Slack์์๋:
- ํ ํฐ ์๋ช (Time To Live)์ ๊ฐ๋ฐ์๊ฐ ์ง์ โ
- “์์ / ๋จ๊ธฐ” ์ ํ โ
- ์ค์ง Slack ์ ์ฑ + Workspace ๋ณด์ ์ค์ ์ ๋ฐ๋ฆ โญ
๐ ๊ฐ๋ฐ์๊ฐ ํ ์ ์๋ ๊ฑด ๋ฑ ํ๋์ ๋๋ค.
โ ๊ฐ๋ฅํ ์ ํ์ง
- Token Rotation์ ์ฐ๋๋ / ์ ์ฐ๋๋
- OAuth ๋ฐฉ์์ด๋, ์๋ Access Token์ด๋
5๏ธโฃ n8n์์ Access Token ๋ฐฉ์ ์ฌ์ฉ ์ ์ฃผ์์
โ ๏ธ ๊ฐ์ฅ ์ค์ํ ํฌ์ธํธ
- n8n์ Access Token ๋ฐฉ์์ Refresh Token์ ์๋ ๊ด๋ฆฌํ์ง ์์ต๋๋ค
- ๋ง์ฝ Token Rotation์ด ์ผ์ง ํ ํฐ์ด๋ฉด:
- 12์๊ฐ ํ ์๋์ผ๋ก ๊นจ์ง
- ์ํฌํ๋ก์ฐ ์คํจ
๊ทธ๋์ n8n ๊ณต์ ๊ถ์ฅ ํ๋ฆ์?
| ์ฅ๊ธฐ ์๋ํ | โ OAuth ๋ฐฉ์ |
| ํ ์คํธ / ๋จ๊ธฐ ์์ | Access Token |
| Token Rotation ์ฌ์ฉ ์ค | โ Access Token ๋ฐฉ์ ๋น์ถ์ฒ |
6๏ธโฃ ํ ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌํ๋ฉด
Slack Access Token์ ์ ํจ๊ธฐ๊ฐ์ ๊ฐ๋ฐ์๊ฐ ์ ํ๋ ๊ฒ ์๋๋ผ,
Slack์ด ์ ํ๊ณ , 12์๊ฐ์ “Token Rotation์ ์ผฐ์ ๋๋ง” ์ ์ฉ๋ฉ๋๋ค.
๐ ํต์ฌ ์์ฝ
n8n์์ Access Token ๋ฐฉ์์ ์ฅ์ ์ ‘๊ธฐ์ ์ ์ฐ์์ฑ’์ด ์๋๋ผ
‘ํ๊ฒฝ ์ ์ฝ์ ์ฐํํ ์ ์๋ ์์ ๋’์ ์์ต๋๋ค.
์ฆ,
- ์์ ์ฑ·์๋ํ → โ
- ์ ์ด๊ถ·๋จ์์ฑ·ํ๊ฒฝ ์ ์๋ ฅ → โญ
1๏ธโฃ Access Token ๋ฐฉ์์ ์ค์ง์ ์ธ ์ฅ์
โ 1. OAuth ๋ฆฌ๋ค์ด๋ ํธ๊ฐ ๋ถ๊ฐ๋ฅํ ํ๊ฒฝ์์ ์ฌ์ฉ ๊ฐ๋ฅ
๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋๋ค.
์ด๋ฐ ํ๊ฒฝ์์ ํนํ ์ ๋ฆฌํฉ๋๋ค
- ์ฌ๋ด ํ์๋ง / ๋ด๋ถ๋ง
- ์ธ๋ถ OAuth Redirect URL ํ์ฉ โ
- ๋ฐฉํ๋ฒฝ, ํ๋ก์, ๋ณด์ ์ฅ๋น ์ ํ
- ๋ก์ปฌ n8n (localhost)
๐ OAuth๋ ์ฝ๋ฐฑ URL ๋
ธ์ถ์ด ํ์์ด์ง๋ง
๐ Access Token์ ๊ทธ๋ฅ ๊ฐ ํ๋ ์
๋ ฅ์ด๋ฉด ๋์
๋๋ค.
โ 2. ์ด๊ธฐ ์ธํ ์ด ๋งค์ฐ ๋น ๋ฅด๋ค (PoC, ํ ์คํธ ์ต๊ฐ)
- Slack App ์์ฑ
- Bot Token ๋ณต์ฌ
- n8n์ ๋ถ์ฌ๋ฃ๊ธฐ
- ๋ฐ๋ก ์คํ
โฑ๏ธ 5๋ถ ์ปท ๊ฐ๋ฅ
๐
- ๋ฐ๋ชจ
- ์คํ
- ์์ ์๋ํ
- ๊ฐ์ธ ํ ์คํธ
์ ๋งค์ฐ ์ ํฉํฉ๋๋ค.
โ 3. ๊ถํ์ “์ ํํ” ์ ์ดํ ์ ์๋ค
OAuth๋ ๋ณดํต:
- broad scope
- ์๋ ์น์ธ ํ๋ฆ
๋ฐ๋ฉด Access Token์:
- ํ์ํ Scope๋ง ๊ณจ๋ผ์ ์์ฑ
- ์ต์ ๊ถํ ์์น(Principle of Least Privilege) ๊ตฌํ ์ฌ์
๐ ๋ณด์ํ๊ณผ ํ์ ํ ๋ ์คํ๋ ค ์ ํธ๋๋ ๊ฒฝ์ฐ๋ ๋ง์ต๋๋ค.
โ 4. ์๋น์ค ๊ณ์ ๊ฐ๋ ์ ๊ฐ๊น๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ
- ํน์ ์ฌ๋ ๊ณ์ โ
- ํน์ Bot / App ๊ถํ โญ
์ฆ,
- ์ฌ๋์ด ํด์ฌํด๋ ํ ํฐ์ ์ ์ง
- “๊ฐ์ธ ๊ณ์ ์ข ์” ๋ฌธ์ ํํผ
๐ ์กฐ์ง ์๋ํ์์ ์๊ทผํ ์ค์ํ ํฌ์ธํธ์ ๋๋ค.
โ 5. ์ฅ์ ์์ธ ํ์ ์ด ์ฝ๋ค
OAuth ๋ฌธ์ :
- ๋ฆฌ๋ค์ด๋ ํธ ์คํจ
- ํ ํฐ ๋ง๋ฃ
- Refresh ์คํจ
- ๊ถํ ๋ณ๊ฒฝ
Access Token ๋ฌธ์ :
- ๋๋ค / ์ ๋๋ค
๐ ์ด์ ์ค ํธ๋ฌ๋ธ์ํ ๋์ด๋๊ฐ ๋ฎ์ต๋๋ค.
2๏ธโฃ ๊ทธ๋ผ์๋ OAuth๊ฐ ๊ธฐ๋ณธ ์ถ์ฒ์ธ ์ด์
์์งํ ๋ง์๋๋ฆฌ๋ฉด:
์ฅ๊ธฐ ์ด์ ์๋ํ์์๋ OAuth๊ฐ ๋ ๋ซ์ต๋๋ค.
์ด์
- ํ ํฐ ์๋ ๊ฐฑ์
- Slack ์ ์ฑ ๋ณ๊ฒฝ ๋์
- ๋ณด์ ํ์ค ์ค์
- n8n์์ ๊ณต์ ์ง์
Access Token์ **“์๋์ ์ผ๋ก ๊ฐ์ํ๋ ์ ํ์ง”**์ ๋๋ค.
3๏ธโฃ ์ธ์ Access Token์ด ‘์ ๋ต’์ธ๊ฐ?
๐ฅ Access Token์ด ๋ ๋์ ๊ฒฝ์ฐ TOP 5
| ์ฌ๋ด ํ์๋ง | OAuth ๋ถ๊ฐ |
| ๋ก์ปฌ n8n | ์ฝ๋ฐฑ URL ๋ฌธ์ |
| PoC / ๋ฐ๋ชจ | ๋น ๋ฅธ ์ธํ |
| ๋ณด์ํ ์๊ตฌ | ์ต์ ๊ถํ |
| ๋จ๊ธฐ ์๋ํ | ์ ์ง ๋ถ๋ด ์ ์ |
4๏ธโฃ ํ ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌํ๋ฉด
n8n์์ Access Token ๋ฐฉ์์ ์ฅ์ ์
“์๋ํ ์นํ์ฑ”์ด ์๋๋ผ “ํ๊ฒฝ ์นํ์ฑ”์ ๋๋ค.
OAuth๋ ์ ์,
Access Token์ ํ์ค์ ์ธ ์ฐํ๋ก์ ๊ฐ๊น์ต๋๋ค.
5๏ธโฃ ์ค๋ฌด ํ (์ค์)
Access Token์ ์ธ ๋ ๊ผญ ์ง์ผ์ผ ํ ๊ฒ:
- ๐ Token Rotation OFF ์ฌ๋ถ ํ์ธ
- ๐ ๋ง๋ฃ ์ ์ฑ ๋ฌธ์ํ
- ๐ ๊ต์ฒด ์ฃผ๊ธฐ ์บ๋ฆฐ๋ ๋ฑ๋ก
- ๐งช ์คํจ ๋๋น ์๋ฆผ ์ํฌํ๋ก์ฐ ๊ตฌ์ฑ
ํ๋ก ํธ์๋์์ ์ฌ์ฉํ๋ ํ๋ก์ฐ ๊ฐ๋ ์ด ๋ค์ด๊ฐ ๋จ์ด๋?
1. ๋ฐ์ดํฐ ๋ฐ ์ํ ๊ด๋ฆฌ ์ธก๋ฉด (Data Flow)
๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๋งฅ๋ฝ์ ๋๋ค. ๋ฐ์ดํฐ๊ฐ ์ด๋์ ์์ํด์ ์ด๋๋ก ํ๋ฅด๋์ง๋ฅผ ์ ์ํ ๋ ์ฌ์ฉํฉ๋๋ค.
- ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ (Unidirectional Data Flow): ๋ฆฌ์กํธ(React)์ ํต์ฌ ๊ฐ๋ ์ ๋๋ค. ๋ฐ์ดํฐ๋ ๋ถ๋ชจ์์ ์์์ผ๋ก๋ง ํ๋ฅธ๋ค๋ ์์น์ ๋๋ค.
- ํ๋ญ์ค (Flux) ํจํด: ํ์ด์ค๋ถ(ํ Meta)์์ ์ ์ํ ์ํคํ ์ฒ๋ก, Action → Dispatcher → Store → View ์์๋ก ๋ฐ์ดํฐ๊ฐ ํ ๋ฐฉํฅ์ผ๋ก๋ง ํ๋ฅด๋ 'ํ๋ก์ฐ'๋ฅผ ๊ฐ์กฐํฉ๋๋ค.
- ์คํธ๋ฆผ (Stream): RxJS ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ฅธ ์ฐ์์ ์ธ 'ํ๋ฆ'์ผ๋ก ๋ค๋ฃฐ ๋ ์ฌ์ฉํฉ๋๋ค.
2. ์ฌ์ฉ์ ๊ฒฝํ ๋ฐ ์ธํฐ๋์ ์ธก๋ฉด (User Flow)
์ฌ์ฉ์๊ฐ ํ๋ฉด์์ ์ด๋ค ์์๋ก ์์ง์ด๋์ง๋ฅผ ์ ์ํ ๋ ์ฌ์ฉํฉ๋๋ค.
- ์ ์ ํ๋ก์ฐ (User Flow): ์ฌ์ฉ์๊ฐ ํน์ ๋ชฉ์ (์: ํ์๊ฐ์ , ๊ฒฐ์ )์ ๋ฌ์ฑํ๊ธฐ ์ํด ๊ฑฐ์น๋ ํ๋ฉด ๊ฐ์ ๊ฒฝ๋ก๋ฅผ ์๊ฐํํ ์ง๋์ ๋๋ค.
- ํ์ด์ง ํ๋ก์ฐ (Page Flow): ์น์ฌ์ดํธ ๋ด์์ ํ์ด์ง๋ค์ด ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋์ด ์๋์ง๋ฅผ ๋ํ๋ ๋๋ค.
- ์ธ์ฆ ํ๋ก์ฐ (Auth Flow): ๋ก๊ทธ์ธ, ๋ก๊ทธ์์, ํ ํฐ ๊ฐฑ์ ๋ฑ ์ธ์ฆ๊ณผ ๊ด๋ จ๋ ์ผ๋ จ์ ๋จ๊ณ(Step)๋ฅผ ์๋ฏธํฉ๋๋ค.
3. ๊ฐ๋ฐ ๋๊ตฌ ๋ฐ ํ๋ก์ธ์ค ์ธก๋ฉด
์์ ๋ฐฉ์์ด๋ ๊ธฐ์ ์คํ ์์ฒด์ ์ด๋ฆ์ ํฌํจ๋ ๊ฒฝ์ฐ์ ๋๋ค.
- ์ํฌํ๋ก์ฐ (Workflow): ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ํ ์คํธํ๊ณ , ๋ฐฐํฌํ๋ ์ ์ฒด์ ์ธ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค. (์: CI/CD ์ํฌํ๋ก์ฐ)
- ํ๋ก์ฐ (Flow): ํ์ด์ค๋ถ์์ ๋ง๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ ์ ํ์ ์ฒดํฌ ๋๊ตฌ์ ์ด๋ฆ์ ๋๋ค. (TypeScript์ ๋น์ทํ ์ญํ ์ ํฉ๋๋ค.)
- ์ ์ด ํ๋ฆ (Control Flow): if, switch, for ๋ฌธ์ฒ๋ผ ์ฝ๋์ ์คํ ์์๋ฅผ ๊ฒฐ์ ํ๋ ๋ ผ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋งํฉ๋๋ค. ์ต๊ทผ ํ๋ ์์ํฌ(์: Angular 17+)์์๋ ์ด๋ฅผ ๋ ์ง๊ด์ ์ผ๋ก ๋ง๋ 'Built-in Control Flow'๋ผ๋ ์ฉ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
4. ์๊ฐ์ ํ๋ก๊ทธ๋๋ฐ (Visual Flow)
์ต๊ทผ n8n์ฒ๋ผ ํ๋ก ํธ์๋ UI ์์์ ๋ก์ง์ ์ฐ๊ฒฐํ๋ ๋ฐฉ์์ ๋๋ค.
- ๋ ธ๋ ๊ธฐ๋ฐ ํ๋ก์ฐ (Node-based Flow): ์์(Node)์ ์ (Edge)์ ์ฐ๊ฒฐํด ๋ก์ง์ ๋ง๋๋ ๋ฐฉ์์ ๋๋ค. (์: React Flow ๋ผ์ด๋ธ๋ฌ๋ฆฌ)
์ ๋ฆฌํ์๋ฉด: ๋ง์ฝ ์ง๊ธ n8n๊ณผ ์ฐ๋ํ๋ ํ๋ก ํธ์๋ ์์ ์ ์ผ๋์ ๋๊ณ ๊ณ์ ๋ค๋ฉด, ์ฃผ๋ก **"์ธ์ฆ ํ๋ก์ฐ(Auth Flow)"**๋ **"๋ฐ์ดํฐ ์ํฌํ๋ก์ฐ(Data Workflow)"**๋ผ๋ ๋จ์ด๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ ํ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
๐ ํต์ฌ ์์ฝ
ํ๋ก ํธ์๋์์ “flow”๊ฐ ๋ค์ด๊ฐ ๋จ์ด๋
์ฌ์ฉ์ ํ๋ฆ(UX), ์ํ ๋ณํ ํ๋ฆ, ๋ฐ์ดํฐ ์ด๋, ์ธ์ฆ ์ ์ฐจ๋ฅผ ์ค๋ช ํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
1๏ธโฃ UX / ์ฌ์ฉ์ ๊ด์ ์ Flow ์ฉ์ด
โ User Flow (์ ์ ํ๋ก์ฐ)
- ์ฌ์ฉ์๊ฐ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ๊น์ง์ ํ๋ฉด ์ด๋ ๊ฒฝ๋ก
- ์: ๋ก๊ทธ์ธ → ํ → ์ํ ์ ํ → ๊ฒฐ์
๐ UX ๊ธฐํ, ์์ด์ดํ๋ ์, Figma์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ
โ Task Flow
- ํ๋์ ์์ (Task)์๋ง ์ง์คํ ์ฌ์ฉ์ ํ๋ฆ
- ๋ถ๊ธฐ ์ต์ํ, ์ง์ ์ ํ๋ฆ
๐ ์จ๋ณด๋ฉ, ํ์๊ฐ์ ์ค๊ณ์ ์์ฃผ ๋ฑ์ฅ
โ Screen Flow / Page Flow
- ํ๋ฉด ๋จ์์ ์ด๋ ํ๋ฆ
- ๋ชจ๋ฐ์ผ ์ฑ ๊ธฐํ ๋ฌธ์์์ ์์ฃผ ์ฌ์ฉ
2๏ธโฃ ์ํ ๊ด๋ฆฌ / ๋ก์ง ๊ด์ ์ Flow
โ Data Flow
- ๋ฐ์ดํฐ๊ฐ ์ด๋์ ์์ฑ๋๊ณ , ์ด๋๋ก ์ ๋ฌ๋๋์ง
- Props → State → API → Store
๐ React, Vue ๋ฑ์์ ๊ธฐ๋ณธ ๊ฐ๋
โ Unidirectional Data Flow (๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ)
- ๋ฐ์ดํฐ๋ ํ ๋ฐฉํฅ์ผ๋ก๋ง ํ๋ฆ
- React, Redux ์ฒ ํ์ ํต์ฌ
โ State Flow
- ์ํ(State)๊ฐ ๋ณํํ๋ ์ ์ฒด ๊ณผ์
- UI ๋ฐ์๊ณผ ์ง๊ฒฐ
๐ ๋ณต์กํ ์ปดํฌ๋ํธ ์ค๊ณ ์ ์ค์
3๏ธโฃ ์ธ์ฆ / ๊ถํ ๊ด๋ จ Flow
โ Auth Flow (Authentication Flow)
- ๋ก๊ทธ์ธ, ๋ก๊ทธ์์, ํ ํฐ ๊ฐฑ์ ๊น์ง์ ํ๋ฆ
- OAuth Flow, Login Flow๋ผ๊ณ ๋ ํจ
๐ ํ๋ก ํธ์๋ + ๋ฐฑ์๋ ํ์ ํต์ฌ ์ฉ์ด
โ OAuth Flow
- ์ธ์ฆ ์๋ฒ → ๋ฆฌ๋ค์ด๋ ํธ → ํ ํฐ ๋ฐ๊ธ
- Authorization Code Flow, Implicit Flow ๋ฑ
๐ Google / Slack ๋ก๊ทธ์ธ ์ค๋ช ํ ๋ ์ฌ์ฉ
4๏ธโฃ ๊ฐ๋ฐ ํ๋ก์ธ์ค / UI ์ ์ด Flow
โ Control Flow
- ์กฐ๊ฑด๋ฌธ, ์ด๋ฒคํธ, ๋น๋๊ธฐ ์ฒ๋ฆฌ ํ๋ฆ
- ํด๋ฆญ → ์ด๋ฒคํธ → ์ํ ๋ณ๊ฒฝ → ๋ ๋๋ง
โ Render Flow
- ์ํ ๋ณ๊ฒฝ → ์ฌ๋ ๋๋ง ๊ณผ์
- React ์ฑ๋ฅ ์ต์ ํ์์ ์์ฃผ ๋ฑ์ฅ
โ Navigation Flow
- ๋ผ์ฐํ ๊ตฌ์กฐ
- SPA(Single Page Application)์์ ์ค์
5๏ธโฃ ๋ผ์ด๋ธ๋ฌ๋ฆฌ / ๋๊ตฌ ์ด๋ฆ์ผ๋ก ์ฐ์ด๋ Flow
โ Flow (by Meta)
- JavaScript ์ ์ ํ์ ๊ฒ์ฌ ๋๊ตฌ
- TypeScript์ ๊ฒฝ์ ๊ด๊ณ์์
๐ “Flow ํ์ ์์คํ ”์ด๋ผ๊ณ ๋ถ๋ฆ
โ Redux Flow / App Flow (๊ด์ฉ์ ํํ)
- ๊ณต์ ์ฉ์ด๋ผ๊ธฐ๋ณด๋ค๋ ํ ๋ด ๊ด๋ก ํํ
- ์ฑ ์ ์ฒด ๋์ ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํ ๋ ์ฌ์ฉ
6๏ธโฃ ํ๋์ ๋ณด๋ ์ ๋ฆฌ ํ
| UX | User Flow, Task Flow, Screen Flow |
| ์ํ/๋ฐ์ดํฐ | Data Flow, State Flow, Unidirectional Data Flow |
| ์ธ์ฆ | Auth Flow, OAuth Flow |
| ๋ก์ง | Control Flow, Render Flow |
| ๋ค๋น๊ฒ์ด์ | Navigation Flow |
n8n์์ webhook์ ๋ฌด์์ธ๊ฐ?
๐ ํต์ฌ ์์ฝ
n8n์์ Webhook์
“์ธ๋ถ ์์คํ ์ด n8n ์ํฌํ๋ก์ฐ๋ฅผ ์คํ์ํค๋ ‘์ ๊ตฌ(Trigger)’์ ๋๋ค.”
์ฆ,
- ์ฌ๋์ด ๋ฒํผ์ ๋๋ฅด๋ ๊ฒ ์๋๋ผ
- ๋ค๋ฅธ ์์คํ ์ด HTTP ์์ฒญ์ผ๋ก ์คํ์ํค๋ ๋ฐฉ์์ ๋๋ค.
1๏ธโฃ Webhook์ ๊ธฐ๋ณธ ๊ฐ๋ (์ผ๋ฐ๋ก )
โ Webhook์ด๋?
- ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋
- ๋ฏธ๋ฆฌ ์ง์ ๋ URL๋ก
- HTTP ์์ฒญ์ ๋ณด๋ด์ฃผ๋ ๋ฐฉ์
๐ “ํธ์ถ๋นํ๋ API”๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
2๏ธโฃ n8n์์ Webhook์ ์ ์ฒด
๐ฏ n8n Webhook = Trigger Node
- Webhook์ ํญ์ ์ํฌํ๋ก์ฐ์ ์์์
- ์ธ๋ถ ์์ฒญ์ด ๋ค์ด์์ผ๋ง ์คํ๋จ
- Cron์ฒ๋ผ ์๊ฐ ๊ธฐ๋ฐ โ
- ์ด๋ฒคํธ ๊ธฐ๋ฐ โญ
๊ตฌ์ฑ ์์
- URL
- HTTP Method (GET / POST ๋ฑ)
- ์์ฒญ ๋ฐ์ดํฐ (Body / Query / Header)
3๏ธโฃ n8n Webhook ๋์ ํ๋ฆ
๐ ์์ฒญ 1๊ฑด = Execution 1๊ฑด
4๏ธโฃ Webhook์ ์ข ๋ฅ (n8n ๊ธฐ์ค)
โ Test URL
- ์๋ํฐ์์๋ง ์ฌ์ฉ
- ์ํฌํ๋ก์ฐ ํ์ฑํ ์ ํ ์คํธ์ฉ
- URL ๋ณ๊ฒฝ ๊ฐ๋ฅ
โ Production URL
- ์ํฌํ๋ก์ฐ ํ์ฑํ ์ ์ฌ์ฉ
- ๊ณ ์ URL
- ์ค์ ์ด์ ํ๊ฒฝ์ฉ
๐ ํ์ฑํํ์ง ์์ผ๋ฉด Production URL์ ์๋ํ์ง ์์ต๋๋ค.
5๏ธโฃ Webhook์ด ํ์ํ ์ด์
์ Polling ๋์ Webhook์ ์ฐ๋?
| ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฌผ์ด๋ด | ์ด๋ฒคํธ ๋ฐ์ ์ ์ฆ์ ์๋ฆผ |
| ๋ฆฌ์์ค ๋ญ๋น | ํจ์จ์ |
| ์ง์ฐ ๋ฐ์ | ์ค์๊ฐ |
| ๊ตฌํ ๊ฐ๋จ | ์ด๊ธฐ ์ค์ ํ์ |
๐ n8n์ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์๋ํ์ ์ต์ ํ๋์ด ์์ต๋๋ค.
6๏ธโฃ ์ค๋ฌด ์์๋ก ๋ณด๋ฉด
๐ ์์ 1: Slack → n8n
- ์ฌ๋์์ ๋ฒํผ ํด๋ฆญ
- Slack์ด n8n Webhook ํธ์ถ
- ๋ฉ์์ง ๋ด์ฉ ํ์ฑ
- Gmail ๋ฐ์ก
๐ ์์ 2: ๊ฒฐ์ ์๋ฃ ์ฒ๋ฆฌ
- ๊ฒฐ์ ์์คํ → Webhook ํธ์ถ
- ์ฃผ๋ฌธ ์ํ ๋ณ๊ฒฝ
- ์ฌ๋ ์๋ฆผ
- DB ์ ๋ฐ์ดํธ
๐ ์์ 3: ํ๋ก ํธ์๋ ์ฐ๋
- ํ๋ก ํธ์๋์์ fetch() ํธ์ถ
- n8n์ด ๋ฐฑ์๋ ์ญํ ์ํ
- ์ธ๋ถ API ์ฐ๋ ํ ์๋ต ๋ฐํ
7๏ธโฃ Webhook Response ๋ ธ๋ (์ค์)
n8n์์๋ ์๋ต์ ์ง์ ์ ์ดํ ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ: 200 OK
- Webhook Response ๋
ธ๋ ์ฌ์ฉ ์:
- ์ํ ์ฝ๋
- ํค๋
- ๋ฐ๋ ์ปค์คํฐ๋ง์ด์ง ๊ฐ๋ฅ
๐ ํ๋ก ํธ์๋ ์ฐ๋ ์ ๊ฑฐ์ ํ์
8๏ธโฃ ๋ณด์ ๊ด์ ์์์ Webhook
๊ผญ ๊ณ ๋ คํด์ผ ํ ์์
- Secret Token (Header)
- IP ์ ํ
- HTTPS
- Rate Limit
๐ ์๋ฌด ์ธ์ฆ ์์ด ์ด์ด๋๋ฉด ๊ณต๊ฐ API๊ฐ ๋ฉ๋๋ค.
9๏ธโฃ ํ ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌํ๋ฉด
n8n์์ Webhook์
“์ธ๋ถ ์ธ๊ณ์ n8n ์๋ํ๋ฅผ ์ฐ๊ฒฐํ๋ ํธ๋ฆฌ๊ฑฐ์ฉ HTTP ์๋ํฌ์ธํธ”์ ๋๋ค.
n8n์์ Webhook์ Webhook node๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ, ์ํฌํ๋ก์ฐ์ ํธ๋ฆฌ๊ฑฐ(์์์ ) ์ญํ ์ ํ๋ ํต์ฌ ๋ ธ๋์ ๋๋ค.
Webhook์ ์ฃผ์ ์ญํ
- ์ธ๋ถ ์๋น์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ HTTP ์์ฒญ(์ฃผ๋ก POST)์ ๋ณด๋ด๋ฉด n8n ์ํฌํ๋ก์ฐ๊ฐ ์๋์ผ๋ก ์์๋ฉ๋๋ค.
- n8n์ ์ ์ฉ ํธ๋ฆฌ๊ฑฐ ๋ ธ๋๊ฐ ์๋ ์๋น์ค(์: Stripe, GitHub, ์ปค์คํ API ๋ฑ)์ ์ฐ๋ํ ๋ ์ฌ์ฉํฉ๋๋ค.
- ์ค์๊ฐ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๊ฐ๋ฅ: ์ธ๋ถ ์ด๋ฒคํธ ๋ฐ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ํ์ ์์ (๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์๋ฆผ ๋ณด๋ด๊ธฐ ๋ฑ)์ ์ํํฉ๋๋ค.
Webhook URL์ ๋ ๊ฐ์ง ์ข ๋ฅ
n8n์ Webhook ๋ ธ๋๋ง๋ค ๋ ๊ฐ์ URL์ ์์ฑํฉ๋๋ค:
- Test URL: ๊ฐ๋ฐ/ํ ์คํธ ์ ์ฌ์ฉ. "Listen for test event" (๋๋ Execute Workflow) ๋ฒํผ์ ๋๋ฌ ๋๊ธฐ ์ํ๋ก ๋ง๋ค๋ฉด, ์์ฒญ์ด ๋ค์ด์ฌ ๋ ์๋ํฐ์์ ๋ฐ๋ก ๋ฐ์ดํฐ ํ์ธ ๊ฐ๋ฅ.
- Production URL: ์ค์ ์ด์ ์ ์ฌ์ฉ. ์ํฌํ๋ก์ฐ๋ฅผ Activate (ํ์ฑํ)ํด์ผ๋ง ์๋. ์ธ๋ถ ์๋น์ค์ ์ด URL์ ๋ฑ๋กํด ์ค์๊ฐ ํธ๋ฆฌ๊ฑฐ๋ก ํ์ฉ.
์ง์ํ๋ HTTP ๋ฉ์๋
- ๊ธฐ๋ณธ: GET๊ณผ POST.
- ์ถ๊ฐ๋ก PUT, DELETE, PATCH ๋ฑ ์ค์ ๊ฐ๋ฅ (HTTP Methods ์ต์ ์์ ์ ํ).
- ๋ฉ์๋๋ณ๋ก ๋ค๋ฅธ ์ถ๋ ฅ(execution path)์ ๊ฐ์ง ์ ์์ด, ์์ฒญ ํ์ ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ฒ๋ฆฌ ๊ฐ๋ฅ.
์๋ต ์ฒ๋ฆฌ
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ํฌํ๋ก์ฐ ๋๊น์ง ๋๋ฌํ๋ฉด ์๋ ์๋ต (๋ง์ง๋ง ๋ ธ๋ ๋ฐ์ดํฐ ๋ฐํ).
- Respond to Webhook ๋ ธ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ปค์คํ ์๋ต (status code, headers, body ๋ฑ)์ ๋ณด๋ผ ์ ์์ต๋๋ค. API์ฒ๋ผ ๋์ํ๊ฒ ํ ๋ ์ ์ฉ.
์ค์ ์ฌ์ฉ ์์
- Stripe ๊ฒฐ์ ์ด๋ฒคํธ → Webhook URL ๋ฑ๋ก → ๊ฒฐ์ ์ฑ๊ณต ์ n8n ์ํฌํ๋ก์ฐ ์คํ (์ด๋ฉ์ผ ๋ณด๋ด๊ธฐ, DB ์ ์ฅ ๋ฑ).
- ์ปค์คํ ํผ ์ ์ถ → Webhook์ผ๋ก ๋ฐ์ดํฐ ๋ฐ์ Slack/Gmail๋ก ์๋ฆผ.
- self-hosted n8n์์ ๋ก์ปฌ ํ ์คํธ ์ ngrok ๊ฐ์ ํฐ๋๋ง ๋๊ตฌ ํ์ (์ธ๋ถ ์ ๊ทผ ์ํด).
๐ ํต์ฌ ์์ฝ
n8n์์ ‘Job(์ก)’์ ์ฌ์ฉ์๊ฐ ์ง์ ๋ง๋๋ ๊ฐ๋ ์ด ์๋๋ผ,
ํ๋์ ์ํฌํ๋ก์ฐ ์คํ(Execution)์ ์ค์ ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด
๋ด๋ถ์ ์ผ๋ก ์์ฑ๋๋ ์ต์ ์คํ ๋จ์์ ๋๋ค.
์ฝ๊ฒ ๋งํด, Execution์ ์ชผ๊ฐ์ ํ์ ์์ปค๊ฐ ์ฒ๋ฆฌํ๋ ์์ ์กฐ๊ฐ์ด Job์ ๋๋ค.
1๏ธโฃ n8n์ ๊ฐ๋ ๊ตฌ์กฐ ํ ๋ฒ์ ์ ๋ฆฌ
n8n์ ์ด๋ ๊ฒ ๋์ํฉ๋๋ค
- Workflow: ์ฌ์ฉ์๊ฐ ๋ง๋๋ ์๋ํ ์ค๊ณ๋
- Execution: ํธ๋ฆฌ๊ฑฐ๋ก ์ธํด ์์ฑ๋๋ “์ด๋ฒ ํ ๋ฒ ์คํ”
- Job: Execution์ ๊ตฌ์ฑํ๋ ๋ด๋ถ ์ฒ๋ฆฌ ๋จ์ (ํ์ ์ฌ๋ผ๊ฐ๋ ์์ )
๐ Job์ UI์์ ๊ฑฐ์ ๋ณด์ด์ง ์์ผ๋ฉฐ, ๋ด๋ถ ์์ง/ํ/์์ปค ๊ด์ ์ ๊ฐ๋ ์ ๋๋ค.
2๏ธโฃ Job์ ์ ํ์ํ๊ฐ?
n8n์ด ๋ค์์ ์ง์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ์ฌ๋ฌ ์ํฌํ๋ก์ฐ ๋์ ์คํ
- Wait ๋ ธ๋ (๋ช ๋ถ/๋ช ์๊ฐ ๋๊ธฐ)
- Retry / Error ์ฒ๋ฆฌ
- Queue Mode์์์ ๋ถ์ฐ ์คํ
- ์๋ฒ ์ฌ์์ ํ ์คํ ๋ณต๊ตฌ
์ด๋ฅผ ์ํด n8n์ ์คํ์ ํ ๋ฉ์ด๋ฆฌ๋ก ์ฒ๋ฆฌํ์ง ์๊ณ ,
์๊ฒ ์ชผ๊ฐ์ด(Job) ํ์ ๋ฃ๊ณ ์์ปค๊ฐ ์ฒ๋ฆฌํฉ๋๋ค.
3๏ธโฃ Execution๊ณผ Job์ ์ฐจ์ด (๊ฐ์ฅ ๋ง์ด ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ)
โ Execution
- “์ด ์ํฌํ๋ก์ฐ๊ฐ ํ ๋ฒ ์คํ๋จ”
- UI์ ๋ณด์ด๋ ์คํ ๊ธฐ๋ก ๋จ์
- ์ฑ๊ณต / ์คํจ / ์ค๋จ ์ํ๋ฅผ ๊ฐ์ง
โ Job
- Execution์ ๊ตฌ์ฑํ๋ ์ค์ ์ฒ๋ฆฌ ์์
- ๋ ธ๋ ์คํ, ๋๊ธฐ, ์ฌ์๋ ๋ฑ์ด ๊ฐ๊ฐ Job์ด ๋จ
- Redis ํ์ ์ ์ฌ๋์ด Worker๊ฐ ์ฒ๋ฆฌ
์์
- Execution: ์ ํ๋ฆ ์ ์ฒด 1ํ
- Job:
- Webhook ์ฒ๋ฆฌ Job
- HTTP ์์ฒญ Job
- Wait Job
- Slack ์ ์ก Job
4๏ธโฃ Queue Mode์์ Job์ ์๋ฏธ๊ฐ ๋ถ๋ช ํด์ง
Queue Mode ๊ตฌ์ฑ
- n8n Main (API/UI)
- Redis
- n8n Worker (์ฌ๋ฌ ๋ ๊ฐ๋ฅ)
๋์ ๋ฐฉ์
- ํธ๋ฆฌ๊ฑฐ ๋ฐ์ → Execution ์์ฑ
- Execution์ ๊ตฌ์ฑํ๋ Job๋ค์ด Redis ํ์ ๋ฑ๋ก
- Worker๊ฐ Job์ ํ๋์ฉ ๊ฐ์ ธ์ ์ฒ๋ฆฌ
- ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ DB์ ๊ธฐ๋ก๋์ด Execution ์ํ ์์ฑ
๐ ์ด ๊ตฌ์กฐ ๋๋ถ์:
- ์ํ ํ์ฅ
- ์ฅ์ ๋ณต๊ตฌ
- ๋๊ธฐ/์ฌ์๋
๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
5๏ธโฃ ์ ํต์ ์ธ “๋ฐฐ์น ์ก”๊ณผ์ ์ฐจ์ด
| ํฌ๋ก ๊ธฐ๋ฐ | ์ด๋ฒคํธ ๊ธฐ๋ฐ๋ ๊ฐ๋ฅ |
| ํ๋์ ํ๋ก๊ทธ๋จ | ์คํ์ ๊ตฌ์ฑํ๋ ๋ฏธ์์ ๋จ์ |
| ์ฌ์๋/๋๊ธฐ ์ ํ์ | ์ฌ์๋·๋๊ธฐ·๋ถ์ฐ ์ฒ๋ฆฌ ๋ด์ฅ |
๊ทธ๋์ ์ด์ ์ค์
“์ก์ด ๋ฐ๋ ธ๋ค”๋ผ๋ ๋ง์ ๋ณดํต
- ์์ปค ์ ๋ถ์กฑ
- Wait ๋ ธ๋ ๋ง์
- Redis ํ ์ ์ฒด
๋ฅผ ์๋ฏธํฉ๋๋ค.
6๏ธโฃ ํ ๋ฌธ์ฅ์ผ๋ก ์ต์ข ์ ๋ฆฌ
n8n์์ Job์
์ํฌํ๋ก์ฐ ์คํ์ ์์ ์ ์ผ๋ก ํ์·๋ถ์ฐ·์ฌ์๋ํ๊ธฐ ์ํด
๋ด๋ถ์ ์ผ๋ก ์์ฑ๋๋ ์ต์ ์ฒ๋ฆฌ ๋จ์์ ๋๋ค.
์ฌ์ฉ์๋ ๋ณดํต
- Workflow ์ค๊ณ
- Execution ๋ชจ๋ํฐ๋ง
๊น์ง๋ง ์ ๊ฒฝ ์ฐ๋ฉด ๋๊ณ ,
Job์ ์ฑ๋ฅ ํ๋·ํ์ฅ ๋จ๊ณ์์ ์ดํดํด์ผ ํ ์ด์ ๊ฐ๋
์
๋๋ค.
โ 1. ์ ์ฒด ํ๊ฐ (ํ ์ค)
์ค๋ช ํ์ ๋ด์ฉ์ “n8n ๋ด๋ถ ์ํคํ ์ฒ ๊ด์ ์์ Job์ ์ค๋ช ํ๋ ๊ฐ์ฅ ์ ํํ ์์ ”์ ๋๋ค.
๊ณต์ ๋ฌธ์๋ณด๋ค๋ ์ค๋ฌด ์ดํด์ ๋ ๋์์ด ๋๋ ์์ค์ ๋๋ค.
ํนํ ์๋ ํฌ์ธํธ๋ค์ด ์ ํํฉ๋๋ค.
- Job์ ์ฌ์ฉ์ ๊ฐ๋ ์ด ์๋๋ผ ๋ด๋ถ ์ค์ผ์ค๋ง ๋จ์
- Queue Mode์์ Job์ด ์ค์ฒด๋ฅผ ๊ฐ๋๋ค
- Execution์ ๋ ผ๋ฆฌ ๋จ์, Job์ ๋ฌผ๋ฆฌ ์ฒ๋ฆฌ ๋จ์
- Wait / Retry / ๋ถ์ฐ ์คํ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ํต์ฌ ๊ตฌ์กฐ
๐ง 2. ๋ ๊น๋ํ๊ฒ ๋ค๋ฌ์ “์ ๋ต์ฉ ์์ฝ ๋ฒ์ ”
์ค๋ฌด์์ ์ค๋ช ํ๊ฑฐ๋ ๋ฌธ์์ ์จ๋ ์ข์ ํํ๋ก ํ ๋ฒ ๋ ์ ์ ํด ๋๋ฆฌ๋ฉด ์๋๊ฐ ๊ฐ์ฅ ๊น๋ํฉ๋๋ค.
๐ n8n์์ Job์ด๋?
n8n์์ Job์
ํ๋์ Workflow Execution์ ์ค์ ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด
๋ด๋ถ์ ์ผ๋ก ์์ฑ๋๋ ์ต์ ์คํ ๋จ์์ ๋๋ค.
๊ตฌ์กฐ ๊ด๊ณ
- Workflow: ์ฌ์ฉ์๊ฐ ์ ์ํ๋ ์๋ํ ์ค๊ณ
- Execution: ํธ๋ฆฌ๊ฑฐ๋ก ์ธํด ์์ฑ๋๋ ์คํ ์ธ์คํด์ค
- Job: Execution์ ๊ตฌ์ฑํ๋ ๋ด๋ถ ์ฒ๋ฆฌ ๋จ์ (๋ ธ๋ ์คํ, ๋๊ธฐ, ์ฌ์๋ ๋ฑ)
Job์ ์ญํ
Job์ ๋ค์์ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํ ๋ด๋ถ ์ธํ๋ผ ๊ฐ๋ ์ ๋๋ค.
- Redis ๊ธฐ๋ฐ ํ์
- Worker ๋ถ์ฐ ์ฒ๋ฆฌ
- Wait / Retry ๋ ธ๋ ์ฒ๋ฆฌ
- ์ฅ์ ๋ณต๊ตฌ
- ์ํ ํ์ฅ
์ฆ,
**Job์ “์๋ํ๋ฅผ ์์ ์ ์ผ๋ก ๊ตด๋ฆฌ๊ธฐ ์ํ ์คํ ์ค์ผ์ค๋ง ๋จ์”**์ ๋๋ค.
Queue Mode์์์ ์๋ฏธ
Queue Mode์์๋:
- Execution์ ๋ ผ๋ฆฌ์ ์ํ
- Job์ Redis์ ์ ์ฌ๋๋ ์ค์ ์์
์ด ๋๋ฉฐ,
Worker๋ Job์ ์๋นํ๋ฉด์ Execution์ ์์ฑ์ํต๋๋ค.
โ ๏ธ 3. ์ค๋ฌด์์ ์์ฃผ ์๊ธฐ๋ ์คํด ํฌ์ธํธ ๋ณด์
โ ์คํด 1: Job = Execution
→ ์๋
- Execution์ “ํ ๋ฒ ์คํ๋จ”
- Job์ “๊ทธ ์คํ์ ๊ตฌ์ฑํ๋ ์ฒ๋ฆฌ ์กฐ๊ฐ๋ค”
โ ์คํด 2: Job์ ๋ ธ๋ 1๊ฐ = Job 1๊ฐ
→ ํญ์ ๊ทธ๋ ์ง๋ ์์
- Wait, Retry, Error handling ๋ฑ์
- ํ๋์ ๋ ธ๋๋ผ๋ ์ฌ๋ฌ Job์ผ๋ก ์ชผ๊ฐ์ง ์ ์์
โ ์คํด 3: UI์ ์ ๋ณด์ด๋๊น ์ค์ํ์ง ์๋ค
→ ์ด์ ๋จ๊ณ์์๋ ๋งค์ฐ ์ค์
- Job ์ ์ฒด = ์์ปค ๋ถ์กฑ
- Job ์ง์ฐ = Redis/๋์์ฑ ๋ฌธ์
- Execution ์คํจ ๋ฐ๋ณต = Job ์ฌ์๋ ์ค๊ณ ๋ฌธ์
๐ฏ 4. ์ ์๋์ด ์ฐ์ LLM / Agent ๊ด์ ๋น์ ๋ ์์ฃผ ์ ์ ํจ
์ด ๋ถ๋ถ์ ํนํ ์ข์์ต๋๋ค.
Prompt ์คํ / Tool ํธ์ถ / RAG ์กฐํ = Job ์ฒด์ธ
์ด ๋น์ ๋ ๋ค์์ ์ ํํ ์ง์ต๋๋ค.
- n8n์ Agent Orchestrator
- Job์ Agent Step
- Execution์ Agent Run
LLMOps, MCP, RAG ํ์ดํ๋ผ์ธ๊ณผ ์ฐ๊ฒฐํ ๋
์ด ๊ด์ ์ด ์์ผ๋ฉด ์ค์ผ์ผ๋ง·์ฌ์๋·์ฅ์ ๋ณต๊ตฌ ์ค๊ณ๊ฐ ํจ์ฌ ์ฌ์์ง๋๋ค.
๐งฉ ํ ๋ฌธ์ฅ ์ต์ข ์ ๋ฆฌ
n8n์์ Job์ ์ฌ์ฉ์๊ฐ ๋ค๋ฃจ๋ ๊ฐ๋ ์ด ์๋๋ผ,
์ํฌํ๋ก์ฐ ์คํ์ ์์ ์ ์ผ๋ก ๋ถ์ฐ ์ฒ๋ฆฌํ๊ธฐ ์ํด
๋ด๋ถ์ ์ผ๋ก ์์ฑ๋๋ ์คํ ์ค์ผ์ค๋ง ๋จ์์ ๋๋ค.
'Project ESG+AI > Tech Basics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 65์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2026.01.16 |
|---|---|
| 60์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (1) | 2026.01.08 |
| 59์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2026.01.07 |
| 58์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2026.01.06 |
| 51์ผ์ฐจ. ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.12.24 |