๐Ÿ™‹๐Ÿปโ€โ™€๏ธ ์„ธ์…˜, ์ฟ ํ‚ค, ํ† ํฐ

์ตœํ˜ธ๋นˆยท2024๋…„ 9์›” 5์ผ
0
post-thumbnail

๐Ÿช ์ฟ ํ‚ค๋ž€?

ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ €์žฅ๋˜๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ์ด๋‹ค. ์ฃผ๋กœ ํ…์ŠคํŠธ ํ˜•์‹์œผ๋กœ ์ €์žฅ๋˜๋ฉฐ, ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ, ์ฆ‰ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์–ธ์ œ๋“ ์ง€ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์ˆ˜์ •ํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์•„๋†“๋Š” ๊ฒƒ์€ ๋ถ€์ ์ ˆํ•˜๋‹ค. ์ค‘์š”ํ•œ ์ •๋ณด๋Š” ์„ธ์…˜์ด ๋” ์ ํ•ฉํ•˜๋‹ค.

์ด ์ฟ ํ‚ค๋ฅผ ์ด์šฉํ•ด์„œ ์„œ๋ฒ„๋Š” ๋ธŒ๋ผ์šฐ์ €์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์— ์ฟ ํ‚ค๊ฐ€ ์ €์žฅ๋˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ๋ฐฉ๋ฌธํ•  ๋•Œ๋งˆ๋‹ค ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ์ฟ ํ‚ค๋„ ํ•จ๊ป˜ Request๋กœ ๋ณด๋‚ผ ๊ฒƒ์ด๋‹ค.

์ฟ ํ‚ค๋Š” ์ธ์ฆ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์–ธ์–ด ์„ค์ •์„ ๋ฐ”๊พธ๋ฉด ์„œ๋ฒ„๋Š” ์ฟ ํ‚ค๋ฅผ ์ฃผ๊ณ  ๋ฐ”๋€ ์–ธ์–ด ์„ค์ •์„ ์ €์žฅํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ๋‹ค์Œ์— ํ•ด๋‹น ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋ฉด ์ฟ ํ‚ค๋Š” Request์™€ ํ•จ๊ป˜ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์ง€๊ณ  ์„œ๋ฒ„๋Š” ์ฟ ํ‚ค๊ฐ€ ๊ธฐ์–ตํ•ด๋‘” ์–ธ์–ด ์„ค์ •์˜ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์ค‘์š”ํ•œ ์ ์€, ์ฟ ํ‚ค๋Š” ๋„๋ฉ”์ธ์— ๋”ฐ๋ผ ์ œํ•œ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ์œ ํŠœ๋ธŒ๊ฐ€ ์ค€ ์ฟ ํ‚ค๋Š”, ์œ ํŠœ๋ธŒ์—๊ฒŒ๋งŒ ๋ณด๋‚ด์ง„๋‹ค.





๐Ÿค” ์„ธ์…˜? ์ฟ ํ‚ค?

์šฐ๋ฆฌ๊ฐ€ ์›น ์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•  ๋•Œ ์“ฐ๋Š” ํ”„๋กœํ† ์ฝœ, HTTP๋Š” stateless์ด๋‹ค. ์„œ๋ฒ„๋กœ ๊ฐ€๋Š” ๋ชจ๋“  ์š”์ฒญ์€ ๋…๋ฆฝ์ ์œผ๋กœ ๋‹ค๋ฃจ์–ด์ง„๋‹ค๋Š” ๋œป์ด๋‹ค. ์š”์ฒญ๋ผ๋ฆฌ ์—ฐ๊ฒฐ์ด ์—†๊ณ , ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—†๋‹ค! ์š”์ฒญ์ด ๋๋‚˜๋ฉด ์„œ๋ฒ„๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์šฐ๋ฆฌ๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค. ์ด ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ์„ธ์…˜์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, A๋ผ๋Š” ์œ ์ €๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ–ˆ์„ ๋•Œ ์ €์žฅ๋œ ํšŒ์› ์ •๋ณด์™€ ์ผ์น˜ํ•œ๋‹ค๋ฉด ์„œ๋ฒ„๋Š” ์„ธ์…˜ DB์— ์„ธ์…˜ ID(sid)์™€ ํ•จ๊ป˜ ์œ ์ €๋ฅผ ์ €์žฅํ•  ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ์‚ฌ์šฉ์ž๋ณ„๋กœ ๊ณ ์œ ํ•œ ์„ธ์…˜ ID๋Š” ํด๋ผ์ด์–ธํŠธ์— ์ฟ ํ‚ค๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €๋กœ ๋Œ์•„์˜ค๊ณ , ์ €์žฅ๋œ๋‹ค! ์ฆ‰, ์ฟ ํ‚ค๋Š” ์„ธ์…˜ID๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๋งค๊ฐœ์ฒด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๐Ÿค—

๋”ฐ๋ผ์„œ, ๊ฐ™์€ ์›น์‚ฌ์ดํŠธ์˜ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ์„ธ์…˜ID๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฟ ํ‚ค๋ฅผ ์„œ๋ฒ„์—๊ฒŒ ๋ณด๋‚ผ ๊ฒƒ์ด๋‹ค. ์„œ๋ฒ„๋Š” ๋“ค์–ด์˜ค๋Š” ์ฟ ํ‚ค๋ฅผ ๋ณด๊ณ  ์„ธ์…˜ID๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ณ , ํ•ด๋‹น ์„ธ์…˜ID๋ฅผ ๊ฐ€์ง€๊ณ  ์„ธ์…˜ DB๋ฅผ ํ™•์ธํ•  ๊ฒƒ์ด๊ณ  ๊ฑฐ๊ธฐ์„œ ํ•ด๋‹น ์„ธ์…˜ID๋Š” A์œ ์ €๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค! ํ•ด๋‹น ์š”์ฒญ์ด ๋๋‚˜๊ณ  ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ฒŒ ๋˜๋ฉด, ์ด ๊ณผ์ •์ด ๋ฐ˜๋ณต๋˜๊ฒŒ ๋œ๋‹ค!

์ •๋ฆฌ๋ฅผ ํ•ด๋ณด์ž๋ฉด,

๋ธŒ๋ผ์šฐ์ €๋Š” ์˜ค์ง ์„ธ์…˜ID๋งŒ ์žˆ๋Š” ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๊ณ , ์œ ์ €์˜ ์ค‘์š”ํ•œ ์ •๋ณด๋Š” ๋ชจ๋‘ ์„œ๋ฒ„๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. โžก๏ธ ์ธ์ฆ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์„œ๋ฒ„๊ฐ€ ์ €์žฅํ•œ๋‹ค.

ํ•˜์ง€๋งŒ, ์„ธ์…˜์„ ์ด์šฉํ•˜์—ฌ iOS, Android ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด๋„ ์ฟ ํ‚ค๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ฟ ํ‚ค๐Ÿช๋Š” ์˜ค์ง ๋ธŒ๋ผ์šฐ์ €์—๋งŒ ์žˆ์œผ๋‹ˆ๊นŒ!!
์ด๋Ÿฐ ๊ฒฝ์šฐ๋Š” ๋ฐ”๋กœ ํ† ํฐ์„ ์‚ฌ์šฉํ•œ๋‹ค.(์ฟ ํ‚ค๋ž‘ ๋น„์Šทํ•˜๋‹ค.) ํ•ด๋‹น ํ† ํฐ์„ ์„œ๋ฒ„์— ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„๋Š” ์„ธ์…˜ DB์—์„œ ํ•ด๋‹น ํ† ํฐ๊ณผ ์ผ์น˜ํ•˜๋Š” ์œ ์ €๋ฅผ ์ฐพ๋Š”๋‹ค.

์„ธ์…˜์— ๋Œ€ํ•ด์„œ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฒƒ์€, ํ˜„์žฌ ๋กœ๊ทธ์ธํ•œ ์œ ์ €๋“ค์˜ ๋ชจ๋“  ์„ธ์…˜ID๋ฅผ DB(๋ฉ”๋ชจ๋ฆฌ or ๋””์Šคํฌ ๋“ฑ์˜ โ€˜์ €์žฅ์†Œโ€™)์— ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ ๋งˆ๋‹ค, ์„œ๋ฒ„๋Š” ์ฟ ํ‚ค ์† ์„ธ์…˜ID์™€ ์ผ์น˜ํ•˜๋Š” ์œ ์ €๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์„ธ์…˜DB๋ฅผ ๋ชจ๋‘ ์ฐพ์•„์•ผ ํ•œ๋‹ค! ์œ ์ €๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก DB์—๋„ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ, ์„ธ์…˜ DB๋ฅผ ์‹ค์ˆ˜๋กœ ๋ชจ๋‘ ๋‚ ๋ ค๋ฒ„๋ฆฐ๋‹ค๋ฉด? ์‚ฌ์šฉ์ž๋“ค์€ ๋ชจ๋‘ ๋กœ๊ทธ์ธ์„ ๋‹ค์‹œ ํ•ด์•ผํ•œ๋‹ค๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์ƒ๊ฒจ๋‚œ๋‹ค.

๋ฐ”๋กœ ์ด๋•Œ, JWT๊ฐ€ ๋“ฑ์žฅํ•œ๋‹ค. JWT๋Š” ํ† ํฐ ํ˜•์‹์ด๋‹ค. JWT๋กœ ์œ ์ € ์ธ์ฆ์„ ์ฒ˜๋ฆฌํ•˜๋ฉด, ์„ธ์…˜ DB๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ํ•„์š”๊ฐ€ ์—†๊ณ  ์„œ๋ฒ„๊ฐ€ ์œ ์ € ์ธ์ฆ์„ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๐Ÿซขย (์ž ๊น, JWT๊ฐ€ ๋งŒ๋Šฅ์€ ์•„๋‹ˆ๋‹ค!)





๐Ÿช™ JWT

๋กœ๊ทธ์ธ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์„ธ์…˜๊ณผ JWT์˜ ์ฐจ์ด๋ฅผ ์•Œ์•„๋ณด์ž.
๋งŒ์•ฝ ์œ ์ € A๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•˜๋ ค๋ฉด ์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„œ๋ฒ„์— ๋ณด๋‚ผ ๊ฒƒ์ด๋‹ค.(์—ฌ๊ธฐ๊นŒ์ง€ ์„ธ์…˜๊ณผ ๋‹ค๋ฅธ ์ ์ด ์—†๋‹ค.)
ํšŒ์›์ •๋ณด๊ฐ€ ์ผ์น˜ํ•œ๋‹ค๋ฉด, ์„œ๋ฒ„๋Š” DB์— ์œ ์ € ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹ , ์„œ๋ฒ„๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ์œ ์ €์˜ id๋ฅผ ๊ฐ€์ ธ๊ฐ€์„œ ์‚ฌ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์ธ์„ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ํ•ด๋‹น ์‚ฌ์ธ๋œ ์ •๋ณด๋ฅผ String ํ˜•ํƒœ๋กœ ๋ณธ๋‚ด๋‹ค. JWT๋Š” ์ด๋Ÿฐ์‹์œผ๋กœ ์ƒ๊ฒผ๋‹ค. ๋งค์šฐ ๊ธธ๋‹ค. ์ฟ ํ‚ค๋Š” ๊ณต๊ฐ„ ์ œ์•ฝ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ๊ธด ํ˜•ํƒœ๋Š” ๋ถˆ๊ฐ€ํ•˜๋‹ค. ํ•˜์ง€๋งŒ JWT๋Š” ๊ณต๊ฐ„ ์ œ์•ฝ์ด ์—†์–ด์„œ ์—„์ฒญ ๊ธธ์–ด๋„ ๋œ๋‹ค!

์ •๋ฆฌ๋ฅผ ํ•ด๋ณด์ž๋ฉด,

JWT๋Š” ํ† ํฐ์˜ ํ•œ ์ข…๋ฅ˜์ด๋ฉฐ, JSON ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
โžก๏ธ ์ธ์ฆ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์ €์žฅํ•œ๋‹ค.



๊ตฌ์กฐ

์ถœ์ฒ˜ : https://jwt.io/

์™ผ์ชฝ์„ ๋ณด๋ฉด ๋งˆ์นจํ‘œ 2๊ฐœ๋กœ ๋Š์–ด์ ธ์„œ ์ด 3๋ถ€๋ถ„(xxxxx.yyyyy.zzzzz)์œผ๋กœ ๋‚˜๋‰˜์–ด์ง„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด 3๋ถ€๋ถ„์€ ์˜ค๋ฅธ์ชฝ์— ๋ณด์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ header, payload, verify signature๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.


header๋ฅผ Base64๋กœ ๋””์ฝ”๋”ฉ 2๊ฐ€์ง€ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค. ์ด ์ •๋ณด๋Š” Base64Url๋กœ ์ธ์ฝ”๋”ฉ๋œ๋‹ค.

{
  "alg": "HS256",
  "typ": "JWT"
}
  1. ํ† ํฐ์˜ ํƒ€์ž…

    ์–ธ์ œ๋‚˜ JWT๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.

  2. alg

    ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์•ฝ์ž์ด๋‹ค. verify signature๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ์‚ฌ์šฉ๋  ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜(HS256 ๋“ฑ)์ด ์ง€์ •๋œ๋‹ค.



payload

payload๋ฅผ Base64๋กœ ๋””์ฝ”๋”ฉํ•ด๋ณด๋ฉด JSON ํ˜•์‹์œผ๋กœ ์—ฌ๋Ÿฌ ์ •๋ณด๋“ค์ด ๋“ค์–ด์žˆ๋‹ค. ์ด ์ •๋ณด๋„ Base64Url๋กœ ์ธ์ฝ”๋”ฉ๋œ๋‹ค.

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

ํ† ํฐ์— ๋‹ด๊ธด ์ด ์ •๋ณด๋ฅผ claim์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ํ† ํฐ์„ ๋ˆ„๊ฐ€ ๋ˆ„๊ตฌ์—๊ฒŒ ๋ฐœ๊ธ‰ํ–ˆ๋Š”์ง€, ์ด ํ† ํฐ์ด ์–ธ์ œ๊นŒ์ง€ ์œ ํšจํ•œ์ง€, ์„œ๋น„์Šค๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด ํ† ํฐ์„ ํ†ตํ•ด์„œ ๊ณต๊ฐœํ•˜๊ธฐ ์›ํ•˜๋Š” ๋‚ด์šฉ(Ex) ์‚ฌ์šฉ์ž์˜ ๋‹‰๋„ค์ž„, ๊ด€๋ฆฌ์ž ์—ฌ๋ถ€ ๋“ฑ) ๋“ฑ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๋‹ค. ํด๋ ˆ์ž„์€ ์‚ฌ์šฉ์ž ์ •๋ณด๋‚˜ ํ† ํฐ ์†์„ฑ ๋“ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” key-value ์Œ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ถ€๋ถ„์€ ๋‹ค๋ฅธ ์ •๋ณด๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ์•…์šฉํ•  ์šฐ๋ ค๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ header์™€ verify signature๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.



verify signature

ํ† ํฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret
)

header์•ˆ์— ์žˆ๋Š” ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜(์ธ์ฝ”๋”ฉ๋œ header + ์ธ์ฝ”๋”ฉ๋œ payload + ์„œ๋ฒ„์˜ ๋น„๋ฐ€ํ‚ค) = verify signature

์„œ๋ฒ„๋Š” ์œ„ ๊ณผ์ •์„ ๋”ฐ๋ผ์„œ verify signature๋ฅผ ๋งŒ๋“ค๊ณ , ํ† ํฐ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ์ด ๋”ฐ๋ผ์„œ, ์„œ๋ฒ„์˜ ๋น„๋ฐ€ํ‚ค๋ฅผ ๋ชจ๋ฅด๋ฉด ์•„๋ฌด๋ฆฌ payload๋ฅผ ํƒˆ์ทจํ•ด์„œ ๋ฐ”๊พธ๋”๋ผ๋„ ์ธ๊ฐ€์— ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ๋‹ค!

์ฆ‰, ๋˜‘๊ฐ™์ด ๋กœ๊ทธ์ธ์„ ํ–ˆ์ง€๋งŒ ์„ธ์…˜๊ณผ ๋‹ฌ๋ฆฌ JWT๋Š” DB๋ฅผ ๊ฑด๋“œ๋ฆฌ๋Š” ๋Œ€์‹  ์ •๋ณด๋ฅผ ์‚ฌ์ธํ•˜๊ณ  ์ „๋‹ฌํ•œ๋‹ค.
์ด์ œ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ์„ธ์…˜ID์™€ ๋น„์Šทํ•˜๊ฒŒ (์‚ฌ์ธ๋œ ์ •๋ณด or ํ† ํฐ)์„ ์„œ๋ฒ„์— ๋ณด๋‚ด์•ผ ํ•œ๋‹ค. ์„œ๋ฒ„๋Š” ํ† ํฐ์„ ๋ฐ›์œผ๋ฉด ํ•ด๋‹น ์‚ฌ์ธ์ด ์œ ํšจํ•œ์ง€ ์ฒดํฌํ•˜๊ณ (ํ† ํฐ์ด ์กฐ์ž‘๋˜์—ˆ๋Š”์ง€ ์ฒดํฌ), ํ† ํฐ์ด ์œ ํšจํ•˜๋‹ค๋ฉด ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์š”์ฒญ์„ ์œ ์ €๋กœ ์ธ์ฆํ•  ๊ฒƒ์ด๋‹ค!

JWT์—์„  ์œ ์ €๋ฅผ ์ธ์ฆํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ํ† ํฐ์— ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜๋ฉด, DB๋ฅผ ๋’ค์งˆ ํ•„์š”๋„ ์—†์ด ํ•ด๋‹น ํ† ํฐ์ด ์œ ํšจํ•œ์ง€๋งŒ ๊ฒ€์ฆํ•˜๋ฉด ๋œ๋‹ค. ์—ผ๋‘ํ•ด์•ผ ํ•  ๊ฒƒ์€ JWT๋Š” ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์•˜๋‹ค. ๋”ฐ๋ผ์„œ ๋น„๋ฐ€ ์ •๋ณด ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” JWT์•ˆ์— ๋‘ฌ์„œ๋Š” ์•ˆ๋œ๋‹ค.





๐Ÿค“ ์„ธ์…˜๊ณผ JWT์˜ ์žฅ๋‹จ์ 

์„ธ์…˜

  • ์žฅ์ 
    ์„ธ์…˜์ด ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ์œ ์ €์˜ ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ
    Ex) ์„ธ์…˜ ์‚ญ์ œ๋ฅผ ํ†ตํ•œ ๊ฐ•์ œ ์œ ์ € ์‚ญ์ œ, ๊ณ„์ • ๊ณต์œ  ์ˆซ์ž ์ œํ•œ
    - ํ† ํฐ์€ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ, statelessํ•˜๋‹ค!
  • ๋‹จ์ 
    • ์œ ์ €๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก DB๊ฐ€ ์ปค์ง€๋ฏ€๋กœ ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค.

JWT

  • ์žฅ์ 
    • ์„œ๋ฒ„๋Š” ์ƒ์„ฑ๋œ ํ† ํฐ์„ ์ถ”์ ํ•˜์ง€ ์•Š๊ณ  ์œ ํšจํ•œ์ง€๋งŒ ๊ฒ€์ฆํ•˜๋ฏ€๋กœ DB๋ฅผ ์‚ด ํ•„์š” ์—†๋‹ค.
  • ๋‹จ์ 
    • ์œ ์ € ์ •๋ณด๋ฅผ ์•Œ์•„์•ผ์ง€๋งŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์€ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์œ ํšจํ•˜๋‹ˆ๊นŒ! ๋”ฐ๋ผ์„œ, ์—ฌ๋Ÿฌ ๊ธฐ๊ธฐ์—์„œ ๊ฐ™์€ ์•„์ด๋””๋กœ ๋กœ๊ทธ์ธํ•ด๋„ ๋ง‰์„ ์ˆ˜ ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํ† ํฐ์€ ์œ ํšจํ•œ์ง€๋งŒ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ..! ๊ทธ๋ž˜์„œ ์‹ค์ œ ์„œ๋น„์Šค์—์„œ๋Š” JWT ํ† ํฐ ํ•˜๋‚˜๋กœ๋งŒ! ์ธ๊ฐ€๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ณณ์€ ๋งŽ์ง€ ์•Š๋‹ค.
    • ์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๊ฒƒ์ด ์ˆ˜๋ช…์ด ์งง์€ access Token + ์ˆ˜๋ช…์ด 2์ฃผ ์ •๋„๋กœ ๋‚˜๋ฆ„ ๊ธด refresh Token์„ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์„œ๋ฒ„๋Š” refresh Token๋งŒ DB์— ์ €์žฅํ•˜๊ณ  access Token์˜ ์ˆ˜๋ช…์ด ๋‹คํ•˜๋ฉด ์ „๋‹ฌ๋ฐ›์€ refresh Token ํ™•์ธํ•˜์—ฌ ์ƒˆ๋กœ์šด access Token์„ ๋ฐœ๊ธ‰ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. Refresh Token์„ ์‚ฌ์šฉํ•˜๋ฉด Refresh Token์„ ์‚ญ์ œํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋กœ๊ทธ์•„์›ƒ ๋˜๋ฏ€๋กœ ์„œ๋ฒ„ ์ธก์—์„œ ํ† ํฐ์„ ๋ฌดํšจํ™”ํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฝ๋‹ค. ํ•˜์ง€๋งŒ, ์™„๋ฒฝํ•œ ํ•ด๊ฒฐ์ฑ…์€ ์•„๋‹ˆ๋‹ค! Refresh Token์ด ํƒˆ์ทจ๋  ์œ„ํ—˜์€ ๋‹น์—ฐํžˆ ์กด์žฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ์ ์ด JWT์˜ ํ•œ๊ณ„์ด๋‹ค.

๐Ÿค— ์„œ๋น„์Šค๊ฐ€ ์ž‘๊ฑฐ๋‚˜ ์œ ์ € ์ •๋ณด๋ฅผ ํ™œ์šฉ or ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์„๋•Œ๋Š” ์„ธ์…˜๋ณด๋‹จ JWT๊ฐ€ ๋” ์œ ์šฉํ•  ๊ฒƒ ๊ฐ™๋‹ค!




์ฐธ๊ณ  ์ž๋ฃŒ

์„ธ์…˜ vs ํ† ํฐ vs ์ฟ ํ‚ค? ๊ธฐ์ดˆ๊ฐœ๋… ์žก์•„๋“œ๋ฆผ. 10๋ถ„ ์ˆœ์‚ญ!

์ฟ ํ‚ค, ์„ธ์…˜, ์บ์‹œ๊ฐ€ ๋ญ”๊ฐ€์š”?

[10๋ถ„ ํ…Œ์ฝ”ํ†ก] ์—ฐ๋กœ๊ทธ์˜ ์ฟ ํ‚ค vs ์„ธ์…˜ vs ํ† ํฐ vs ์บ์‹œ

์„ธ์…˜ VS. ํ† ํฐ! JWT๊ฐ€ ๋ญ”๊ฐ€์š”?

0๊ฐœ์˜ ๋Œ“๊ธ€