Skip to main content

๋ฐฐํฌ ํ‚ค ๊ด€๋ฆฌ

๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž๋™ํ™”ํ•  ๋•Œ ์„œ๋ฒ„์—์„œ SSH ํ‚ค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๊ณผ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

SSH ์—์ด์ „ํŠธ ์ „๋‹ฌ, OAuth ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” HTTPS, ๋ฐฐํฌ ํ‚ค ๋˜๋Š” ์ปดํ“จํ„ฐ ์‚ฌ์šฉ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž๋™ํ™”ํ•  ๋•Œ ์„œ๋ฒ„์—์„œ SSH ํ‚ค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SSH ์—์ด์ „ํŠธ ์ „๋‹ฌ

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ, ํŠนํžˆ ํ”„๋กœ์ ํŠธ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ SSH ์—์ด์ „ํŠธ ์ „๋‹ฌ์€ ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ ์ „๋‹ฌ์€ ๋กœ์ปฌ ๊ฐœ๋ฐœ ์ปดํ“จํ„ฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ SSH ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

SSH ์—์ด์ „ํŠธ ํฌ์›Œ๋”ฉ์˜ ์žฅ์ 

  • ์ƒˆ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ถ”์ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ํ‚ค ๊ด€๋ฆฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ์ž๋Š” ๋กœ์ปฌ์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๊ถŒํ•œ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„์— ์ €์žฅ๋œ ํ‚ค๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์„œ๋ฒ„๊ฐ€ ์†์ƒ๋œ ๊ฒฝ์šฐ ์†์ƒ๋œ ํ‚ค๋ฅผ ์ฐพ์•„ ์ œ๊ฑฐํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

SSH ์—์ด์ „ํŠธ ํฌ์›Œ๋”ฉ์˜ ๋‹จ์ 

  • ๋ฐฐํฌํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ SSH์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ์ง€ ์•Š์œผ๋ฉด ์ž๋™ํ™”๋œ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • SSH ์—์ด์ „ํŠธ ์ „๋‹ฌ์€ Windows ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SSH ์—์ด์ „ํŠธ ํฌ์›Œ๋”ฉ ์„ค์ •

  1. ๋กœ์ปฌ๋กœ ์—์ด์ „ํŠธ ์ „๋‹ฌ์„ ์ผญ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ SSH ์—์ด์ „ํŠธ ์ „๋‹ฌ์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  2. ์—์ด์ „ํŠธ ์ „๋‹ฌ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด bash ์Šคํฌ๋ฆฝํŠธ์—์„œ ์—์ด์ „ํŠธ ์ „๋‹ฌ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ssh -A serverA 'bash -s' < deploy.sh

OAuth ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” HTTPS ๋ณต์ œ

SSH ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด OAuth ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” HTTPS๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

OAuth ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” HTTPS ๋ณต์ œ์˜ ์žฅ์ 

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

OAuth ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” HTTPS ๋ณต์ œ์˜ ๋‹จ์ 

  • ์˜ฌ๋ฐ”๋ฅธ ์•ก์„ธ์Šค ๋ฒ”์œ„๋กœ ํ† ํฐ์„ ๊ตฌ์„ฑํ–ˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ† ํฐ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•”ํ˜ธ์ด๋ฉฐ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ณดํ˜ธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

OAuth ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” HTTPS ๋ณต์ œ ์„ค์ •

personal access token์„(๋ฅผ) ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฐฐํฌ ํ‚ค

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

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

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

๋ฐฐํฌ ํ‚ค์˜ ์žฅ์ 

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

๋ฐฐํฌ ํ‚ค์˜ ๋‹จ์ 

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

๋ฐฐํฌ ํ‚ค ์„ค์ •

์ฐธ๊ณ  ํ•ญ๋ชฉ

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

  1. ์„œ๋ฒ„์—์„œ ssh-keygen ํ”„๋กœ์‹œ์ €๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ƒ์„ฑ๋œ ํผ๋ธ”๋ฆญ ๋ฐ ํ”„๋ผ์ด๋น— rsa ํ‚ค ์Œ์„ ์ €์žฅํ•˜๋Š” ์œ„์น˜๋ฅผ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค.

  2. GitHub์—์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๊ธฐ๋ณธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  3. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ด๋ฆ„ ์•„๋ž˜์—์„œ ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. "์„ค์ •" ํƒญ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉด ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ํƒญ์„ ๋ณด์—ฌ ์ฃผ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ—ค๋”์˜ ์Šคํฌ๋ฆฐ์ƒท. "์„ค์ •" ํƒญ์ด ์ง„ํ•œ ์ฃผํ™ฉ์ƒ‰ ์œค๊ณฝ์„ ์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  4. ์™ผ์ชฝ ์‚ฌ์ด๋“œ๋ฐ”์—์„œ ๋ฐฐํฌ ํ‚ค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  5. ๋ฐฐํฌ ํ‚ค ์ถ”๊ฐ€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  6. "์ œ๋ชฉ" ํ•„๋“œ์—์„œ ์ œ๋ชฉ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  7. ๊ณต๊ฐœ ํ‚ค๋ฅผ "ํ‚ค" ํ•„๋“œ์— ๋ถ™์—ฌ ๋„ฃ์Šต๋‹ˆ๋‹ค.

  8. ์ด ํ‚ค๊ฐ€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๊ฐ–๋„๋ก ํ•˜๋ ค๋ฉด ์“ฐ๊ธฐ ์•ก์„ธ์Šค ํ—ˆ์šฉ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์“ฐ๊ธฐ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋Š” ๋ฐฐํฌ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐํฌ๊ฐ€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ํ‘ธ์‹œ๋ฉ๋‹ˆ๋‹ค.

  9. ํ‚ค ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

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

์„œ๋ฒ„ ํ•˜๋‚˜์—์„œ ์—ฌ๋Ÿฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์‚ฌ์šฉ

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

์„œ๋ฒ„์˜ SSH ๊ตฌ์„ฑ ํŒŒ์ผ(์ผ๋ฐ˜์ ์œผ๋กœ ~/.ssh/config)์—์„œ ๊ฐ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ๋ณ„์นญ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ:

Host github.com-repo-0
        Hostname github.com
        IdentityFile=/home/user/.ssh/repo-0_deploy_key

Host github.com-repo-1
        Hostname github.com
        IdentityFile=/home/user/.ssh/repo-1_deploy_key
  • Host github.com-repo-0 - ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋ณ„์นญ
  • Hostname github.com - ๋ณ„์นญ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • IdentityFile=/home/user/.ssh/repo-0_deploy_key - ๋ณ„์นญ์— ํ”„๋ผ์ด๋น— ํ‚ค๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์˜ ๋ณ„์นญ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ณ„์นญ์— ํ• ๋‹น๋œ ๊ณ ์œ  ๋ฐฐํฌ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” SSH๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ:

git clone git@github.com-repo-1:OWNER/repo-1.git

GitHub App ์„ค์น˜ ์•ก์„ธ์Šค ํ† ํฐ

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

GitHub Apps๋Š” GitHub์˜ ์ฒซ ๋ฒˆ์งธ ํด๋ž˜์Šค ํ–‰์œ„์ž์ด๋ฏ€๋กœ, ์„ค์น˜ ์•ก์„ธ์Šค ํ† ํฐ์€ ๋ชจ๋“  GitHub ์‚ฌ์šฉ์ž์™€ ๋ถ„๋ฆฌ๋˜์–ด "์„œ๋น„์Šค ํ† ํฐ"์— ํ•„์ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์„ค์น˜ ์•ก์„ธ์Šค ํ† ํฐ์—๋Š” ์ž‘์—…ํ•˜๋Š” ์กฐ์ง์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋˜๋Š” ์ „์šฉ ํŠธ๋ž˜ํ”ฝ๋ฅ  ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub Apps์˜ ์†๋„ ์ œํ•œ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์„ค์น˜ ์•ก์„ธ์Šค ํ† ํฐ์˜ ์žฅ์ 

  • ์ž˜ ์ •์˜๋œ ๊ถŒํ•œ ์ง‘ํ•ฉ ๋ฐ ๋งŒ๋ฃŒ ์‹œ๊ฐ„(API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ํ•ด์ง€๋œ ๊ฒฝ์šฐ 1์‹œ๊ฐ„ ์ดํ•˜)์ด ์žˆ๋Š”, ๋ฒ”์œ„๊ฐ€ ์—„๊ฒฉํ•˜๊ฒŒ ์ง€์ •๋œ ํ† ํฐ
  • ์กฐ์ง์— ๋”ฐ๋ผ ์ฆ๊ฐ€ํ•˜๋Š” ์ „์šฉ ์†๋„ ์ œํ•œ
  • GitHub ์‚ฌ์šฉ์ž ID์—์„œ ๋ถ„๋ฆฌ๋˜๋ฏ€๋กœ ๋ผ์ด์„ ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์•”ํ˜ธ๋ฅผ ๋ถ€์—ฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ง์ ‘ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์—†์Œ

์„ค์น˜ ์•ก์„ธ์Šค ํ† ํฐ์˜ ๋‹จ์ 

  • GitHub App์„(๋ฅผ) ๋งŒ๋“ค๋ ค๋ฉด ์ถ”๊ฐ€ ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์„ค์น˜ ์•ก์„ธ์Šค ํ† ํฐ์€ 1์‹œ๊ฐ„ ํ›„์— ๋งŒ๋ฃŒ๋˜๋ฏ€๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ๋ฌธํ˜•์œผ๋กœ ๋‹ค์‹œ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ์•ก์„ธ์Šค ํ† ํฐ์˜ ์„ค์ •

  1. GitHub App์„(๋ฅผ) ๊ณต๊ฐœ๋กœ ํ• ์ง€ ๋น„๊ณต๊ฐœ๋กœ ํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. GitHub App์ด(๊ฐ€) ์กฐ์ง ๋‚ด์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ๋งŒ ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ, ๋น„๊ณต๊ฐœ๋ฅผ ์›ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.
  2. GitHub App ์•ฑ์— ํ•„์š”ํ•œ ๊ถŒํ•œ(์˜ˆ: ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•œ ์ฝ๊ธฐ ์ „์šฉ ์•ก์„ธ์Šค ๊ถŒํ•œ)์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. ์กฐ์ง์˜ ์„ค์ • ํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด GitHub App์„(๋ฅผ) ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub App ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  4. GitHub App id์„(๋ฅผ) ๋ฉ”๋ชจํ•ด ๋‘ก๋‹ˆ๋‹ค.
  5. GitHub App์˜ ํ”„๋ผ์ด๋น— ํ‚ค๋ฅผ ์ƒ์„ฑ ๋ฐ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”„๋ผ์ด๋น— ํ‚ค ์ƒ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  6. ์ž‘์—…์ด ํ•„์š”ํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— GitHub App์„(๋ฅผ) ์„ค์น˜ํ•˜๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ์กฐ์ง์˜ ๋ชจ๋“  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— GitHub App์„(๋ฅผ) ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  7. GitHub App๊ณผ(์™€) ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ์ง ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๋‚˜ํƒ€๋‚ด๋Š” installation_id์„(๋ฅผ) ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ GitHub App ๋ฐ ์กฐ์ง ์Œ์—๋Š” ์ตœ๋Œ€ ํ•˜๋‚˜์˜ installation_id์ด(๊ฐ€) ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฆ๋œ ์•ฑ์— ๋Œ€ํ•œ ์กฐ์ง ์„ค์น˜ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ํ†ตํ•ด installation_id๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” JWT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GitHub App(์œผ)๋กœ ์ธ์ฆํ•ด์•ผ ํ•˜๋ฉฐ, ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub App(์œผ)๋กœ ์ธ์ฆ์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  8. ํ•ด๋‹น REST API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ ์•ก์„ธ์Šค ํ† ํฐ์„ ์ƒ์„ฑํ•˜๊ณ , ์•ฑ์— ๋Œ€ํ•œ ์„ค์น˜ ์•ก์„ธ์Šค ํ† ํฐ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” JWT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GitHub App(์œผ)๋กœ ์ธ์ฆํ•ด์•ผ ํ•˜๋ฉฐ, ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub App(์œผ)๋กœ ์ธ์ฆ ๋ฐ ์„ค์น˜๋กœ ์ธ์ฆ์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  9. ์ด ์„ค์น˜ ์•ก์„ธ์Šค ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ REST ๋˜๋Š” GraphQL API๋ฅผ ํ†ตํ•ด ์•„๋‹ˆ๋ฉด Git ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ†ตํ•ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์•ฑ์— ๋Œ€ํ•œ ์„ค์น˜ ์•ก์„ธ์Šค ํ† ํฐ ์ƒ์„ฑ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ปดํ“จํ„ฐ ์‚ฌ์šฉ์ž

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

ํŒ

์„œ๋น„์Šค ์•ฝ๊ด€ ์ƒํƒœ:

"๋ด‡" ๋˜๋Š” ๊ธฐํƒ€ ์ž๋™ํ™”๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ๋“ฑ๋กํ•œ ๊ณ„์ •์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์ปดํ“จํ„ฐ ์‚ฌ์šฉ์ž์˜ ์žฅ์ 

  • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฐ ์„œ๋ฒ„์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ๋žŒ์ด ์•„๋‹Œ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ์ปฌ SSH ์„ค์ •์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ํ‚ค๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๊ณ  ์„œ๋ฒ„๋‹น 1๊ฐœ๊ฐ€ ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

์ปดํ“จํ„ฐ ์‚ฌ์šฉ์ž์˜ ๋‹จ์ 

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

์ปดํ“จํ„ฐ ์‚ฌ์šฉ์ž ์„ค์ •

  1. ์„œ๋ฒ„์—์„œ ssh-keygen ํ”„๋กœ์‹œ์ €๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํผ๋ธ”๋ฆญ ํ‚ค๋ฅผ ์ปดํ“จํ„ฐ ์‚ฌ์šฉ์ž ๊ณ„์ •์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  2. ์ปดํ“จํ„ฐ ์‚ฌ์šฉ์ž ๊ณ„์ •์— ์ž๋™ํ™”ํ•˜๋ ค๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ์กฐ์ง์—์„œ ๊ณ„์ •์„ ํ˜‘๋ ฅ์ž, ์™ธ๋ถ€ ํ˜‘๋ ฅ์ž ๋˜๋Š” ํŒ€์œผ๋กœ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์ฐธ๊ณ  ์ž๋ฃŒ