# ์ธ์ฆ ๋ฐฉ์
# API Key
์๋น์ค๋ค์ด ๊ฑฐ๋ํด์ง์ ๋ฐ๋ผ ๊ธฐ๋ฅ๋ค์ ๋ถ๋ฆฌํ๊ธฐ ์์ํ์๋๋ฐ ์ด๋ฅผ์ํด Module์ด๋ Application๋ค๊ฐ์ ๊ณต์ ์ ๋ ๋ฆฝ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๊ธฐ๋ฅ๋ค์ด ๋ฑ์ฅํ๊ธฐ ์์ํ๋ค.
๊ทธ ์ค ์ ์ผ ๋จผ์ ๋ฑ์ฅํ๊ณ ๊ฐ์ฅ ๋๋ฆฌ ๋ณดํธ์ ์ผ๋ก ์ฐ์ด๋ ๊ธฐ์ ์ด API Key์ด๋ค.
# ๋์๋ฐฉ์
์ฌ์ฉ์๋ API Key๋ฅผ ๋ฐ๊ธ๋ฐ๋๋ค. (๋ฐ๊ธ ๋ฐ๋ ๊ณผ์ ์ ์๋น์ค๋ค๋ง๋ค ๋ค๋ฅด๋ค. ์๋ฅผ๋ค์ด ๊ณต๊ณต๊ธฐ๊ด API๊ฐ์ ๊ฒฝ์ฐ์๋ ์ ์ฒญ์ ํ์ํ ์์์ ์ ์ถํ๋ฉด ๊ด๋ฆฌ์๊ฐ ํ์ธ ํ Key๋ฅผ ๋ฐ๊ธํด์ค๋ค.
ํด๋น API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด Key์ ํจ๊ป ์์ฒญ์ ๋ณด๋ธ๋ค.
Application์ ์์ฒญ์ด ์ค๋ฉด Key๋ฅผ ํตํด User์ ๋ณด๋ฅผ ํ์ธํ์ฌ ๋๊ตฌ์ Key์ธ์ง ๊ถํ์ด ๋ฌด์์ธ์ง๋ฅผ ํ์ธํ๋ค.
ํด๋น Key์ ์ธ์ฆ๊ณผ ์ธ๊ฐ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฐํํ๋ค.
# ๋ฌธ์ ์
API Key๋ฅผ ์ฌ์ฉ์์๊ฒ ์ง์ ๋ฐ๊ธํ๊ณ ํด๋น Key๋ฅผ ํตํด ํต์ ์ ํ๊ธฐ ๋๋ฌธ์ ํต์ ๊ตฌ๊ฐ์ด ์ํธํ๊ฐ ์ ๋์ด ์๋๋ผ๋ Key๊ฐ ์ ์ถ๋ ๊ฒฝ์ฐ์ ๋๋นํ๊ธฐ ํ๋ค๋ค.
๊ทธ๋ ๊ธฐ๋๋ฌธ์ ์ฃผ๊ธฐ์ ์ผ๋ก Key๋ฅผ ์ ๋ฐ์ดํธ๋ฅผ ํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ฒ๊ฑฐ๋กญ๊ณ ์๊ธฐ์น ๋ชปํ ์ํฉ(ํ์ชฝ๋ง ์ ๋ฐ์ดํธ๊ฐ ์คํ๋์ด ์๋ก ๋งค์น๊ฐ ์๋๋ค๋ ๋ฑ)์ด ๋ฐ์ํ ์ ์๋ค.
๋ํ, Keyํ๊ฐ์ง๋ก ์ ๋ณด๋ฅผ ์ ์ดํ๊ธฐ ๋๋ฌธ์ ๋ณด์๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ดํธ์ด๋ค.
# OAuth2
API Key์ ๋จ์ ์ ๋ฉ๊พธ๊ธฐ ์ํด ๋ฑ์ํ ๋ฐฉ์์ด๋ค. ๋ํ์ ์ผ๋ก ํ์ด์ค๋ถ, ํธ์ํฐ ๋ฑ SNS ๋ก๊ทธ์ธ๊ธฐ๋ฅ์์ ์ฝ๊ฒ ๋ณผ ์ ์๋ค.
์์ฒญํ๊ณ ์์ฒญ๋ฐ๋ ๋จ์ํ ๋ฐฉ์์ด ์๋๋ผ ์ธ์ฆํ๋ ๋ถ๋ถ์ด ์ถ๊ฐ๋์ด ๋ ๋ฆฝ์ ์ผ๋ก ์ธ๋ถํ๊ฐ ์ด๋ฃจ์ด์ก๋ค.
# ๋์๋ฐฉ์
์ฌ์ฉ์๊ฐ Application์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํ ์์ฒญ์ ๋ณด๋ธ๋ค. (๋ก๊ทธ์ธ ๊ธฐ๋ฅ, ํน์ ์ ๋ณด ์ด๋ ๋ฑ ๋ค์ํ ๊ณณ์์ ์ฐ์ผ ์ ์๋ค. ์ฌ๊ธฐ์์๋ ๋ก๊ทธ์ธ์ผ๋ก ํต์ผํ์ฌ ์ค๋ช ํ๊ฒ ๋ค.)
Application์ ํด๋น ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ด ๋์ด ์๋์ง๋ฅผ ํ์ธํ๋ค. ๋ก๊ทธ์ธ์ด ๋์ด ์์ง ์๋ค๋ฉด ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ๋ค.
Application์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ๋์ด ์์ง ์์ผ๋ฉด ์ฌ์ฉ์๋ฅผ ์ธ์ฆ์๋ฒ๋ก Redirectionํ๋ค.
๊ฐ์ ์ ์ผ๋ก Authorize ์์ฒญ์ ๋ฐ์ ์ธ์ฆ์๋ฒ๋ ํด๋น ์ฌ์ฉ์๊ฐ ํ์์ธ์ง ๊ทธ๋ฆฌ๊ณ ์ธ์ฆ์๋ฒ์ ๋ก๊ทธ์ธ ๋์ด์๋์ง๋ฅผ ํ์ธํ๋ค.
์ธ์ฆ์ ๊ฑฐ์ณค์ผ๋ฉด ์ฌ์ฉ์๊ฐ ์ต์ด์ ์์ฒญ์ ๋ํ ๊ถํ์ด ์๋์ง๋ฅผ ํ์ธํ๋ค. ์ด๋ฌํ ๊ณผ์ ์ Grant๋ผ๊ณ ํ๋๋ฐ ๋์ฒด์ ์ผ๋ก ์ธ์ฆ์๋ฒ๋ ์ฌ์ฉ์์ ์์ง๋ฅผ ํ์ธํ๋ Grant์ฒ๋ฆฌ๋ฅผ ํ๊ฒ ๋๊ณ , ๊ฐ Application์ ๋ค์ ๊ถํ์ ๊ด๋ฆฌ ํ ์๋ ์๋ค. ์ด ๊ณผ์ ์์ ์ฌ์ฉ์์ Grant๊ฐ ํ์ธ์ด ๋์ง์์ผ๋ฉด ๋ค์ ์ฌ์ฉ์์๊ฒ Grant์์ฒญ์ ๋ณด๋ธ๋ค.
Grant๋?
Grant๋ ์ธ๊ฐ์๋ ๋ค๋ฅธ ๊ฐ๋ ์ด๋ค. ์ธ๊ฐ๋ ์๋น์ค ์ ๊ณต์ ์ ์ฅ์์ ์ฌ์ฉ์์ ๊ถํ์ ๋ณด๋ ๊ฒ์ด์ง๋ง, Grant๋ ์ฌ์ฉ์๊ฐ ์์ ์ ์ธ์ฆ์ ๋ณด(๋ณดํต ๊ฐ์ธ์ ๋ณด์ ํด๋นํ๋ ์ด๋ฆ, ์ด๋ฉ์ผ ๋ฑ)๋ฅผ Application์ ๋๊ธธ์ง ๋ง์ง ๊ฒฐ์ ํ๋ ๊ณผ์ ์ด๋ค.
์ฌ์ฉ์๊ฐ Grant์์ฒญ์ ๋ฐ๊ฒ๋๋ฉด ์ฌ์ฉ์๋ ํด๋น ์ธ์ฆ์ ๋ณด์ ๋ํ ํ๊ฐ๋ฅผ ๋ด๋ ค์ค๋ค. ํด๋น ์์ฒญ์ ํตํด ๋ค์ ์ธ์ฆ์๋ฒ์ ์ธ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๋ค.
์ธ์ฆ์๋ฒ์์ ์ธ์ฆ๊ณผ ์ธ๊ฐ์ ๋ํ ๊ณผ์ ์ด ๋ชจ๋ ์๋ฃ๋๋ฉด Application์๊ฒ ์ธ๊ฐ์ฝ๋๋ฅผ ์ ๋ฌํด์ค๋ค. ์ธ์ฆ์๋ฒ๋ ํด๋น ์ธ๊ฐ์ฝ๋๋ฅผ ์์ ์ ์ ์ฅ์์ ์ ์ฅ์ ํด๋๋ค. ํด๋น ์ฝ๋๋ ๋ณด์์ ์ํด ๋งค์ฐ ์งง์ ๊ธฐ๊ฐ๋์๋ง ์ ํจํ๋ค.
์ธ๊ฐ ์ฝ๋๋ ์งง์ ์๊ฐ ์ ์ง๋๊ธฐ ๋๋ฌธ์ ์ด์ Application์ ํด๋น ์ฝ๋๋ฅผ Request Token์ผ๋ก ์ฌ์ฉํ์ฌ ์ธ์ฆ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ฒ๋๋ค.
ํด๋น Request Token์ ๋ฐ์ ์ธ์ฆ์๋ฒ๋ ์์ ์ ์ ์ฅ์์ ์ ์ฅํ ์ฝ๋(7๋ฒ ๊ณผ์ )๊ณผ ์ผ์นํ์ง๋ฅผ ํ์ธํ๊ณ ๊ธด ์ ํจ๊ธฐ๊ฐ์ ๊ฐ์ง๊ณ ์ค์ ๋ฆฌ์์ค ์ ๊ทผ์ ์ฌ์ฉํ๊ฒ ๋ Access Token์ Application์๊ฒ ์ ๋ฌํ๋ค.
์ด์ Application์ Access Token์ ํตํด ์ ๋ฌด๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค. ํด๋น Access Token์ ํตํด ๋ฆฌ์์ค ์๋ฒ(์ธ์ฆ์๋ฒ์๋ ๋ค๋ฆ)์ ์์ฒญ์ ํ๊ฒ๋๋ค. ํ์ง๋ง ์ด ๊ณผ์ ์์๋ ๋ฆฌ์์ค ์๋ฒ๋ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ด ์๋ ์ธ์ฆ์๋ฒ์ ์ฐ๊ฒฐํ์ฌ ํด๋น ํ ํฐ์ด ์ ํจํ์ง ํ์ธ์ ๊ฑฐ์น๊ฒ๋๋ค. ํด๋น ํ ํฐ์ด ์ ํจํ๋ค๋ฉด ์ฌ์ฉ์๋ ๋๋์ด ์์ฒญํ ์ ๋ณด๋ฅผ ๋ฐ์ ์ ์๋ค.
# ๋ฌธ์ ์
๊ธฐ์กด API Key๋ฐฉ์์ ๋นํด ์ข ๋ ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค. ๋ฌผ๋ก ๋ง์ ๋ถ๋ถ์ด ๊ฐ์ ๋์๋ค.
ํ์ง๋ง ํต์ ์ ์ฌ์ฉํ๋ Token์ ๋ฌด์๋ฏธํ ๋ฌธ์์ด์ ๊ฐ์ง๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ํด์ง ๊ท์น์์ด ๋ฐํ๋๊ธฐ ๋๋ฌธ์ ์ฆ๋ช ํ์ธ ํ์ํ๋ค.
๊ทธ๋ ๊ธฐ์ ์ธ์ฆ์๋ฒ์ ์ด๋ค ์์ด๋ DBMS ์ ๊ทผ์ด๋ ๋ค๋ฅธ API๋ฅผ ํ์ฉํ์ฌ ์ ๊ทผํ๋ ๋ฑ์ ์ ํจ์ฑ ํ์ธ ์์ ์ด ํ์ํ๋ค๋ ๊ณต์ฆ ์ฌ๋ถ ๋ฌธ์ ๊ฐ ์๋ค. ์ด๋ฌํ ๊ณต์ฆ์ฌ๋ถ ๋ฌธ์ ๋ฟ๋ง ์๋๋ผ ์ ํจ๊ธฐ๊ฐ ๋ฌธ์ ๋ ์๋ค.
# JWT
JWT๋ JSON Web Token์ ์ค์๋ง๋ก ์ธ์ฆ ํ๋ฆ์ ๊ท์ฝ์ด ์๋ Token ์์ฑ์ ๋ํ ๊ท์ฝ์ด๋ค. ๊ธฐ๋ณธ์ ์ธ Access Token์ ์๋ฏธ๊ฐ ์๋ ๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ ธ ์์ด Token์ ์ง์๋ ์ ํจ์ฑ์ ๋งค๋ฒ ํ์ธํด์ผ ํ๋ ๊ฒ์์ ๋ฐํ์ฌ, JWT๋ ์ธ์ฆ์ฌ๋ถ ํ์ธ์ ์ํ ๊ฐ, ์ ํจ์ฑ ๊ฒ์ฆ์ ์ํ ๊ฐ ๊ทธ๋ฆฌ๊ณ ์ธ์ฆ ์ ๋ณด ์์ฒด๋ฅผ ๋ด๊ณ ์๊ธฐ ๋๋ฌธ์ ์ธ์ฆ์๋ฒ์ ๋ฌป์ง ์๊ณ ๋ ์ฌ์ฉํ ์ ์๋ค.
ํ ํฐ์ ๋ํ ์์ธํ ๋ด์ฉ๊ณผ ์ธ์ฆ๋ฐฉ์์ JWT๋ฌธ์ (opens new window)๋ฅผ ์ฐธ์กฐํ์.
# ๋ฌธ์ ์
์๋ฒ์ ์ง์ ์ฐ๊ฒฐํ์ฌ ์ธ์ฆ์ ํ์ธํ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ์๊ธฐ๋ ์ฅ์ ๋ค์ด ๋ง๋ค. ํ์ง๋ง ํ ํฐ ์์ฒด๊ฐ ์ธ์ฆ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ๋๋ฌธ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ ์ธ์ฆ์๋ฒ์ ๋ค์ ์ ์ํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.