Cookie & Session & JWT ์ •๋ฆฌ

Turtleยท2024๋…„ 8์›” 28์ผ
0

TIL(Today I Learned)

๋ชฉ๋ก ๋ณด๊ธฐ
7/7
post-thumbnail

๐Ÿท๏ธCookie

์›น ๋ธŒ๋ผ์šฐ์ € ์ฟ ํ‚ค(Cookie)๋ž€, ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ „์†กํ•˜๋Š” ๋ฐ์ดํ„ฐ ์กฐ๊ฐ์œผ๋กœ key=value ํ˜•์‹์œผ๋กœ ๋˜์–ด ์žˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด ์ฟ ํ‚ค ๊ฐ’์„ ์ €์žฅํ•ด๋†“์•˜๋‹ค๊ฐ€ ๋™์ผํ•œ ์„œ๋ฒ„์— ์ธ์ฆ์„ ํ•„์š”๋กœ ํ•˜๋Š” ์žฌ์š”์ฒญ์„ ๋ณด๋‚ผ ์‹œ ์ฟ ํ‚ค ๊ฐ’์„ ๊ฐ™์ด ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿท๏ธCookie๋ฅผ ํ™œ์šฉํ•œ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ๊ทธ์ธ ํ™”๋ฉด์—์„œ loginId์™€ password๋ฅผ ์ž…๋ ฅ ํ›„ POST ์š”์ฒญ์„ ํ†ตํ•ด ๋กœ๊ทธ์ธ ๊ณผ์ •์„ ์ง„ํ–‰ํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ๊ทธ์ธ ํผ์„ ์ž‘์„ฑํ•˜๊ณ  ์ œ์ถœํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” loginId์™€ password๋ฅผ ์„œ๋ฒ„์— POST ์š”์ฒญ์œผ๋กœ ๋ณด๋‚ธ๋‹ค.
  1. ์„œ๋ฒ„๋Š” DB๋ฅผ ์กฐํšŒํ•˜์—ฌ ํ•ด๋‹น ์œ ์ € ์ •๋ณด๋ฅผ ๊ฒ€์ฆํ•œ๋‹ค.
  • ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ loginId์™€ ์ผ์น˜ํ•˜๋Š” ์œ ์ € ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๊ณ , ์ž…๋ ฅ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ DB์— ํ•ด์‹œํ™”๋œ ํŒจ์Šค์›Œ๋“œ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  1. ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์ฟ ํ‚ค ์ €์žฅ์†Œ์— ๋ฐ˜ํ™˜๋œ ์ฟ ํ‚ค๊ฐ€ ์ €์žฅ์ด ๋œ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ๋Š” ์‘๋‹ต ๋ฐ›์€ ์ฟ ํ‚ค๋ฅผ ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์ฟ ํ‚ค ์ €์žฅ์†Œ์— ๋ณด๊ด€ํ•œ๋‹ค. ๋ณด๊ด€ ํ›„ ์ธ์ฆ์„ ํ•„์š”๋กœ ํ•˜๋Š” ์š”์ฒญ์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋ƒ„๊ณผ ๋™์‹œ์— ์ฟ ํ‚ค๋ฅผ ๊ฐ™์ด ๋ณด๋‚ธ๋‹ค.

  1. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ ๋ฐ›์€ ์ฟ ํ‚ค์— ํฌํ•จ๋œ SessionID๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ์ง€ ๊ฒ€์ฆํ•˜๊ณ  ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๐Ÿท๏ธCookie์˜ ๋ฌธ์ œ(์•„๋Š” ์„ ์—์„œ๋งŒ ์ •๋ฆฌํ•œ ๊ฒƒ, ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ถ”๊ฐ€๋กœ ์ •๋ฆฌ)

  1. ์ฟ ํ‚ค ํƒˆ์ทจ
  • ์ฟ ํ‚ค๋Š” ์„œ๋ฒ„ ์ธก์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ €์žฅ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์•…์˜์ ์ธ ๊ณต๊ฒฉ์ž๊ฐ€ ์ด๋ฅผ ํƒˆ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค. ํƒˆ์ทจ๋œ ์ฟ ํ‚ค๋Š” ์‚ฌ์šฉ์ž ์„ธ์…˜์„ ๊ฐ€๋กœ์ฑ„๊ฑฐ๋‚˜(์„ธ์…˜ ํ•˜์ด์žฌํ‚น), ํ•ด๋‹น ์‚ฌ์šฉ์ž ๊ถŒํ•œ์„ ๋„์šฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • HTTPS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ†ต์‹ ์„ ์•”ํ˜ธํ™”ํ•˜๊ณ , ์ฟ ํ‚ค์— Secure ์†์„ฑ์„ ์„ค์ •ํ•˜์—ฌ HTTPS๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ „์†ก๋˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ HttpOnly ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ฟ ํ‚ค์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋„๋ก ํ•œ๋‹ค.
  1. ์ฟ ํ‚ค ํฌ๊ธฐ ์ œํ•œ
  • ์ฟ ํ‚ค์˜ ํฌ๊ธฐ๋Š” ๊ทธ๋ ‡๊ฒŒ ํฌ์ง€ ์•Š๋‹ค. ์ด ๋•Œ๋ฌธ์— ๋ณต์žกํ•œ ์ธ์ฆ ์ •๋ณด๋‚˜ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟ ํ‚ค์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.
  • ์ฟ ํ‚ค์— ์ €์žฅํ•  ๋ฐ์ดํ„ฐ๋Š” ์ตœ์†Œํ™”ํ•˜๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ์„œ๋ฒ„ ์ธก์— ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
  1. ์ฟ ํ‚ค ๋งŒ๋ฃŒ
  • ์ฟ ํ‚ค๋Š” ๋งŒ๋ฃŒ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์‚ญ์ œ๋œ๋‹ค. ๋˜ํ•œ ์ฟ ํ‚ค๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋˜๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜๋กœ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฟ ํ‚ค๊ฐ€ ํƒˆ์ทจ๋˜๋”๋ผ๋„ ์•…์˜์ ์ธ ๊ณต๊ฒฉ์ž๊ฐ€ ์ด๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ์ฟ ํ‚ค ๋งŒ๋ฃŒ ์‹œ๊ฐ„์„ ์งง๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๐Ÿท๏ธSession

์„ธ์…˜์€ ์˜๊ตฌ์ ์ด๊ณ  ์ƒํ˜ธ์ž‘์šฉ์ ์ธ ์ •๋ณด ๊ตํ™˜์„ ์ „์ œํ•˜๋Š” ๋‘˜ ์ด์ƒ์˜ ํ†ต์‹  ์žฅ์น˜๋‚˜ ์ปดํ“จํ„ฐ์™€ ์‚ฌ์šฉ์ž ๊ฐ„์˜ ๋Œ€ํ™”๋‚˜ ์†ก์ˆ˜์‹  ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๊ฒฐ๊ตญ ์„ธ์…˜์ด๋ž€, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ ์—ฐ๊ฒฐ๋œ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค. ์ด ์„ธ์…˜์ด ์‚ฌ๋ผ์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์ด 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • ์„œ๋ฒ„ ์ชฝ์—์„œ ์„ธ์…˜์˜ ๊ฐ’์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ
  • ์‚ฌ์šฉ์ž๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ๋‹ซ๋Š” ๊ฒฝ์šฐ
  • ์„ธ์…˜์˜ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์ด ์ง€๋‚œ ๊ฒฝ์šฐ

๐Ÿท๏ธSession์„ ํ™œ์šฉํ•œ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ

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

๐Ÿท๏ธSession์˜ ๋ฌธ์ œ(์•„๋Š” ์„ ์—์„œ๋งŒ ์ •๋ฆฌํ•œ ๊ฒƒ, ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ถ”๊ฐ€๋กœ ์ •๋ฆฌ)

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

๐Ÿท๏ธJWT(Json Web Token)

์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ์˜ ๊ฒฝ์šฐ ์š”์ฒญ์„ ์„œ๋ฒ„์— ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ์„ธ์…˜ ID๋ฅผ ์กฐํšŒํ•˜๋Š” ์ž‘์—…์„ ํ†ตํ•ด์„œ DB ์ ‘๊ทผ์ด๋ผ๋Š” ์ ˆ์ฐจ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผํ•œ๋‹ค๋Š” ์ , ์ด ๊ณผ์ •์ด ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์•Œ๊ณ  ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ์ฐพ์•„๋ณด๋ฉด ๋Œ€ํ‘œ์ ์œผ๋กœ JWT๊ฐ€ ๋งŽ์ด ๋ณด์ธ๋‹ค.

JWT๋Š” ๊ฐ๊ฐ์˜ ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ์ (.)์œผ๋กœ ๊ตฌ๋ถ„์ด ๋˜์–ด์žˆ์œผ๋ฉฐ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • Header
  • Payload
  • Signature

1. Header

Header์—๋Š” ํ† ํฐ์˜ ํƒ€์ž…๊ณผ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ช…์‹œํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” JSON ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

2. Payload

Payload๋Š” JWT์˜ ๋ณธ๋ฌธ ๋ถ€๋ถ„์œผ๋กœ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ํด๋ ˆ์ž„์€ JWT์—์„œ ์ „์†กํ•˜๊ณ ์ž ํ•˜๋Š” ์ •๋ณด๋“ค์ด ์žˆ๋‹ค.

iss : ํ† ํฐ ๋ฐœ๊ธ‰์ž
sub : ํ† ํฐ ์ œ๋ชฉ
aud : ํ† ํฐ ๋Œ€์ƒ์ž
exp : ํ† ํฐ ๋งŒ๋ฃŒ
nbf : ํ† ํฐ ํ™œ์„ฑ ๋‚ ์งœ
iat : ํ† ํฐ ๋ฐœ๊ธ‰ ์‹œ๊ฐ„
jtl : JWT ํ† ํฐ ์‹๋ณ„์ž

3. Signature

Signature์€ ํ—ค๋”์™€ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์ƒ์„ฑ๋˜๋ฉฐ, JWT์˜ ๋ฌด๊ฒฐ์„ฑ๊ณผ ์ถœ์ฒ˜๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

๐Ÿท๏ธJWT๋ฅผ ํ™œ์šฉํ•œ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ

  1. ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋กœ๊ทธ์ธ ์š”์ฒญ์ด ๋“ค์–ด์˜จ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด ์„œ๋ฒ„์— ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.(์ด ๋•Œ, ํผ์„ ํ†ตํ•œ ์ œ์ถœ์€ ๋น„ํ™œ์„ฑํ™” ์ฒ˜๋ฆฌ)
  1. ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ํ•œ๋‹ค.
  • ์„œ๋ฒ„๋Š” ์ œ๊ณต๋œ ์ž๊ฒฉ ์ฆ๋ช…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•œ๋‹ค.
  1. JWT(Json Web Token)๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ์ธ์ฆ์— ์„ฑ๊ณตํ•˜๋ฉด ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Access Token(์•ก์„ธ์Šค ํ† ํฐ)๊ณผ Refresh Token(๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ)์„ ์ƒ์„ฑํ•œ๋‹ค.
  • Access Token์€ ์‚ฌ์šฉ์ž ์ •๋ณด์™€ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์„ ํฌํ•จํ•˜๋ฉฐ ์งง์€ ์‹œ๊ฐ„์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.
  • Refresh Token์€ ์‚ฌ์šฉ์ž ์‹๋ณ„ ์ •๋ณด๋งŒ ํฌํ•จํ•˜๊ณ  ๋งŒ๋ฃŒ ์‹œ๊ฐ„์ด Access Token๋ณด๋‹ค ๊ธธ๋‹ค. ์ด ํ† ํฐ์€ Access Token์ด ๋งŒ๋ฃŒ๋œ ๊ฒฝ์šฐ ์žฌ๋ฐœ๊ธ‰ ์š”์ฒญ ์‹œ์— ์‚ฌ์šฉ๋œ๋‹ค.
  • ์ƒ์„ฑ๋œ JWT๋Š” Header + Payload + Signature ๋“ฑ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.
  1. JWT๋ฅผ ์‘๋‹ต์œผ๋กœ ๋ณด๋‚ธ๋‹ค.
  • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ Access Token์™€ Refresh Token์„ ๊ฐ™์ด ๋ณด๋‚ธ๋‹ค.
  1. ํด๋ผ์ด์–ธํŠธ๋Š” Access Token์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์ดํ›„ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ, Access Token์„ Authorization ํ—ค๋”์— ํฌํ•จํ•˜์—ฌ ๋ณด๋‚ธ๋‹ค.
  1. ์„œ๋ฒ„์—์„œ Access Token์„ ๊ฒ€์ฆํ•œ๋‹ค.
  • ์„œ๋ฒ„์—์„œ Access Token์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ณ  ์œ ํšจํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  1. ๋งŒ์•ฝ 6๋ฒˆ ๊ณผ์ •์—์„œ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•˜๋Š” ๊ณผ์ •์—์„œ Access Token์ด ๋งŒ๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ์‘๋‹ต์œผ๋กœ ๊ฐ™์ด ๋ณด๋ƒˆ๋˜ Refresh Token์„ ํ†ตํ•ด Access Token์„ ์žฌ๋ฐœ๊ธ‰ํ•œ๋‹ค.

๐Ÿท๏ธJWT์˜ ๋ฌธ์ œ(์•„๋Š” ์„ ์—์„œ๋งŒ ์ •๋ฆฌํ•œ ๊ฒƒ, ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ถ”๊ฐ€๋กœ ์ •๋ฆฌ)

๋ชจ๋“  ๊ธฐ์ˆ ์ด ์žฅ์ ๋งŒ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋“ฏ์ด ๋‹จ์ ๋„ ์กด์žฌํ•œ๋‹ค. ์ฟ ํ‚ค์˜ ๋‹จ์ ์ด ์žˆ์–ด ์„ธ์…˜์„ ์‚ฌ์šฉํ–ˆ์œผ๋‚˜ ์„ธ์…˜ ์—ญ์‹œ ๋‹จ์ ์ด ์žˆ์–ด JWT๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด JWT ์—ญ์‹œ ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค.

  1. ํ† ํฐ ํฌ๊ธฐ
  • ์„ธ์…˜์ด Statefulํ•œ ์„ค๊ณ„๋ผ๋ฉด JWT๋Š” Statelessํ•œ ์„ค๊ณ„์ด๋‹ค. JWT๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ €์žฅ๋˜๋ฉฐ, ํŽ˜์ด๋กœ๋“œ์— ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํด์ˆ˜๋ก ํ† ํฐ ์—ญ์‹œ ์ปค์ง„๋‹ค. ์ด๋Š” ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์„ ๋งŽ์ด ์ ์œ ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ ํด๋ผ์ด์–ธํŠธ - ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹  ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
  1. ์„œ๋ฒ„์—์„œ์˜ ํ† ํฐ ๋ฌดํšจํ™” ์–ด๋ ค์›€
  • ์œ„์—์„œ ๋งํ–ˆ์ง€๋งŒ JWT๋Š” Statelessํ•œ ์„ค๊ณ„๋กœ ์„œ๋ฒ„ ์ธก์ด ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ด๋ฏธ ๋ฐœ๊ธ‰๋œ ํ† ํฐ์— ๋Œ€ํ•ด์„œ ๋ฌดํšจํ™”ํ•˜๊ฑฐ๋‚˜ ๊ฐ•์ œ๋กœ ๋กœ๊ทธ์•„์›ƒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ต๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Token Blacklist๋‚˜ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์„ ์งง๊ฒŒ ๊ฐ€์ ธ๊ฐ€์•ผ ํ•œ๋‹ค.
  1. ํ† ํฐ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„ฑ
  • ํ† ํฐ์ด ํƒˆ์ทจ๋˜๋ฉด, ํ† ํฐ์— ์ง€์ •๋œ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์ด ๋‹ค ๋  ๋•Œ๊นŒ์ง€ ์ด๋ฅผ ์•…์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. JWT๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ† ํฐ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•˜๋Š” ๊ณผ์ •์—์„œ ์„œ๋ฒ„์— ์ €์žฅ๋œ ์„ธ์…˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ธฐ์— ํ† ํฐ์ด ํƒˆ์ทจ๋˜๋ฉด ์ด ํƒˆ์ทจ๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ธ์ง€ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
  1. Payload ์ •๋ณด ๋…ธ์ถœ ๊ฐ€๋Šฅ์„ฑ
  • JWT ํŽ˜์ด๋กœ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Base64 URL-safe encoding์œผ๋กœ ์ธ์ฝ”๋”ฉ๋˜์ง€๋งŒ, ์•”ํ˜ธํ™”๋˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ํŽ˜์ด๋กœ๋“œ์— ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ๋Š” ๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ ๋””์ฝ”๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ํ† ํฐ์— ํฌํ•จ์‹œํ‚ค๋Š” ๊ฒƒ์€ ๋ณด์•ˆ์ ์œผ๋กœ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
  1. JWT ํ† ํฐ์˜ ๋งŒ๋ฃŒ ๊ทธ๋ฆฌ๊ณ  ๊ฐฑ์‹ ์˜ ์–ด๋ ค์›€
  • JWT๋Š” ํ† ํฐ Payload์˜ ์†์„ฑ ์ค‘ ํ•˜๋‚˜์ธ exp๋ฅผ ํ†ตํ•ด ๋งŒ๋ฃŒ ์‹œ๊ฐ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ๋งŒ๋ฃŒ ์‹œ๊ฐ„์„ ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ƒˆ๋กœ์šด ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›์•„์•ผ ํ•œ๋‹ค.

ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›์•˜๋‹ค๋Š” ์˜๋ฏธ๋Š” ์ธ์ฆ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ๋งํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์…˜ ์ €์žฅ์†Œ์™€ ๊ฐ™์€ ๋ณ„๋„์˜ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

์„ธ์…˜์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„ ์ธก์— ์ƒํƒœ๋ฅผ ์ €์žฅํ•ด์•ผํ•˜๋Š” Stateful ์„ค๊ณ„์ธ ๋ฐ˜๋ฉด JWT์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„ ์ธก์— ์ƒํƒœ๋ฅผ ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†๋Š” Stateless ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ JWT๋ฅผ ๋„์ž…ํ•˜๋Š” ์ด์œ ๋Š” Statefulํ•œ ์„ธ์…˜ ์„ค๊ณ„์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด Statelessํ•œ JWT ์„ค๊ณ„๋ฅผ ๋„์ž…ํ•˜์—ฌ ์„œ๋ฒ„์˜ ์ˆ˜ํ‰์  ํ™•์žฅ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐ ๊ทธ ๋ชฉ์ ์ด ์žˆ๋‹ค.

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