Skip to main content

GitHub ์•ฑ ๋งŒ๋“ค๊ธฐ ์ •๋ณด

GitHub Apps์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•˜๊ณ  GitHub์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ํ†ตํ•ฉ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GitHub Apps ์ •๋ณด

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

GitHub Apps์˜ ์ผ๋ฐ˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

OAuth apps๊ณผ GitHub Apps์€ OAuth 2.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OAuth apps๊ณผ ๋‹ฌ๋ฆฌ GitHub Apps์€ ์‚ฌ์šฉ์ž์™€ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

GitHub Apps๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ, ์กฐ์ง ๋ฐ ๊ฐœ์ธ ๊ณ„์ •์— ์ง์ ‘ ์„ค์น˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  ํŠน์ • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ธฐ๋ณธ ์ œ๊ณต ์›นํ›„ํฌ์™€ ๋ฒ”์œ„๊ฐ€ ์ข์€ ํŠน์ • ๊ถŒํ•œ์ด ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

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

๊ธฐ๋ณธ์ ์œผ๋กœ ์กฐ์ง์˜ ์†Œ์œ ์ž๋งŒ ์กฐ์ง์—์„œ GitHub ์•ฑ์˜ ์„ค์ •์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ์กฐ์ง์—์„œ ์†Œ์œ ํ•œ GitHub ์•ฑ์˜ ๊ฐœ๋ฐœ์ž ์„ค์ •์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ์†Œ์œ ์ž๊ฐ€ GitHub ์•ฑ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub ์•ฑ ๊ด€๋ฆฌ์ž๋Š” ์ œ3์ž ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์กฐ์ง์—์„œ GitHub ์•ฑ ๊ด€๋ฆฌ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์กฐ์ง์˜ ์—ญํ• ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

GitHub App ๋นŒ๋“œํ•˜๊ธฐ

GitHub App์„ ๋นŒ๋“œํ•˜๋ ค๋ฉด ๋จผ์ € GitHub App์„ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์•ฑ ๋“ฑ๋ก์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๊ทธ๋Ÿฐ ๋‹ค์Œ GitHub App์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. GitHub App ๋“ฑ๋ก์˜ ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•˜์—ฌ GitHub์˜ API์— ๋Œ€ํ•œ ์ธ์ฆ๋œ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub App์˜ ์ฝ”๋“œ ์ž‘์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์•ฑ์˜ ์ฝ”๋“œ ์ž‘์„ฑ ์ •๋ณด ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”. ์ธ์ฆ๋œ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์•ฑ์„ ์‚ฌ์šฉํ•œ ์ธ์ฆ ์ •๋ณด ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

GitHub App์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์œผ๋ฉด ์•ฑ์ด ์–ด๋”˜๊ฐ€์—์„œ ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์ด ์›น ์‚ฌ์ดํŠธ ๋˜๋Š” ์›น์•ฑ์ธ ๊ฒฝ์šฐ Azure App Service์™€ ๊ฐ™์€ ์„œ๋ฒ„์—์„œ ์•ฑ์„ ํ˜ธ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์ด ํด๋ผ์ด์–ธํŠธ ์ชฝ ์•ฑ์ธ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์˜ ๋””๋ฐ”์ด์Šค์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GitHub App์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ, ์กฐ์ง ๋˜๋Š” ๊ฐœ์ธ ๊ณ„์ •์— ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ž์‹ ๋งŒ์˜ GitHub ์•ฑ ์„ค์น˜ ๋ฐ GitHub ์•ฑ ๊ณต์œ ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋นŒ๋“œํ•  GitHub App์˜ ์œ ํ˜• ์ดํ•ด

GitHub App์„ ๋””์ž์ธํ•˜๋Š” ๋ฐ์—๋Š” ์•ฑ์—์„œ ์‚ฌ์šฉํ•  ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์ž‘๋™ํ•˜๋Š” GitHub Apps

์•ฑ์ด ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ์ธ์ฆ์— ์‚ฌ์šฉ์ž ์•ก์„ธ์Šค ํ† ํฐ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์œ ํ˜•์˜ ์š”์ฒญ์€ "์‚ฌ์šฉ์ž-์„œ๋ฒ„"๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ์ด๋Š” ์•ฑ์— ๋ถ€์—ฌ๋œ ๊ถŒํ•œ๊ณผ ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์— ๋”ฐ๋ผ ์•ฑ์ด ์ œํ•œ๋œ๋‹ค๋Š” ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ๋จผ์ € ์•ฑ์— ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ ์•ฑ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ GitHub ์•ฑ์œผ๋กœ ์ธ์ฆ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์•ฑ์ด ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์ž‘๋™ํ•˜๋Š” GitHub App์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ž๋™ํ™”์˜ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์—์ฝ”์‹œ์Šคํ…œ์˜ ID ๊ณต๊ธ‰์ž๋กœ GitHub๋ฅผ ์‚ฌ์šฉํ•˜๋Š” GitHub App์ž…๋‹ˆ๋‹ค.
  • GitHub ์‚ฌ์šฉ์ž์—๊ฒŒ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” GitHub์— ์„œ๋น„์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” GitHub App์ž…๋‹ˆ๋‹ค. GitHub Marketplace๋ฅผ ํ†ตํ•ด ๋˜๋Š” ์•ฑ์„ ๊ณต๊ฐœํ•˜์—ฌ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์™€ ์•ฑ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ๋Œ€์‹  ์ž‘๋™ํ•˜๋Š” GitHub Apps

์•ฑ์ด ์‚ฌ์šฉ์ž ๋Œ€์‹ ์ด ์•„๋‹Œ ์ž์ฒด์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ์ธ์ฆ์— ์„ค์น˜ ์•ก์„ธ์Šค ํ† ํฐ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์œ ํ˜•์˜ ์š”์ฒญ์€ "์„œ๋ฒ„ ๊ฐ„"์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ์•ฑ์— ๋ถ€์—ฌ๋œ ๊ถŒํ•œ์— ๋”ฐ๋ผ ์•ฑ์ด ์ œํ•œ๋œ๋‹ค๋Š” ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์•ฑ ์„ค์น˜๋กœ ์ธ์ฆ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์•ฑ์ด ์ž์ฒด์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” GitHub App์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ž๋™ํ™”์˜ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํŠน์ • ์กฐ๊ฑด ์„ธํŠธ๊ฐ€ ์ง€์ •๋œ ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•˜๋Š” ์›นํ›„ํฌ๋ฅผ ์‚ฌ์šฉํ•œ GitHub App์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŠน์ • ์ •์ฑ…์— ๋”ฐ๋ผ ์š”์ฒญ์„ ์Šน์ธํ•˜๋Š” fine-grained personal access token์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๊ฒ€ํ† ํ•˜๊ธฐ ์œ„ํ•ด REST API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ž๋™ํ™”๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ธฐ์—ฌ์ž์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” GitHub App์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•ฑ์€ ๊ธฐ์—ฌ์ž ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ฃผ์„์„ ๋งŒ๋“  ํ›„ ์œ ์šฉํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ CI/CD ๋„๊ตฌ์— ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ •๋ณด๋ฅผ ๋Œ์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋ช…์ด ์งง์€ ํ† ํฐ์„ ์ƒ์„ฑํ•˜๋Š” GitHub App์ž…๋‹ˆ๋‹ค.

์›นํ›„ํฌ์— ์‘๋‹ตํ•˜๋Š” GitHub Apps

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

ํ˜„์žฌ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ์— ์„ค์น˜๋œ ์•ฑ์€ ์›นํ›„ํฌ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์›นํ›„ํฌ๋ฅผ ๋ฐ›์œผ๋ ค๋ฉด ์กฐ์ง์— ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” GitHub Apps

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