Skip to main content

GitHub ์•ฑ์— ์›นํ›„ํฌ ์‚ฌ์šฉ

GitHub App์ด(๊ฐ€) ์›นํ›„ํฌ ์ด๋ฒคํŠธ์— ๊ตฌ๋…ํ•˜์—ฌ ํŠน์ • ์ž‘์—…์ด ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›นํ›„ํฌ ๋ฐ GitHub Apps

์ •๋ณด

์›นํ›„ํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ปค๋ฐ‹์„ ํ‘ธ์‹œํ•˜๊ฑฐ๋‚˜ ์•ฑ์ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์„ ์—ฌ๋Š” ๊ฒฝ์šฐ์™€ ๊ฐ™์ด GitHub์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ GitHub App์—์„œ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›นํ›„ํฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์›นํ›„ํฌ ์ •๋ณด์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”. GitHub App์—์„œ ์›นํ›„ํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ ์ฃผ๋Š” ์ž์Šต์„œ๋Š” ์›นํ›„ํฌ ์ด๋ฒคํŠธ์— ์‘๋‹ตํ•˜๋Š” GitHub ์•ฑ ๋นŒ๋“œ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

GitHub์—์„œ ํŠน์ • ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์›นํ›„ํฌ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์ž๋™์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก GitHub App์„(๋ฅผ) ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์œ ํ˜•์˜ ์›นํ›„ํฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์›นํ›„ํฌ ์ด๋ฒคํŠธ ๋ฐ ํŽ˜์ด๋กœ๋“œ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

GitHub App์—์„œ ์›นํ›„ํฌ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋ ค๋ฉด GitHub App ๋“ฑ๋ก์— ๋Œ€ํ•ด ์›นํ›„ํฌ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์›นํ›„ํฌ URL์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ GitHub์€(๋Š”) ์›นํ›„ํฌ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

GitHub App์ด(๊ฐ€) ์›นํ›„ํฌ์— ์‘๋‹ตํ•  ํ•„์š”๊ฐ€ ์—†๊ฑฐ๋‚˜ ์ธ์ฆ์—๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ GitHub App ๋“ฑ๋ก์— ๋Œ€ํ•œ ์›นํ›„ํฌ ํ•จ์ˆ˜๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›นํ›„ํฌ URL์„ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

GitHub App ๋“ฑ๋ก์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์•ฑ ๋“ฑ๋ก ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”. GitHub App ๋“ฑ๋ก์ด ๊ตฌ๋…ํ•˜๋Š” ์›นํ›„ํฌ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์•ฑ ๋“ฑ๋ก ์ˆ˜์ •์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์›นํ›„ํฌ URL ์„ ํƒ

GitHub App ๋“ฑ๋ก์— ๋Œ€ํ•œ ์›นํ›„ํฌ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒฝ์šฐ ์›นํ›„ํฌ URL์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์›นํ›„ํฌ URL์€ GitHub App์— ์ „์†ก๋œ ์›นํ›„ํฌ ์ด๋ฒคํŠธ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ์›น ์„œ๋ฒ„์˜ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์„œ๋ฒ„๋Š” ํŽ˜์ด๋กœ๋“œ์˜ ๋‚ด์šฉ์— ๋”ฐ๋ผ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub App์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์›นํ›„ํฌ ํŠธ๋ž˜ํ”ฝ ๋ณผ๋ฅจ์— ์ ํ•ฉํ•œ ์›น ์„œ๋ฒ„๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์›นํ›„ํฌ URL ์„ ํƒ

์•ฑ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๋Š” ๋™์•ˆ Smee์™€ ๊ฐ™์€ ์›นํ›„ํฌ ํŽ˜์ด๋กœ๋“œ ์ œ๊ณต ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›นํ›„ํฌ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์บก์ฒ˜ํ•˜๊ณ  ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Smee ์ฑ„๋„์€ ์ธ์ฆ๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์•ˆ์ „ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— Smee๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ปดํ“จํ„ฐ๋ฅผ ์ธํ„ฐ๋„ท์— ๋…ธ์ถœํ•˜๋Š” ngrok, localtunnel ๋˜๋Š” Hookdeck Console๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Smee๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›นํ›„ํฌ URL ๋งŒ๋“ค๊ธฐ

Smee๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GitHub์ด(๊ฐ€) ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ธํ„ฐ๋„ท์— ๋…ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์›นํ›„ํฌ ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ ํ•œ ์ž‘์—…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Smee๋Š” "์›นํ›„ํฌ ํ”„๋ก์‹œ URL"์ด๋ผ๋Š” ์ด ๊ณ ์œ ํ•œ ๋„๋ฉ”์ธ์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. Smee์˜ ์›นํ›„ํฌ ํ”„๋ก์‹œ URL์„ GitHub App์˜ ์›นํ›„ํฌ URL๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. Smee๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ์œ ํ•œ ๋„๋ฉ”์ธ์„ ๋งŒ๋“ค๋ ค๋ฉด https://smee.io๋กœ ์ด๋™ํ•˜์—ฌ ์ƒˆ ์ฑ„๋„ ์‹œ์ž‘์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. Smee ์ฑ„๋„ ํŽ˜์ด์ง€์—์„œ "CLI ์‚ฌ์šฉ"์˜ ์ง€์นจ์— ๋”ฐ๋ผ Smee ํด๋ผ์ด์–ธํŠธ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. Smee ์›นํ›„ํฌ URL์„ GitHub App์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด GitHub App ๋“ฑ๋ก ํŽ˜์ด์ง€์˜ "์›นํ›„ํฌ URL" ํ•„๋“œ์— ๊ณ ์œ ํ•œ Smee ๋„๋ฉ”์ธ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์•ฑ ๋“ฑ๋ก ๋ฐ GitHub ์•ฑ ๋“ฑ๋ก ์ˆ˜์ •์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ ์›นํ›„ํฌ URL ์„ ํƒ

๋‚ฎ์€ ๋ณผ๋ฅจ์˜ ์›นํ›„ํฌ ํŠธ๋ž˜ํ”ฝ์„ ์ˆ˜์‹ ํ•˜๋Š” ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋™์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ํ˜ธ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›นํ›„ํฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋ฒ„ ์ชฝ ์ฝ”๋“œ๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ , JSON ํŽ˜์ด๋กœ๋“œ๋ฅผ ์—ญ์ง๋ ฌํ™”ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ GitHub API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋“ฑ์˜ ์ˆ˜ํ–‰ํ•  ์ž‘์—…์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๋Œ€๊ทœ๋ชจ ์•ฑ์— ๋Œ€ํ•ด ๋” ๋งŽ์€ ์–‘์˜ ์›นํ›„ํฌ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์ „์šฉ ์„œ๋ฒ„์—์„œ ๋น„๋™๊ธฐ ์›นํ›„ํฌ ์ฒ˜๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์›นํ›„ํฌ ์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ํ์— ํ‘ธ์‹œํ•˜๊ณ  ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ ํ›„์† ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Azure Functions, AWS Lambda ๋˜๋Š” Hookdeck๊ณผ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๋Ÿ‰์˜ ์›นํ›„ํฌ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์•ฑ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›นํ›„ํฌ ๋น„๋ฐ€๋กœ ์›นํ›„ํฌ ๋ณดํ˜ธ

ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ˆ˜์‹ ํ•˜๋„๋ก ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๋‚˜๋ฉด, ์„œ๋ฒ„์— ์ „์†ก๋œ ๋ชจ๋“  ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ˆ˜์‹  ๋Œ€๊ธฐํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ, ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ GitHub์—์„œ ์‹œ์ž‘๋œ ์š”์ฒญ์œผ๋กœ๋งŒ ์ œํ•œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์˜ ์›นํ›„ํฌ ๋น„๋ฐ€์„ ๋งŒ๋“ค์–ด ์ด๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GitHub ์•ฑ์˜ ์›นํ›„ํฌ ๋น„๋ฐ€์„ ๋งŒ๋“ค๋ ค๋ฉด GitHub App ๋“ฑ๋ก ํŽ˜์ด์ง€์˜ "์›นํ›„ํฌ ๋น„๋ฐ€" ์•„๋ž˜์— ๋น„๋ฐ€ ํ† ํฐ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์—”ํŠธ๋กœํ”ผ๊ฐ€ ๋†’์€ ์ž„์˜์˜ ํ…์ŠคํŠธ ๋ฌธ์ž์—ด์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์•ฑ ๋“ฑ๋ก ๋ฐ GitHub ์•ฑ ๋“ฑ๋ก ์ˆ˜์ •์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์•ฑ์˜ ์›นํ›„ํฌ ๋น„๋ฐ€์„ ๋งŒ๋“  ํ›„์—๋Š” ์›นํ›„ํฌ ๋น„๋ฐ€ ํ† ํฐ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•˜๊ณ  ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋„๋ก ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์›นํ›„ํฌ ์ œ๊ณต ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•˜๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์›นํ›„ํฌ ์ด๋ฒคํŠธ ๊ตฌ๋…

GitHub App์„(๋ฅผ) ๊ตฌ๋…ํ•˜์—ฌ ํŠน์ • ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์›นํ›„ํฌ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub App ๋“ฑ๋ก์— ๋Œ€ํ•ด ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ • ์›นํ›„ํฌ ์ด๋ฒคํŠธ๋Š” ์•ฑ์— ๋Œ€ํ•ด ์„ ํƒํ•œ ์‚ฌ์šฉ ๊ถŒํ•œ ์œ ํ˜•์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋จผ์ € ์•ฑ์— ๋ถ€์—ฌํ•  ์‚ฌ์šฉ ๊ถŒํ•œ์„ ์„ ํƒํ•œ ๋‹ค์Œ ํ•ด๋‹น ์‚ฌ์šฉ ๊ถŒํ•œ ์ง‘ํ•ฉ๊ณผ ๊ด€๋ จ๋œ ์›นํ›„ํฌ ์ด๋ฒคํŠธ์— ์•ฑ์„ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์•ฑ์˜ ๊ถŒํ•œ ์„ ํƒ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ƒˆ ์ด์Šˆ๊ฐ€ ์—ด๋ฆด ๋•Œ๋งˆ๋‹ค ์•ฑ์ด ์›นํ›„ํฌ ์ด๋ฒคํŠธ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ˆ˜์‹ ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ๋จผ์ € "๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ถŒํ•œ"์˜ "์ด์Šˆ"์— ์•ก์„ธ์Šคํ•  ๊ถŒํ•œ์„ ์•ฑ์— ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ, "์ด๋ฒคํŠธ ๊ตฌ๋…"์—์„œ "์ด์Šˆ"๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ์›นํ›„ํฌ ์ด๋ฒคํŠธ์— ํ•„์š”ํ•œ ๊ถŒํ•œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์›นํ›„ํฌ ์ด๋ฒคํŠธ ๋ฐ ํŽ˜์ด๋กœ๋“œ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.