# ์ธ์ฆ ๋ฐฉ์‹



# API Key


์„œ๋น„์Šค๋“ค์ด ๊ฑฐ๋Œ€ํ•ด์ง์— ๋”ฐ๋ผ ๊ธฐ๋Šฅ๋“ค์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์˜€๋Š”๋ฐ ์ด๋ฅผ์œ„ํ•ด Module์ด๋‚˜ Application๋“ค๊ฐ„์˜ ๊ณต์œ ์™€ ๋…๋ฆฝ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ๋“ค์ด ๋“ฑ์žฅํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

๊ทธ ์ค‘ ์ œ์ผ ๋จผ์ € ๋“ฑ์žฅํ•˜๊ณ  ๊ฐ€์žฅ ๋„๋ฆฌ ๋ณดํŽธ์ ์œผ๋กœ ์“ฐ์ด๋Š” ๊ธฐ์ˆ ์ด API Key์ด๋‹ค.


# ๋™์ž‘๋ฐฉ์‹


  1. ์‚ฌ์šฉ์ž๋Š” API Key๋ฅผ ๋ฐœ๊ธ‰๋ฐ›๋Š”๋‹ค. (๋ฐœ๊ธ‰ ๋ฐ›๋Š” ๊ณผ์ •์€ ์„œ๋น„์Šค๋“ค๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ๊ณต๊ณต๊ธฐ๊ด€ API๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ์‹ ์ฒญ์— ํ•„์š”ํ•œ ์–‘์‹์„ ์ œ์ถœํ•˜๋ฉด ๊ด€๋ฆฌ์ž๊ฐ€ ํ™•์ธ ํ›„ Key๋ฅผ ๋ฐœ๊ธ‰ํ•ด์ค€๋‹ค.

  2. ํ•ด๋‹น API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Key์™€ ํ•จ๊ป˜ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

  3. Application์€ ์š”์ฒญ์ด ์˜ค๋ฉด Key๋ฅผ ํ†ตํ•ด User์ •๋ณด๋ฅผ ํ™•์ธํ•˜์—ฌ ๋ˆ„๊ตฌ์˜ Key์ธ์ง€ ๊ถŒํ•œ์ด ๋ฌด์—‡์ธ์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค.

  4. ํ•ด๋‹น Key์˜ ์ธ์ฆ๊ณผ ์ธ๊ฐ€์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


# ๋ฌธ์ œ์ 


API Key๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ง์ ‘ ๋ฐœ๊ธ‰ํ•˜๊ณ  ํ•ด๋‹น Key๋ฅผ ํ†ตํ•ด ํ†ต์‹ ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ†ต์‹ ๊ตฌ๊ฐ„์ด ์•”ํ˜ธํ™”๊ฐ€ ์ž˜ ๋˜์–ด ์žˆ๋”๋ผ๋„ Key๊ฐ€ ์œ ์ถœ๋œ ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•˜๊ธฐ ํž˜๋“ค๋‹ค.

๊ทธ๋ ‡๊ธฐ๋•Œ๋ฌธ์— ์ฃผ๊ธฐ์ ์œผ๋กœ Key๋ฅผ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒˆ๊ฑฐ๋กญ๊ณ  ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์ƒํ™ฉ(ํ•œ์ชฝ๋งŒ ์—…๋ฐ์ดํŠธ๊ฐ€ ์‹คํ–‰๋˜์–ด ์„œ๋กœ ๋งค์น˜๊ฐ€ ์•ˆ๋œ๋‹ค๋Š” ๋“ฑ)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ, Keyํ•œ๊ฐ€์ง€๋กœ ์ •๋ณด๋ฅผ ์ œ์–ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฌ์šดํŽธ์ด๋‹ค.


# OAuth2


API Key์˜ ๋‹จ์ ์„ ๋ฉ”๊พธ๊ธฐ ์œ„ํ•ด ๋“ฑ์ž‘ํ•œ ๋ฐฉ์‹์ด๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ํŽ˜์ด์Šค๋ถ, ํŠธ์œ„ํ„ฐ ๋“ฑ SNS ๋กœ๊ทธ์ธ๊ธฐ๋Šฅ์—์„œ ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์š”์ฒญํ•˜๊ณ  ์š”์ฒญ๋ฐ›๋Š” ๋‹จ์ˆœํ•œ ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ ์ธ์ฆํ•˜๋Š” ๋ถ€๋ถ„์ด ์ถ”๊ฐ€๋˜์–ด ๋…๋ฆฝ์ ์œผ๋กœ ์„ธ๋ถ„ํ™”๊ฐ€ ์ด๋ฃจ์–ด์กŒ๋‹ค.


# ๋™์ž‘๋ฐฉ์‹


  1. ์‚ฌ์šฉ์ž๊ฐ€ Application์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. (๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ, ํŠน์ • ์ •๋ณด ์—ด๋žŒ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ณณ์—์„œ ์“ฐ์ผ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” ๋กœ๊ทธ์ธ์œผ๋กœ ํ†ต์ผํ•˜์—ฌ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.)

  2. Application์€ ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์ด ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค. ๋กœ๊ทธ์ธ์ด ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

  3. Application์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆ์„œ๋ฒ„๋กœ Redirectionํ•œ๋‹ค.

  4. ๊ฐ„์ ‘์ ์œผ๋กœ Authorize ์š”์ฒญ์„ ๋ฐ›์€ ์ธ์ฆ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ํšŒ์›์ธ์ง€ ๊ทธ๋ฆฌ๊ณ  ์ธ์ฆ์„œ๋ฒ„์— ๋กœ๊ทธ์ธ ๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค.

  5. ์ธ์ฆ์„ ๊ฑฐ์ณค์œผ๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ตœ์ดˆ์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ Grant๋ผ๊ณ  ํ•˜๋Š”๋ฐ ๋Œ€์ฒด์ ์œผ๋กœ ์ธ์ฆ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž์˜ ์˜์ง€๋ฅผ ํ™•์ธํ•˜๋Š” Grant์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋˜๊ณ , ๊ฐ Application์€ ๋‹ค์‹œ ๊ถŒํ•œ์„ ๊ด€๋ฆฌ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์‚ฌ์šฉ์ž์˜ Grant๊ฐ€ ํ™•์ธ์ด ๋˜์ง€์•Š์œผ๋ฉด ๋‹ค์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ Grant์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

Grant๋ž€?

Grant๋Š” ์ธ๊ฐ€์™€๋Š” ๋‹ค๋ฅธ ๊ฐœ๋…์ด๋‹ค. ์ธ๊ฐ€๋Š” ์„œ๋น„์Šค ์ œ๊ณต์ž ์ž…์žฅ์—์„œ ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์„ ๋ณด๋Š” ๊ฒƒ์ด์ง€๋งŒ, Grant๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ์ธ์ฆ์ •๋ณด(๋ณดํ†ต ๊ฐœ์ธ์ •๋ณด์— ํ•ด๋‹นํ•˜๋Š” ์ด๋ฆ„, ์ด๋ฉ”์ผ ๋“ฑ)๋ฅผ Application์— ๋„˜๊ธธ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

  1. ์‚ฌ์šฉ์ž๊ฐ€ Grant์š”์ฒญ์„ ๋ฐ›๊ฒŒ๋˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ํ•ด๋‹น ์ธ์ฆ์ •๋ณด์— ๋Œ€ํ•œ ํ—ˆ๊ฐ€๋ฅผ ๋‚ด๋ ค์ค€๋‹ค. ํ•ด๋‹น ์š”์ฒญ์„ ํ†ตํ•ด ๋‹ค์‹œ ์ธ์ฆ์„œ๋ฒ„์— ์ธ๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋œ๋‹ค.

  2. ์ธ์ฆ์„œ๋ฒ„์—์„œ ์ธ์ฆ๊ณผ ์ธ๊ฐ€์— ๋Œ€ํ•œ ๊ณผ์ •์ด ๋ชจ๋‘ ์™„๋ฃŒ๋˜๋ฉด Application์—๊ฒŒ ์ธ๊ฐ€์ฝ”๋“œ๋ฅผ ์ „๋‹ฌํ•ด์ค€๋‹ค. ์ธ์ฆ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์ธ๊ฐ€์ฝ”๋“œ๋ฅผ ์ž์‹ ์˜ ์ €์žฅ์†Œ์— ์ €์žฅ์„ ํ•ด๋‘”๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๋ณด์•ˆ์„ ์œ„ํ•ด ๋งค์šฐ ์งง์€ ๊ธฐ๊ฐ„๋™์•ˆ๋งŒ ์œ ํšจํ•˜๋‹ค.

  3. ์ธ๊ฐ€ ์ฝ”๋“œ๋Š” ์งง์€ ์‹œ๊ฐ„ ์œ ์ง€๋˜๊ธฐ ๋–„๋ฌธ์— ์ด์ œ Application์€ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ Request Token์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ๋œ๋‹ค.

  4. ํ•ด๋‹น Request Token์„ ๋ฐ›์€ ์ธ์ฆ์„œ๋ฒ„๋Š” ์ž์‹ ์˜ ์ €์žฅ์†Œ์— ์ €์žฅํ•œ ์ฝ”๋“œ(7๋ฒˆ ๊ณผ์ •)๊ณผ ์ผ์น˜ํ•˜์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ธด ์œ ํšจ๊ธฐ๊ฐ„์„ ๊ฐ€์ง€๊ณ  ์‹ค์ œ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์— ์‚ฌ์šฉํ•˜๊ฒŒ ๋  Access Token์„ Application์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

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



# ๋ฌธ์ œ์ 


๊ธฐ์กด API Key๋ฐฉ์‹์— ๋น„ํ•ด ์ข€ ๋” ๋ณต์žกํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค. ๋ฌผ๋ก  ๋งŽ์€ ๋ถ€๋ถ„์ด ๊ฐœ์„ ๋˜์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํ†ต์‹ ์— ์‚ฌ์šฉํ•˜๋Š” Token์€ ๋ฌด์˜๋ฏธํ•œ ๋ฌธ์ž์—ด์„ ๊ฐ€์ง€๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •ํ•ด์ง„ ๊ทœ์น™์—†์ด ๋ฐœํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฆ๋ช…ํ™•์ธ ํ•„์š”ํ•˜๋‹ค.

๊ทธ๋ ‡๊ธฐ์— ์ธ์ฆ์„œ๋ฒ„์— ์–ด๋–ค ์‹์ด๋“  DBMS ์ ‘๊ทผ์ด๋“  ๋‹ค๋ฅธ API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ ‘๊ทผํ•˜๋Š” ๋“ฑ์˜ ์œ ํšจ์„ฑ ํ™•์ธ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ณต์ฆ ์—ฌ๋ถ€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณต์ฆ์—ฌ๋ถ€ ๋ฌธ์ œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์œ ํšจ๊ธฐ๊ฐ„ ๋ฌธ์ œ๋„ ์žˆ๋‹ค.


# JWT


JWT๋Š” JSON Web Token์˜ ์ค„์ž„๋ง๋กœ ์ธ์ฆ ํ๋ฆ„์˜ ๊ทœ์•ฝ์ด ์•„๋‹Œ Token ์ž‘์„ฑ์— ๋Œ€ํ•œ ๊ทœ์•ฝ์ด๋‹ค. ๊ธฐ๋ณธ์ ์ธ Access Token์€ ์˜๋ฏธ๊ฐ€ ์—†๋Š” ๋ฌธ์ž์—ด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์–ด Token์˜ ์ง„์œ„๋‚˜ ์œ ํšจ์„ฑ์„ ๋งค๋ฒˆ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ž„์— ๋ฐ˜ํ•˜์—ฌ, JWT๋Š” ์ธ์ฆ์—ฌ๋ถ€ ํ™•์ธ์„ ์œ„ํ•œ ๊ฐ’, ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ์œ„ํ•œ ๊ฐ’ ๊ทธ๋ฆฌ๊ณ  ์ธ์ฆ ์ •๋ณด ์ž์ฒด๋ฅผ ๋‹ด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ฆ์„œ๋ฒ„์— ๋ฌป์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ† ํฐ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ๊ณผ ์ธ์ฆ๋ฐฉ์‹์€ JWT๋ฌธ์„œ (opens new window)๋ฅผ ์ฐธ์กฐํ•˜์ž.


# ๋ฌธ์ œ์ 


์„œ๋ฒ„์— ์ง์ ‘ ์—ฐ๊ฒฐํ•˜์—ฌ ์ธ์ฆ์„ ํ•™์ธํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ธฐ๋Š” ์žฅ์ ๋“ค์ด ๋งŽ๋‹ค. ํ•˜์ง€๋งŒ ํ† ํฐ ์ž์ฒด๊ฐ€ ์ธ์ฆ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ์ธ์ฆ์„œ๋ฒ„์— ๋‹ค์‹œ ์ ‘์†ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.



# [์ฐธ๊ณ  ์ž๋ฃŒ]

์ตœ์ข… ์ˆ˜์ • : 12/17/2022, 7:23:59 AM