๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[PROJECT] ๋‚ด์ผ์˜ ์ง‘

#2. ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ฐœ๋…์žก๊ธฐ

#2-0 ๋“ค์–ด๊ฐ€๋Š” ๋ง


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

 


#2-1 JWT (JSON Web Token) 


JWT๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ HTTP ๋ฆฌํ€˜์ŠคํŠธ ํ—ค๋”์— JSON ํ† ํฐ์„ ๋„ฃ์€ ํ›„ ์„œ๋ฒ„๋Š” ๋ณ„๋„์˜ ์ธ์ฆ ๊ณผ์ •์—†์ด ํ—ค๋”์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” JWT ์ •๋ณด๋ฅผ ํ†ตํ•ด ์ธ์ฆ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ธ์ฆ ์ ˆ์ฐจ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

1) ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ID์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณด๋‚ธ๋‹ค.
2) ์„œ๋ฒ„๊ฐ€ ID์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ฒ€์ฆํ•˜๊ณ  Access Token๊ณผ Refresh Token, Access Token์˜ ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.
3) ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ˜ํ™˜๋ฐ›์€ Access Token์„ ๋งค API ํ˜ธ์ถœ๋งˆ๋‹ค ํ—ค๋”์— ๋ถ™์—ฌ์„œ ์ „์†กํ•œ๋‹ค.
4) ์„œ๋ฒ„๋Š” API ํ˜ธ์ถœ ์‹œ Access Token์„ ํ™•์ธํ•˜๊ณ  ์œ ํšจํ•œ์ง€ ์ฒดํฌ ํ›„ API๋ฅผ ๋™์ž‘์‹œํ‚จ๋‹ค.
5) ํด๋ผ์ด์–ธํŠธ๋Š” Access Token์˜ ๋งŒ๋ฃŒ์‹œ๊ฐ„์ด ์ง€๋‚˜๊ฑฐ๋‚˜ 30์ดˆ ๋ฏธ๋งŒ์œผ๋กœ ๋‚จ์œผ๋ฉด, ์„œ๋ฒ„์— Refresh Token์„ ๋ณด๋‚ด์–ด ์ƒˆ๋กœ์šด ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ์š”์ฒญํ•œ๋‹ค.

6) ์„œ๋ฒ„๋Š” ํ™•์ธ ํ›„ ์ƒˆ๋กœ์šด Access Token ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค. 

7) ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ˜ํ™˜๋ฐ›์€ Access Token๊ณผ ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ์ €์žฅํ•˜์—ฌ ๋‹ค์Œ API ํ˜ธ์ถœ์— ์‚ฌ์šฉํ•œ๋‹ค.

 


#2-2 ๋งˆ๋ฌด๋ฆฌ  

์ผ๋‹จ ํ† ํฐ๋ฐฉ์‹ ๊ฐœ๋…์€ ์ดํ•ด๊ฐ€ ๋˜์—ˆ๋‹ค. ์‹ค์ œ ์ฝ”๋“œ๋กœ๋„ ์ž˜ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„์ง€๊ฐ€ ๊ฑฑ์ •์ธ๋ฐ ์ผ๋‹จ ๋นจ๋ฆฌ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ์„ ์™„์„ฑํ•ด์•ผ ๋˜๊ฒ ๋‹ค. ๊ฐˆ ๊ธธ์ด ๋ฉ€๋‹ค.