Skip to content

๐Ÿ”” [Lv.1] ๋งํฌ ์ €์žฅ ์‹œ ์Šฌ๋ž™ & ๋ฉ”์ผ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ โ€‹

IMPORTANT

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ์šฐ๋ฆฌ ์„œ๋น„์Šค์— ๋งํฌ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ์ˆœ๊ฐ„์„ ๊ฐ์ง€ํ•ด์„œ, ์ง€์ •ํ•œ ์Šฌ๋ž™ ์ฑ„๋„๊ณผ ์ด๋ฉ”์ผ๋กœ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์ „์†กํ•˜๋Š” ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ตœ๋Œ€ํ•œ n8n์˜ ๊ธฐ๋ณธ ๋…ธ๋“œ๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ด๋“œ๋ฆฌ๋ฉฐ, ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ปค์Šคํ…€ ์Šคํฌ๋ฆฝํŠธ๋‚˜ ์ถ”๊ฐ€ ๋…ธ๋“œ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ๋žต๋œ ์ •๋ณด๋„ ์žˆ์œผ๋ฉฐ, n8n์˜ ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž ๋ถ„๋“ค์€ ์ถฉ๋ถ„ํ•œ ํ•™์Šต์ด๋‚˜ ํ…Œ์ŠคํŠธ ํ›„ ์ ์šฉํ•˜์‹œ๊ธธ ๊ถŒ์žฅ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋ณธ ๊ฐ€์ด๋“œ๋Š” n8n ๋ฒ„์ „ 1.115.3๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


1. n8n ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์„ฑ โ€‹

image
  • Webhook Node (ํŠธ๋ฆฌ๊ฑฐ) โ†’ Slack Node (์•Œ๋ฆผ) โ†’ Gmail Node (์•Œ๋ฆผ)

2. ์ƒ์„ธ ์„ค์ • ๋‹จ๊ณ„ โ€‹

Step 1: n8n์—์„œ Webhook URL ์ƒ์„ฑ ๋ฐ ์„œ๋น„์Šค ๋“ฑ๋ก โ€‹

ex2

image
  1. n8n์—์„œ Webhook ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  HTTP Method๋ฅผ POST๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ƒ์„ฑ๋œ Production Webhook URL์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  3. [์šฐ๋ฆฌ ์„œ๋น„์Šค -> ํŒ€ ์„ค์ • -> ์›นํ›… ๊ด€๋ฆฌ] ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์—ฌ ๋ณต์‚ฌํ•œ URL์„ ๋ถ™์—ฌ๋„ฃ๊ณ  ํ™œ์„ฑํ™” ์ƒํƒœ๋ฅผ 'ON' ์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. (์ด ์„ค์ •์„ ํ•ด์•ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.)

Step 2: ์Šฌ๋ž™ ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€ ์„ค์ • โ€‹

image

์ด์ œ ์šฐ๋ฆฌ๋Š” ์Šฌ๋ž™ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ, ์ƒˆ๋กœ์šด ๋งํฌ๊ฐ€ ์ €์žฅ๋  ๋•Œ๋งˆ๋‹ค ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋„๋ก ์„ค์ •ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. Step 1์—์„œ ์ƒ์„ฑํ•œ Webhook ๋…ธ๋“œ์— ์ด์–ด์„œ Slack ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  2. ์Šฌ๋ž™ ๋…ธ๋“œ์—์„œ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•œ ์Šฌ๋ž™ ํฌ๋ ˆ๋ด์…œ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  3. Resource๋Š” Message๋กœ, Operation์€ Send๋กœ, Send Message To๋Š” Channel๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  4. Channel ํ•„๋“œ๋Š” By ID๋กœ ์„ค์ •ํ•˜๊ณ , ์•Œ๋ฆผ์„ ๋ฐ›์„ ์Šฌ๋ž™ ์ฑ„๋„์˜ ID๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    • ์ฑ„๋„ ID๋Š” ์Šฌ๋ž™์—์„œ ํ•ด๋‹น ์ฑ„๋„ ์šฐํด๋ฆญ -> ์ฑ„๋„ ์„ธ๋ถ€ ์ •๋ณด ๋ณด๊ธฐ -> ํ•˜๋‹จ ์ฑ„๋„ ID์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์˜ˆ: C01234567AB)
    • ์ฐธ๊ณ : ํผ๋ธ”๋ฆญ ์ฑ„๋„์€ #general๊ณผ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ๋„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ”„๋ผ์ด๋น— ์ฑ„๋„์€ ๋ฐ˜๋“œ์‹œ ID๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  5. Message Text ํ•„๋“œ์— ์•„๋ž˜์˜ ๊ตฌ์กฐํ™”๋œ ํ…์ŠคํŠธ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋„ฃ์œผ์„ธ์š”.

  6. ์•„๋ž˜๋Š” ์˜ˆ์‹œ ๋ฉ”์‹œ์ง€ ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค:

    text
    ๐Ÿš€ *์ƒˆ๋กœ์šด ๋งํฌ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค!*
    
    ๐Ÿ“Œ *์ œ๋ชฉ*: {{ $json.body.data.title }}
    ๐Ÿ”— *URL*: {{ $json.body.data.url }}
    ๐Ÿ“‚ *์œ„์น˜*: {{ $json.body.data.teamName }} > {{ $json.body.data.folderName }}
    ๐Ÿท๏ธ *ํƒœ๊ทธ*: {{ $json.body.data.tags.join(', ') }}
    
    ๐Ÿ“ *์š”์•ฝ*:
    > {{ $json.body.data.summary }}
    
    ๐Ÿ‘ค *์ €์žฅํ•œ ์‚ฌ๋žŒ*: {{ $json.body.data.createdBy.nickname }}
  7. ์„ค์ •์„ ๋งˆ์นœ ํ›„, ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.


Step 3: ์ง€๋ฉ”์ผ(Gmail) ์•Œ๋ฆผ ์„ค์ • โ€‹

image
  1. Slack ๋…ธ๋“œ ๋‹ค์Œ์— Gmail ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ง€๋ฉ”์ผ ๋…ธ๋“œ์—์„œ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•œ ์ง€๋ฉ”์ผ ํฌ๋ ˆ๋ด์…œ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€๋ฉ”์ผ ํฌ๋ ˆ๋ด์…œ ์ƒ์„ฑ ์‹œ OAuth2 ์ธ์ฆ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์ผ๋ฐ˜ SMTP ๋ฐฉ์‹์€ ๋ณด์•ˆ ๋ฌธ์ œ๋กœ ์ธํ•ด ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)
  • ์ง€๋ฉ”์ผ ํฌ๋ ˆ๋ด์…œ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์€ ๊ฐ์ข… ๊ณต์‹ ๋ฌธ์„œ๋‚˜ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
  1. Resource๋Š” Message๋กœ, Operation์€ Send๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  2. To ํ•„๋“œ์— ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  3. Subject ํ•„๋“œ๋Š” ์›ํ•˜๋Š” ์ œ๋ชฉ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: [Lilcookie] ์‹ ๊ทœ ๋งํฌ ์ €์žฅ ์•Œ๋ฆผ

  4. Email Type์€ Text๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  5. Message ํ•„๋“œ์— ์•„๋ž˜์˜ ๊ตฌ์กฐํ™”๋œ ํ…์ŠคํŠธ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋„ฃ์œผ์„ธ์š”.

    text
    [Lilcookie] ์‹ ๊ทœ ๋งํฌ ์ €์žฅ ์•Œ๋ฆผ
    
    ์šฐ๋ฆฌ ์„œ๋น„์Šค์— ์ƒˆ๋กœ์šด ์ง€์‹์ด ์ €์žฅ๋˜์–ด ์•ˆ๋‚ด๋“œ๋ฆฝ๋‹ˆ๋‹ค.
    
    --------------------------------------------------
    ๐Ÿ“‘ ์ €์žฅ ์ •๋ณด ์ƒ์„ธ
    --------------------------------------------------
    
    โ–  ์ œ๋ชฉ: {{ $('์›นํ›…').item.json.body.data.title }}
    โ–  ๋งํฌ: {{ $('์›นํ›…').item.json.body.data.url }}
    โ–  ํŒ€/ํด๋”: {{ $('์›นํ›…').item.json.body.data.teamName }} / {{ $('์›นํ›…').item.json.body.data.folderName }}
    โ–  ํƒœ๊ทธ: {{ $('์›นํ›…').item.json.body.data.tags.join(', ') }}
    
    [์š”์•ฝ ๋‚ด์šฉ]
    {{ $('์›นํ›…').item.json.body.data.summary }}
    
    --------------------------------------------------
    ์ถ”๊ฐ€๋œ ๋งํฌ์˜ ์ƒ์„ธ ๋‚ด์šฉ์€ ์„œ๋น„์Šค์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์ €์žฅ ์‹œ๊ฐ„: {{ $('์›นํ›…').item.json.body.timestamp }}
  6. ์„ค์ •์„ ๋งˆ์นœ ํ›„, ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.


3. ํ…Œ์ŠคํŠธ ๋ฐ ํ™œ์„ฑํ™” โ€‹

  1. n8n ์ƒ๋‹จ์˜ Execute Workflow๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. ์šฐ๋ฆฌ ์„œ๋น„์Šค(์›น/์ต์Šคํ…์…˜)์—์„œ ๋งํฌ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  3. ์Šฌ๋ž™ ๋ฉ”์‹œ์ง€์™€ ์ง€๋ฉ”์ผ์ด ์œ„ ์–‘์‹๋Œ€๋กœ ์˜ˆ์˜๊ฒŒ ๋„์ฐฉํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค!

4. ๊ฒฐ๊ณผ ์˜ˆ์‹œ โ€‹

  • ์ „๋‹ฌ๋œ ์Šฌ๋ž™ ๋ฉ”์‹œ์ง€ ์˜ˆ์‹œ:
image
  • ์ „๋‹ฌ๋œ ์ง€๋ฉ”์ผ ์˜ˆ์‹œ:
image

๐Ÿ“š ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ฐธ๊ณ  โ€‹

์›นํ›…์œผ๋กœ ๋„˜์–ด์˜ค๋Š” ๋” ์ž์„ธํ•œ ํŽ˜์ด๋กœ๋“œ ์ •๋ณด๋Š” ์•„๋ž˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๐Ÿ‘‰ API Reference: ์›นํ›… ์ด๋ฒคํŠธ ํŽ˜์ด๋กœ๋“œ

๊ตฌ์„ฑ๋œ n8n ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ โ€‹

  • Exam_Notification_n8n.json
  • ์œ„ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ JSON ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•œ ํ›„, n8n์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ(import)ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์„ธ์š”.