์ด์ ์ good-first-issue
์ด์๊ฐ ์กด์ฌํ๋ GitHub ํ๋ก์ ํธ ๋ชฉ๋ก์ ๋ณผ ์ ์๋ ์น์ฑ์ ๋ง๋๋ ํ ์ดํ๋ก์ ํธ๋ฅผ ์งํํ๋ค.
์ด ํ๋ก์ ํธ์์๋ ์ฌ๋ฌ๊ฐ์ง ๊นํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด์ GitHub API๋ฅผ ์ฌ์ฉํ๋๋ฐ, ํนํ GitHub์์ GraphQL๋ก ์ ๊ณตํ๋ API(๋ ํฌ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ด์๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฑ๋ฑ)๋ฅผ ์ฌ์ฉํด์ผ ํ์๋ค.
๊ทธ๋ฐ๋ฐ GitHub์์๋ GraphQL๋ก ์ ๊ณตํ๋ API๋ ์ผ๋ฐ REST API์ ๋ฌ๋ฆฌ ์ฌ์ฉ์ ์ธ์ฆ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ์น์ฑ์์ ์ฌ์ฉ์ ์ธ์ฆ์ ํ์ด์ผ ํ๊ณ , OAuth๋ฅผ ์ฌ์ฉํด๋ณด๊ฒ ๋์๋ค. (์ฌ์ค GraphQL์ ์ฐ์ง ์๋๋ผ๋ REST API ํธ์ถ ์๊ฐ 1์๊ฐ์ 60๋ฒ์ธ๊ฐ๋ก ๋๋ฌด ์ ์๊ธฐ ๋๋ฌธ์ ์ด์ฐ ๋๋ ์ธ์ฆ๊ณผ์ ์ด ํ์ํ๊ธด ํ๋ค.)
OAuth?
OAuth๋ ์ธ์ฆ์ ์ํ ํ๋กํ ์ฝ๋ก, ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ์ธํฐ๋ท ์๋น์ค(์ฌ๊ธฐ์ GitHub)์ ๊ธฐ๋ฅ์ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฌ์ฉํ ์ ์๊ฒ ํ ๊ฒ์ด๋ค.
ํ๋ก์ ํธ์์ GitHub OAuth ์ธ์ฆ ๊ณผ์
์น์ฑ์์ Github์ GraphQL API๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด POST ์์ฒญ์ body์ ๊นํ์์ ๋ฐ๊ธ๋ฐ์ token์ ํฌํจํด์ ์์ฒญํด์ผ ํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊นํ์ผ๋ก๋ถํฐ token์ ๋ฐ๊ธ ๋ฐ์์์ผ ํ๋๋ฐ, ๋ฐ๊ธ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฃจ์ด์ง๋ค.
- ์ฌ์ฉ์๊ฐ ํด๋ผ์ด์ธํธ์์ ๊นํ์ ๋ก๊ทธ์ธํ๋ค.
- ๋ก๊ทธ์ธ์ด ์๋ฃ๋๋ฉด ๊นํ์ด
access_token
๋ฐ๊ธ์ ์ํcode
๋ฅผ ๋ฐ๊ธํด์ค๋ค. (๋ฆฌ๋๋ ์ ๋๋ฉด์ url ํ๋ผ๋ฏธํฐ์ ๋ถ์ด์จ๋ค) - *ํด๋ผ์ด์ธํธ์์ (์ง์ ์ฌ๋ฆฐ)ํ๋ก์ ์๋ฒ์
code
๋ฅผ ๋ณด๋ด์ ํ ํฐ ๋ฐ๊ธ์ ์์ฒญํ๋ค.
*์ฌ๊ธฐ์ ํด๋ผ์ด์ธํธ์์ ๋ฐ๋ก code
๋ก ๊นํ์ access_token
์ ์์ฒญํ์ง ์๊ณ , ์ธ๋ถ ์๋ฒ๋ฅผ ๊ฑฐ์น๋ ์ด์ ๋ ๋ธ๋ผ์ฐ์ ์ Same-Origin Policy(๋ณด์์ ์ํด ํ๋กํ ์ฝ, ํฌํธ, ๋๋ฉ์ธ์ด ๊ฐ์ ์๋ฒ๋ก๋ง ์์ฒญ์ ํ ์ ์๊ฒ ํ๋ ์ ์ฑ
)๋๋ฌธ์ด๋ค.
์ด๊ฑธ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์์ฒญ์ ๋ฐ๋ ์๋ฒ์์ CORS ์ค์ ์ ํด์ค์ผ ํ์ง๋ง GitHub์์๋ access_token
๋ฐ๊ธ์ ํด๋น ์ค์ ์ ํด๋์ง ์์์ ๋ธ๋ผ์ฐ์ ์์ ๋ฐ๋ก ์์ฒญํ ์ ์๋ค.
code๋ฅผ ๋ฐ๊ธ๋ฐ๊ธฐ ์ํด ๊นํ์ ๋ณด๋ด๋ ์์ฒญ์, ํด๋น ์์ฒญ์ ์๋ต ํค๋๋ฅผ ๋ณด๋ฉด ๊นํ์์ access-control-allow-origin: * ๋ก ์ค์ ํด์ ๋ด๋ ค์ฃผ๊ณ ์์ผ๋ฏ๋ก CORS ๋ฌธ์ ๊ฐ ์๋ค.
- ํ๋ก์ ์๋ฒ์์๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ code์ ํจ๊ป ๋ฐ์ผ๋ฉด,
client_secret
ํค(๊นํ์ ์น์ฑ์ ๋ฑ๋กํ๋ฉด ๋ฐ๊ธํด์ค๋ค)์ ํจ๊ป GitHub์access_token
๋ฐ๊ธ์ ์์ฒญํ๋ค. - GitHub์์ ํด๋น ์ ์ ์
access_token
๋ฐ๊ธ์ด ์๋ฃ๋๋ฉด ํด๋ผ์ด์ธํธ์ ํด๋น ํ ํฐ์ ์๋ต์ผ๋ก ๋ณด๋ธ๋ค.- ์ด ํ๋ก์ ์๋ฒ๋ ๋ด๊ฐ ์ง์ ์ฌ๋ฆฐ ์๋ฒ์ด๋ฏ๋ก CORS ์ค์ ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์์
CORS
์๋ฌ๊ฐ ์๊ธฐ์ง ์๋๋ค.
- ์ด ํ๋ก์ ์๋ฒ๋ ๋ด๊ฐ ์ง์ ์ฌ๋ฆฐ ์๋ฒ์ด๋ฏ๋ก CORS ์ค์ ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์์
- ์ด์ ํด๋ผ์ด์ธํธ์์๋ ์ด ํ ํฐ์ผ๋ก GitHub API๋ฅผ ์์ฒญํ ์ ์๋ค. (ํด๋น ํ ํฐ์ ๋ธ๋ผ์ฐ์ ์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅ)
์ฌ๋ด
๊ทธ๋ฐ๋ฐ ์ ๋ฆฌํ๋ฉด์ ํ๋ก์ ํธ๋ฅผ ํ์ธํ๋๋ฐ ํ๋ก์ ์๋ฒ๊ฐ ๋์ํ์ง ์์์ ๋ดค๋๋... ๊ธฐ์กด์ ํ๋ก์ ์๋ฒ๋ฅผ ๋ฌด๋ฃ์ธ heroku๋ก ์ฌ๋ ค๋จ์๋๋ฐ, ์ฌํด 11์ 28์ผ๋ถํฐ ํ๋ฆฌ ํฐ์ด๋ฅผ ์์ ์์ ์ ํ๋ก์ ์๋ฒ๊ฐ ๊บผ์ก๋ค.. ๋ค๋ฅธ ํ๋ฆฌํฐ์ด ์๋ฃจ์ ์ ์ฐพ์์ ๋ค์ ์ ์ฉํด์ผํ ๋ฏ.