Skip to main content

GitHub ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์‚ฌ์šฉ ๊ถŒํ•œ ์ •๋ณด

ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์‚ฌ์šฉ ๊ถŒํ•œ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์‚ฌ์šฉ ๊ถŒํ•œ์€ ์‚ฌ์šฉ์ž ๋˜๋Š” ์กฐ์ง ๋˜๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž/์กฐ์ง ๋ฒ”์œ„ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์„ธ๋ถ„ํ™”๋œ ์‚ฌ์šฉ ๊ถŒํ•œ

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

๋‹ค์Œ GitHub Packages ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” ์„ธ๋ถ„ํ™”๋œ ๊ถŒํ•œ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • Container registry
  • npm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ
  • NuGet ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ
  • RubyGems ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ

๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฒ”์œ„ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์‚ฌ์šฉ ๊ถŒํ•œ

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

๋‹ค์Œ GitHub Packages ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฒ”์œ„ ๊ถŒํ•œ๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • Apache Maven ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ
  • Gradle ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ

๋‹ค๋ฅธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ๊ฒฝ์šฐ ํŒจํ‚ค์ง€ ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉ์ž ๋˜๋Š” ์กฐ์ง์œผ๋กœ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์—ฐ๊ฒฐ๋œ ๋ฒ”์œ„๋กœ ์ง€์ •ํ•˜๋„๋ก ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€์˜ ํ‘œ์‹œ ์—ฌ๋ถ€ ๋ฐ ์•ก์„ธ์Šค ๊ถŒํ•œ

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

๋Œ€๋ถ€๋ถ„์˜ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ํŒจํ‚ค์ง€๋ฅผ ๋Œ์–ด์˜ค๋ ค๋ฉด ํŒจํ‚ค์ง€๊ฐ€ ํผ๋ธ”๋ฆญ์ธ์ง€ ํ”„๋ผ์ด๋น—์ธ์ง€์— ๊ด€๊ณ„์—†์ด personal access token ๋˜๋Š” GITHUB_TOKEN๋กœ ์ธ์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Container registry์—์„œ ํผ๋ธ”๋ฆญ ํŒจํ‚ค์ง€๋Š” ์ต๋ช… ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋ฉฐ ์ธ์ฆ ๋˜๋Š” CLI๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š๊ณ  ๋Œ์–ด์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ

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

ํŒจํ‚ค์ง€๋ฅผ ๊ฒŒ์‹œํ•˜๋ฉด ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ์ž๋™์œผ๋กœ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค. ์กฐ์ง์— ํŒจํ‚ค์ง€๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” ๊ฒฝ์šฐ ์กฐ์ง์—์„œ owner ์—ญํ• ์ด ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž๋Š” ํŒจํ‚ค์ง€์˜ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ๋„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธ ๊ณ„์ • ๋ฒ”์œ„์˜ ํŒจํ‚ค์ง€๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ์•ก์„ธ์Šค ์—ญํ• ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ์ง ๋ฒ”์œ„์˜ ํŒจํ‚ค์ง€๋Š” ์กฐ์ง์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž ๋˜๋Š” ํŒ€์—๊ฒŒ ์•ก์„ธ์Šค ์—ญํ• ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Permission์•ก์„ธ์Šค ์„ค๋ช…
์ฝ๊ธฐํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŒจํ‚ค์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์“ฐ๊ธฐ์ด ํŒจํ‚ค์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŒจํ‚ค์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ด€๋ฆฌ์ž์ด ํŒจํ‚ค์ง€๋ฅผ ์—…๋กœ๋“œ, ๋‹ค์šด๋กœ๋“œ, ์‚ญ์ œ ๋ฐ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŒจํ‚ค์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŒจํ‚ค์ง€ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ

GitHub Actions ์›Œํฌํ”Œ๋กœ์—์„œ REST API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง€๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋ณต์›ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ณต๊ฐœ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๋ฒ„์ „์ด๋ฉฐ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŒจํ‚ค์ง€์˜ ์•ก์„ธ์Šค ์ œ์–ด ๋ฐ ํ‘œ์‹œ ์—ฌ๋ถ€ ๊ตฌ์„ฑ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

ํŒจํ‚ค์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ๋ฒ”์œ„ ๋ฐ ์‚ฌ์šฉ ๊ถŒํ•œ ์ •๋ณด

์ฐธ๊ณ  ํ•ญ๋ชฉ

GitHub Packages์€(๋Š”) personal access token (classic)์„(๋ฅผ) ์‚ฌ์šฉํ•˜๋Š” ์ธ์ฆ๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐœ์ธ์šฉ ์•ก์„ธ์Šค ํ† ํฐ ๊ด€๋ฆฌ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

ํŒจํ‚ค์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ํ˜ธ์ŠคํŠธ๋˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด ์ ์ ˆํ•œ ๋ฒ”์œ„์˜ personal access token (classic)์„(๋ฅผ) ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ๊ฐœ์ธ ๊ณ„์ •์— ์ ์ ˆํ•œ ์‚ฌ์šฉ ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

  • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์„ค์น˜ํ•˜๋ ค๋ฉด personal access token (classic)์— read:packages ๋ฒ”์œ„๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ์‚ฌ์šฉ์ž ๊ณ„์ •์— ์ฝ๊ธฐ ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํŒจํ‚ค์ง€๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด personal access token (classic)์— ์ตœ์†Œํ•œ delete:packages ๋ฐ read:packages ๋ฒ”์œ„๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŒจํ‚ค์ง€ ์‚ญ์ œ ๋ฐ ๋ณต์›์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.
๋ฒ”์œ„์„ค๋ช…ํ•„์š”ํ•œ ๊ถŒํ•œ
read:packagesGitHub Packages์—์„œ ํŒจํ‚ค์ง€ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜read
write:packagesGitHub Packages์— ํŒจํ‚ค์ง€ ์—…๋กœ๋“œ ๋ฐ ๊ฒŒ์‹œ์“ฐ๊ธฐ
delete:packagesGitHub Packages์—์„œ ํŒจํ‚ค์ง€ ์‚ญ์ œ๊ด€๋ฆฌ์ž

์ฐธ๊ณ  ํ•ญ๋ชฉ

GitHub Actions ์›Œํฌํ”Œ๋กœ์—์„œ REST API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง€๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋ณต์›ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ณต๊ฐœ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๋ฒ„์ „์ด๋ฉฐ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GitHub Actions ์›Œํฌํ”Œ๋กœ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ GITHUB_TOKEN์„(๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ personal access token์„(๋ฅผ) ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•  ํ•„์š” ์—†์ด GitHub Packages์— ํŒจํ‚ค์ง€๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ , ์„ค์น˜ํ•˜๊ณ , ์ œ๊ฑฐํ•˜๊ณ , ๋ณต์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ „์†ก ์ •๋ณด

๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ๋˜๋Š” ์กฐ์ง์— ์ด์ „ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ „์†ก์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ „์†กํ•  ๋•Œ GitHub์€(๋Š”) ํŒจํ‚ค์ง€๊ฐ€ ์†ํ•œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋”ฐ๋ผ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์™€ ์—ฐ๊ฒฐ๋œ ํŒจํ‚ค์ง€๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„ธ๋ถ„ํ™”๋œ ๊ถŒํ•œ์„ ์ง€์›ํ•˜๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ๊ฒฝ์šฐ ํŒจํ‚ค์ง€์˜ ๋ฒ”์œ„๋Š” ๊ฐœ์ธ ๊ณ„์ • ๋˜๋Š” ์กฐ์ง์œผ๋กœ ์ง€์ •๋˜๋ฉฐ, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ด์ „ํ•  ๋•Œ ํŒจํ‚ค์ง€์™€ ์—ฐ๊ฒฐ๋œ ๊ณ„์ •์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ํŒจํ‚ค์ง€๋ฅผ ์—ฐ๊ฒฐํ•œ ๊ฒฝ์šฐ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด์ „ํ•  ๋•Œ ๋งํฌ๊ฐ€ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์™€ ์—ฐ๊ฒฐ๋œ codespace ๋˜๋Š” GitHub Actions ์›Œํฌํ”Œ๋กœ๋Š” ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๊ฐ€ ์—ฐ๊ฒฐ๋œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์ƒ์†ํ•˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ชฉ๋ก์€ ์œ„์˜ ์‚ฌ์šฉ์ž/์กฐ์ง ๋ฒ”์œ„ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์„ธ๋ถ€์ ์ธ ๊ถŒํ•œ์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฒ”์œ„ ๊ถŒํ•œ๋งŒ ์ง€์›ํ•˜๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ๊ฒฝ์šฐ ํŒจํ‚ค์ง€๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ง์ ‘ ๊ฒŒ์‹œ๋˜๊ณ  GitHub์€(๋Š”) ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ด๋™์˜ ์ผ๋ถ€๋กœ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์™€ ์—ฐ๊ฒฐ๋œ ํŒจํ‚ค์ง€๋ฅผ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€์™€ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ฒญ๊ตฌ ๊ฐ€๋Šฅ ์‚ฌ์šฉ๋Ÿ‰์€ ์ดํ›„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์ƒˆ ์†Œ์œ ์ž์—๊ฒŒ ์ฒญ๊ตฌ๋ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์†Œ์œ ์ž๊ฐ€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๊ณต๋™ ์ž‘์—…์ž๋กœ ์ œ๊ฑฐ๋œ ๊ฒฝ์šฐ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์™€ ์—ฐ๊ฒฐ๋œ ํŒจํ‚ค์ง€์— ๋” ์ด์ƒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ชฉ๋ก์€ ์œ„์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฒ”์œ„ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์‚ฌ์šฉ ๊ถŒํ•œ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

GitHub Actions ์›Œํฌํ”Œ๋กœ์—์„œ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ์œ ์ง€ ๊ด€๋ฆฌ

์›Œํฌํ”Œ๋กœ๊ฐ€ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ์›Œํฌํ”Œ๋กœ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ์•ก์„ธ์Šค ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ  ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ GitHub Actions ์•ก์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

GitHub Actions์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๊ฐœ๋…์  ๋ฐฐ๊ฒฝ ๋˜๋Š” ์›Œํฌํ”Œ๋กœ์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ๋Š” GitHub Actions ์›Œํฌํ”Œ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GitHub ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์•ก์„ธ์Šค ํ† ํฐ

์ฐธ๊ณ  ํ•ญ๋ชฉ

GitHub Actions ์›Œํฌํ”Œ๋กœ์—์„œ REST API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง€๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋ณต์›ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ณต๊ฐœ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๋ฒ„์ „์ด๋ฉฐ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

GitHub Actions ์›Œํฌํ”Œ๋กœ์—์„œ ์‚ฌ์šฉ๋˜๋Š” GITHUB_TOKEN์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์›Œํฌํ”Œ๋กœ์—์„œ ์ธ์ฆ์— GITHUB_TOKEN ์‚ฌ์šฉ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์„ธ๋ถ„ํ™”๋œ ๊ถŒํ•œ์ด ์žˆ๋Š” ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ GitHub Actions ์•ก์„ธ์Šค

์›Œํฌํ”Œ๋กœ๊ฐ€ ์„ธ๋ถ„ํ™”๋œ ๊ถŒํ•œ์„ ์ง€์›ํ•˜๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ €์žฅ๋œ ํŒจํ‚ค์ง€์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด ์›Œํฌํ”Œ๋กœ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ GitHub Actions ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€์˜ ์„ค์ • ํŽ˜์ด์ง€์—์„œ ์ด ์„ค์ •์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŒจํ‚ค์ง€์˜ ์•ก์„ธ์Šค ์ œ์–ด ๋ฐ ํ‘œ์‹œ ์—ฌ๋ถ€ ๊ตฌ์„ฑ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.