Skip to main content

OAuth ์•ฑ์„ GitHub ์•ฑ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

OAuth app์„(๋ฅผ) GitHub App์œผ(๋กœ) ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ์˜ ์ด์ ๊ณผ OAuth app์„(๋ฅผ) ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

OAuth apps์—์„œ GitHub Apps(์œผ)๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๊ฒฝ์šฐ์˜ ํ˜œํƒ

GitHub Apps์€(๋Š”) GitHub์™€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. GitHub Apps์€(๋Š”) OAuth apps์— ๋น„ํ•ด ๋‹ค์Œ์„ ํฌํ•จํ•œ ๋งŽ์€ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

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

OAuth app์„(๋ฅผ) GitHub App(์œผ)๋กœ ๋ณ€ํ™˜

๋‹ค์Œ ๋‹จ๊ณ„์—์„œ๋Š” OAuth app์—์„œ GitHub App(์œผ)๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐœ์š”๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ๋‹จ๊ณ„๋Š” ์•ฑ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

1. OAuth apps์˜ ๊ฒ€ํ† 

OAuth app์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ˆ™์ง€ํ•ฉ๋‹ˆ๋‹ค. OAuth app์— ๋Œ€ํ•œ API ์š”์ฒญ์€ GitHub App์— ๋Œ€ํ•ด ์„ ํƒํ•  ๊ถŒํ•œ์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ OAuth apps์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ช‡ ๊ฐ€์ง€ REST API ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub ์•ฑ ์„ค์น˜ ์•ก์„ธ์Šค ํ† ํฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—”๋“œํฌ์ธํŠธ ์„(๋ฅผ) ๊ฒ€ํ† ํ•˜์—ฌ GitHub Apps์— ์‚ฌ์šฉํ•˜๋Š” REST ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

2. GitHub App ๋“ฑ๋ก

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

OAuth app์— ๋น„ํ•ด GitHub App ์„ค์ •์„ ๋” ์ž˜ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ์ถ”๊ฐ€ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

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

  • OAuth app์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์— ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ๋•Œ ๋ฒ”์œ„๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. GitHub App์—์„œ๋Š” ์•ฑ ์„ค์ •์—์„œ ์‚ฌ์šฉ ๊ถŒํ•œ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ถŒํ•œ์€ ๋ฒ”์œ„๋ณด๋‹ค ์„ธ๋ถ„ํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ์•ฑ์— ํ•„์š”ํ•œ ๊ถŒํ•œ๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋Ÿฌํ•œ ๊ถŒํ•œ์€ REST API ์—”๋“œํฌ์ธํŠธ ๋ฐ ์›นํ›„ํฌ ์ด๋ฒคํŠธ์— ๋งคํ•‘๋˜๋ฏ€๋กœ ํŠน์ • REST API ์—”๋“œํฌ์ธํŠธ์— ์•ก์„ธ์Šคํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์›นํ›„ํฌ๋ฅผ ๊ตฌ๋…ํ•˜๊ธฐ ์œ„ํ•ด GitHub App์— ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GraphQL ์š”์ฒญ์— ๋Œ€ํ•œ ์‚ฌ์šฉ ๊ถŒํ•œ์€ ํ˜„์žฌ ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์•ฑ์˜ ๊ถŒํ•œ ์„ ํƒ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

3. ์•ฑ์˜ ์ฝ”๋“œ ์ˆ˜์ •

GitHub App์„(๋ฅผ) ๋“ฑ๋กํ•œ ํ›„ ์ด์ „ OAuth app์˜ ์ฝ”๋“œ๋ฅผ ์กฐ์ •ํ•˜์—ฌ ์ƒˆ GitHub App์„(๋ฅผ) ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ธ์ฆ ์—…๋ฐ์ดํŠธ

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

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

GitHub์˜ ๊ณต์‹ Octokit.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์ œ๊ณต App ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋Š” REST API ๋ฐ JavaScript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŒ… ๋ฐ ์›นํ›„ํฌ ์ด๋ฒคํŠธ์— ์‘๋‹ตํ•˜๋Š” GitHub ์•ฑ ๋นŒ๋“œ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

ํŠธ๋ž˜ํ”ฝ๋ฅ  ์ œํ•œ ๊ฒ€ํ† 

OAuth apps ์™€ GitHub Apps์˜ ํŠธ๋ž˜ํ”ฝ๋ฅ  ์ œํ•œ ์ฐจ์ด๋ฅผ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค. GitHub Apps์€(๋Š”) ํŠธ๋ž˜ํ”ฝ๋ฅ  ์ œํ•œ์˜ ์Šฌ๋ผ์ด๋”ฉ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์ด๋Š” ์กฐ์ง์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฐ ์‚ฌ์šฉ์ž ์ˆ˜์— ๋”ฐ๋ผ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์•ฑ์˜ ํŠธ๋ž˜ํ”ฝ๋ฅ  ์ œํ•œ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

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

์ฝ”๋“œ ํ…Œ์ŠคํŠธ

์ƒˆ GitHub App์„(๋ฅผ) ํ…Œ์ŠคํŠธํ•˜์—ฌ ์ฝ”๋“œ๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

4. ์ƒˆ GitHub App ๊ณต๊ฐœ

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

5. ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ง€์‹œ

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

์•ฑ ์†Œ์œ ์ž๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ƒˆ GitHub App์„(๋ฅผ) ์„ค์น˜/์Šน์ธํ•˜๊ณ  ์ด์ „ OAuth app์— ๋Œ€ํ•œ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์ทจ์†Œํ•˜๋„๋ก ๊ถŒ์žฅํ•˜๋Š” ์ž‘์—… ํ˜ธ์ถœ์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค๋ช…์„œ ๋˜๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ๋„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

GitHub App์„(๋ฅผ) ์„ค์น˜ํ•˜๋ผ๋Š” ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

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

์‚ฌ์šฉ์ž๊ฐ€ GitHub App์„(๋ฅผ) ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํด๋ฆญํ•˜์—ฌ GitHub App์„(๋ฅผ) ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ์•ฑ์˜ ์›น ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์น˜ URL์˜ ํ˜•์‹์€ https://github.com/apps/YOUR_APP_NAME/installations/new์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. GitHub App์˜ ์„ค์ • ํŽ˜์ด์ง€์˜ "๊ณต๊ฐœ ๋งํฌ" ํ•„๋“œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” GitHub App์˜ ์Šฌ๋Ÿฌ๊ทธํ™”๋œ ์ด๋ฆ„์œผ๋กœ YOUR_APP_NAME์„(๋ฅผ) ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

OAuth app์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์„ ํƒํ•˜๋ ค๋ฉด ์„ค์น˜ URL์— /permissions ๋ฐ ์ฟผ๋ฆฌ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ OAuth app์— ์ด๋ฏธ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— GitHub App์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • suggested_target_id: GitHub App์„(๋ฅผ) ์„ค์น˜ํ•˜๋Š” ์‚ฌ์šฉ์ž ๋˜๋Š” ์กฐ์ง์˜ ID์ž…๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.
  • repository_ids[]: ์„ค์น˜๋ฅผ ์œ„ํ•ด ์„ ํƒํ•  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ID์ž…๋‹ˆ๋‹ค. ์ƒ๋žต๋˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ๋ฆฌ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ˆ˜๋Š” 100๊ฐœ์ž…๋‹ˆ๋‹ค. OAuth app ์•ฑ์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋ชฉ๋ก์„ ์–ป์œผ๋ ค๋ฉด ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์—ด๊ฑฐ ๋ฐ ์กฐ์ง ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์—ด๊ฑฐ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ: https://github.com/apps/YOUR_APP_NAME/installations/new/permissions?suggested_target_id=ID_OF_USER_OR_ORG&repository_ids[]=REPO_A_ID&repository_ids[]=REPO_B_ID

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

์‚ฌ์šฉ์ž์—๊ฒŒ ์•ฑ์— ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋ผ๋Š” ํ”„๋กฌํ”„ํŠธ ํ‘œ์‹œ

GitHub App์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ API ์š”์ฒญ์„ ํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์— ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์— ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋ฉด ์•ฑ์ด ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ณ  ์•ฑ์—์„œ ์š”์ฒญํ•œ ๊ณ„์ • ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์ด ์กฐ์ง ๊ณ„์ •์— ์„ค์น˜๋œ ๊ฒฝ์šฐ ํ•ด๋‹น ์กฐ์ง ๋‚ด์˜ ๊ฐ ์‚ฌ์šฉ์ž๋Š” ์•ฑ์ด ๋Œ€์‹  ์ž‘๋™ํ•˜๋„๋ก ์•ฑ์— ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

GitHub Apps ๊ถŒํ•œ ๋ถ€์—ฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์•ฑ์— ๊ถŒํ•œ ๋ถ€์—ฌ ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์‚ฌ์šฉ์ž๊ฐ€ OAuth app ์•ก์„ธ์Šค๋ฅผ ์ฒ ํšŒํ•˜๋„๋ก ๊ถŒ์žฅ

๋˜ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์ด์ „ OAuth app์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์ฒ ํšŒํ•˜๋„๋ก ๊ถŒ์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด OAuth app์—์„œ ์™„์ „ํžˆ ์ „ํ™˜ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋ฉฐ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ถŒํ•œ ์žˆ๋Š” OAuth ์•ฑ ๊ฒ€ํ† ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ธํ„ฐํŽ˜์ด์Šค ๋˜๋Š” ์„ค๋ช…์„œ ์—…๋ฐ์ดํŠธ

OAuth app์—์„œ GitHub App์œผ(๋กœ) ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ๋ฐ˜์˜ํ•˜๋„๋ก ์•ฑ๊ณผ ๊ด€๋ จ๋œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๋˜๋Š” ์„ค๋ช…์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

6. ์ด์ „ OAuth app์— ๋Œ€ํ•œ ์›นํ›„ํฌ ์ œ๊ฑฐ

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

๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์›นํ›„ํฌ๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๋ฉด added ์ž‘์—…์œผ๋กœ installation_repositories ์›นํ›„ํฌ๋ฅผ ์ˆ˜์‹  ๋Œ€๊ธฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub App์ด(๊ฐ€) ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด REST API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ OAuth app์— ๋Œ€ํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์›นํ›„ํฌ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์›นํ›„ํฌ ์ด๋ฒคํŠธ ๋ฐ ํŽ˜์ด๋กœ๋“œ ๋ฐ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์›นํ›„ํฌ์— ๋Œ€ํ•œ REST API ์—”๋“œํฌ์ธํŠธ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์กฐ์ง ์›นํ›„ํฌ๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๋ฉด created ์ž‘์—…์œผ๋กœ installation ์›นํ›„ํฌ๋ฅผ ์ˆ˜์‹  ๋Œ€๊ธฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub App์ด(๊ฐ€) ์กฐ์ง์— ๋Œ€ํ•ด ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด REST API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์กฐ์ง์˜ ์›นํ›„ํฌ ๋ฐ OAuth app์— ๋Œ€ํ•œ ํ•ด๋‹น ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์›นํ›„ํฌ ์ด๋ฒคํŠธ ๋ฐ ํŽ˜์ด๋กœ๋“œ, ์กฐ์ง ์›นํ›„ํฌ์— ๋Œ€ํ•œ REST API ์—”๋“œํฌ์ธํŠธ, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์›นํ›„ํฌ์— ๋Œ€ํ•œ REST API ์—”๋“œํฌ์ธํŠธ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

7. ์ด์ „ OAuth app ์‚ญ์ œ

์‚ฌ์šฉ์ž๊ฐ€ ์ƒˆ GitHub App์œผ(๋กœ) ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋˜๋ฉด ์ด์ „ OAuth app์„(๋ฅผ) ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด OAuth app์˜ ์ž๊ฒฉ ์ฆ๋ช…์ด ๋‚จ์šฉ๋˜์ง€ ์•Š๋„๋ก ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ OAuth app ์•ฑ์˜ ๋‚˜๋จธ์ง€ ๊ถŒํ•œ ๋ถ€์—ฌ๋„ ๋ชจ๋‘ ์ฒ ํšŒํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ OAuth ์•ฑ ์‚ญ์ œ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”. OAuth app์ด(๊ฐ€) GitHub Marketplace์— ๋‚˜์—ด๋œ ๊ฒฝ์šฐ ๋จผ์ € GitHub ์ง€์›์— ๋ฌธ์˜ํ•˜์—ฌ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค์—์„œ ์•ฑ์„ ์ œ๊ฑฐํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.