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

๊ฐœ๋ฐœ

session vs jwt ๋กœ๊ทธ์ธ

๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ธ์…˜(Session)๋ฐฉ์‹๊ณผ ํ† ํฐ(JWT)๋ฐฉ์‹์ด ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ„๋‹จํžˆ ์ด ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€๋ฅผ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด๋ณด๊ณ , ๋‚ด๊ฐ€ JWT์„ ์ด์šฉํ•ด ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•œ ๋ฐฉ์‹๋„ ๊ธฐ๋กํ•ด๋ณด๋ ค ํ•œ๋‹ค.


#. http stateless

๋จผ์ € http๋Š” connectionless(๋น„์—ฐ๊ฒฐ์„ฑ), stateless(๋ฌด์ƒํƒœ) ๋ผ๋Š” ๋‘๊ฐ€์ง€ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋น„์—ฐ๊ฒฐ์„ฑ์ด๋ž€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด์–ด ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์„ ๋งˆ์นœ ํ›„ ์—ฐ๊ฒฐ์„ ๋Š์–ด๋ฒ„๋ฆฌ๋Š” ํŠน์ง•์„ ๋งํ•œ๋‹ค. ์ฆ‰ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ํ•œ๋ฒˆ์˜ ํ†ต์‹ ์ด ์ด๋ฃจ์–ด์ง„ ํ›„ ๊ทธ ์—ฐ๊ฒฐ์„ฑ์ด ๋Š์–ด์ง€๋Š” ๊ฒƒ.

๊ทธ๋ฆฌ๊ณ  ๋ฌด์ƒํƒœ๋ž€ ๋น„์—ฐ๊ฒฐ์„ฑ ํŠน์ง•์œผ๋กœ ์ธํ•ด ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์‹๋ณ„ํ•  ์ˆ˜ ์—†๋Š” ํŠน์ง•์„ ๋งํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ํ•œ๋ฒˆ์˜ ํ†ต์‹  ํ›„ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด์˜ ๋™์ผํ•œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์™€ ๋‹ค์‹œ ํ†ต์‹ ์„ ํ•˜๊ฒŒ ๋˜๋”๋ผ๋„ ์„œ๋ฒ„๋Š” ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด์ „์— ํ†ต์‹ ์„ ํ–ˆ๋˜ ํด๋ผ์ด์–ธํŠธ์ธ์ง€ ์ „ํ˜€ ์•Œ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

 

๊ทธ๋ž˜์„œ ์ด๋Ÿฌํ•œ http์˜ ํŠน์„ฑ ๋•Œ๋ฌธ์— ์›น์‚ฌ์ดํŠธ์—์„œ ๋กœ๊ทธ์ธ ํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋ ค๋ฉด ์„ธ์…˜์ด๋‚˜ ํ† ํฐ์„ ์ด์šฉํ•ด ๋กœ๊ทธ์ธํ•œ '์ƒํƒœ'๋ฅผ ๊ธฐ์–ตํ•ด์•ผ ํ•œ๋‹ค. ์ฆ‰ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

 

 

#. session ๊ณผ jwt

session(์ดํ•˜ ์„ธ์…˜)์€ ์„œ๋ฒ„๋‹จ์—์„œ ์‹œ์šฉ์ž ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์„ธ์…˜ ID๋ฅผ ๋ถ€์—ฌํ•ด ์œ ํšจ์‹œ๊ฐ„ ๋งŒ๋ฃŒ ์‹œ๊นŒ์ง€ ๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ธ์ฆ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋‹จ์—์„œ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ธ ์ฟ ํ‚ค์— ๋น„ํ•ด ์ •๋ณด๋ฅผ ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌํ•จ์œผ๋กœ ๋ณด์•ˆ ์ธก๋ฉด์—์„  ๋” ์ข‹๋‹ค. ํ•˜์ง€๋งŒ ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ๋งŒํผ ๋™์‹œ ์ ‘์†ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์ˆ˜๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ ์„œ๋ฒ„ ๊ณผ๋ถ€ํ•˜์˜์›์ธ์ด ๋˜๊ธฐ๋„ ํ•œ๋‹ค. 

 

๋˜๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋ก  jwt(json web token) ๋ฐฉ์‹์ด ์žˆ๋‹ค. jwt๋Š” ์„œ๋ฒ„๊ฐ€ ์•”ํ˜ธํ™”๋œ ์ •๋ณด๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ฃผ๊ณ , ํด๋ผ์ด์–ธํŠธ์—์„œ ์ด๋ฅผ ์ €์žฅํ•ด๋‘์—ˆ๋‹ค๊ฐ€ ์„œ๋ฒ„์— ํ™•์ธ ์š”์ฒญ ์‹œ ์„œ๋ฒ„๊ฐ€ ๋ณตํ˜ธํ™”ํ•˜์—ฌ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ ์ •๋ณด๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅํ•˜์ง€๋งŒ ๋ณด์•ˆ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ฟ ํ‚ค์™€๋Š” ๋˜ ๋‹ค๋ฅด๋‹ค. 

 

๊ทธ๋Ÿฐ๋ฐ ๋‚ด๊ฐ€ jwt์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์˜๋ฌธ์ด ๋“ค์—ˆ๋˜ ์ ์€ ๊ฒฐ๊ตญ refresh ํ† ํฐ์„ ์„œ๋ฒ„์—์„œ๋„ DB์— ์ €์žฅํ•ด๋‘์–ด์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ๋Ÿผ session ๋ฐฉ์‹์ด ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์ฐจ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ๊ณผ ๋˜‘๊ฐ™์ง€ ์•Š๋‚˜? ํ•˜๋Š” ์ ์ด์˜€๋‹ค. 

 

๊ทธ๋ž˜์„œ ์กฐ๊ธˆ ๋” ์ฐพ์•„๋ณด๋‹ˆ ์„œ๋ฒ„์—์„œ session๊ณผ DB์— ์ €์žฅํ•˜๋Š”๋ฐ ์ฐจ์ด์ ์ด ์กด์žฌํ•˜๋Š”๊ฑฐ ๊ฐ™๋‹ค. ์ฒซ๋ฒˆ์งธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅ/๊ด€๋ฆฌํ•˜๋Š” '๋””์Šคํฌ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค'๊ฐ€ ์žˆ๊ณ , ๋‘๋ฒˆ์งธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ๊ฐ€ ์•„๋‹Œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ/๊ด€๋ฆฌํ•˜๋Š” '์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค'๊ฐ€ ์žˆ๋‹ค.  

 

๋””์Šคํฌ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ง€์†์„ฑ ๋ฐ ์•ˆ์ •์„ฑ์ด ๋ณด์žฅ๋˜๊ณ  ์‰ฝ๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•ด ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์šฉ์ดํ•˜๋‹ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋””์Šคํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ์‹œ๊ฐ„, ๋””์Šคํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ์‹œ๊ฐ„ ๋“ฑ์˜ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ MySQL์ด๋‚˜ Oracle์ด ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•œ๋‹ค.

 

์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์–ดํ„ฐ ์ ‘๊ทผ ์†๋„๊ฐ€ ๋น ๋ฅด์ง€๋งŒ ๋””์Šคํฌ์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ€๊ฒฉ์ด ๋น„์‹ธ๋ฉฐ, ์ฃผ ์ €์žฅ์†Œ(RAM)์ธ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํœ˜๋ฐœ์„ฑ์ด๋ž€ ํŠน์ง•์ด ์žˆ์–ด ์„œ๋ฒ„ ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋ฐ์ดํ„ฐ ์†Œ์‹ค ์œ„ํ—˜ํžˆ ์กด์žฌํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์ •๋ณด์˜ ๊ฒฝ์šฐ ์˜์›ํžˆ ์ €์žฅ๋˜์–ด์•ผ ํ•˜๋Š” ์ •๋ณด๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— session ID๋ฅผ ์ €์žฅํ•  ๋• ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

 

๋”ฐ๋ผ์„œ ๋‚ด๊ฐ€ jwt๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ํ† ํฐ์„ MySQL์„ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ๊ณผ session์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ๊ฑฐ ๊ฐ™๋‹ค. ์‚ฌ์‹ค 100% ์ดํ•ด๋˜์ง„ ์•Š์•„์„œ ์ด๋ถ€๋ถ„์€ ์ถ”๊ฐ€์ ์œผ๋กœ ๋” ๊ณต๋ถ€๋ฅผ ํ•ด์•ผ ํ•  ๊ฑฐ ๊ฐ™๋‹ค ๐Ÿค”


#. jwt ๋กœ๊ทธ์ธ ๊ตฌํ˜„

๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ๋กœ๊ทธ์ธ ๊ณผ์ •์€ ์ด๋ ‡๋‹ค. ๋จผ์ € ํด๋ผ์ด์–ธํŠธ์—์„œ ์ž…๋ ฅ๋ฐ›์€ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž DB๋ฅผ ์กฐํšŒํ•˜์—ฌ ์ •๋ณด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„ ์žˆ์œผ๋ฉด access token๊ณผ refresh token์„ ๋งŒ๋“ค์–ด ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•œ๋‹ค. ์ด๋•Œ access token์€ ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ์งง๊ฒŒ ์„ค์ •ํ•˜์—ฌ ๋ณด๋‚ด๊ณ , refresh token์€ DB์— ์ €์žฅํ•ด๋‘”๋‹ค.

 

ํด๋ผ์ด์–ธํŠธ๋Š” ๋‘๊ฐ€์ง€ ํ† ํฐ์„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์œผ๋ฉด access token์€ http header์— ์ €์žฅํ•˜๊ณ , refresh token์€ ์ฟ ํ‚ค์— ์ €์žฅํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋กœ๊ทธ์ธ ์ธ์ฆ์ด ํ•„์š”ํ•œ mypage ํŽ˜์ด์ง€์— ์ ‘๊ทผ ์‹œ ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ access token์„ ํ™•์ธํ•œ ํ›„ ์‘๋‹ตํ•ด์ฃผ๋„๋ก ํ–ˆ๋‹ค.

 

๋งŒ์•ฝ access token์˜ ๋งŒ๋ฃŒ์‹œ๊ฐ„์ด ์ง€๋‚ฌ์œผ๋ฉด ํด๋ผ์ด์–ธํŠธ์— refresh token์„ ์š”์ฒญํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋Š” ์ฟ ํ‚ค์— ์ €์žฅ๋œ refresh token ๊ฐ’์„ ๋‹ค์‹œ ์ „๋‹ฌํ•œ๋‹ค. ๊ทธ๋Ÿผ ์„œ๋ฒ„๋Š” DB์—์„œ refresh token์„ ์ฐพ์•„์™€ ์„œ๋กœ ๋™์ผํ•œ์ง€ ํ™•์ธ ํ›„ ์ƒˆ๋กœ์ด access token๊ณผ refresh token์„ ๋งŒ๋“ค์–ด ์ค€๋‹ค.