๐Ÿš€AccessToken ์— ๋Œ€ํ•ด์„œ๋„ Statefulํ•˜๊ฒŒ ์ธ์ฆ,์ธ๊ฐ€๋ฅผ ํ• ๊นŒ

0

jwt

๋ชฉ๋ก ๋ณด๊ธฐ
4/4

Session ๋ฐ์ดํ„ฐ๋ฅผ ๋ ˆ๋””์Šค์— ์ €์žฅํ•ด๋‘๊ณ  ๊ณต์œ ํ•˜๋ฉด ์•ˆ์ „ํ•˜๊ณ  ์ข‹์„์ง€๋„ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์–ด์ฐจํ”ผ ๋ ˆ๋””์Šค์—์„œ์˜ ํƒ์ƒ‰์€ O(1)์˜ ์„ฑ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋‹ˆ ์„ฑ๋Šฅ์ƒ์˜ ์ด์Šˆ๋„ ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์กฐ๊ธˆ ๋” ๊ฒ€ํ† ํ•ด๋ด์•ผ ํ•œ๋‹ค.


๐Ÿš€ 1. Redis ์ ‘๊ทผ์ด O(1)์ด๋ผ๋„ ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ 

โœ… 1๏ธโƒฃ ๋„คํŠธ์›Œํฌ ๋น„์šฉ (Network Latency)

  • Redis๋Š” ๋ณดํ†ต ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•œ๋‹ค.
  • ์š”์ฒญ(Request)๊ณผ ์‘๋‹ต(Response) ์‚ฌ์ด์—๋Š” ํ•ญ์ƒ ๋„คํŠธ์›Œํฌ ๋ ˆ์ดํ„ด์‹œ(Latency)๊ฐ€ ์กด์žฌํ•œ๋‹ค.
  • ์•„๋ฌด๋ฆฌ Redis๊ฐ€ O(1)์ด๋ผ๋„, ๋„คํŠธ์›Œํฌ๋ฅผ ํƒ€๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ์‹œ๊ฐ„์€ ๋ฌด์‹œํ•  ์ˆ˜ ์—†๋‹ค.

์˜ˆ์‹œ:

  • ์„œ๋ฒ„์™€ Redis๊ฐ€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ์„ผํ„ฐ์— ์žˆ์–ด๋„ ๋„คํŠธ์›Œํฌ ์™•๋ณต ์‹œ๊ฐ„ (Round-Trip Time, RTT)์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ๋„คํŠธ์›Œํฌ I/O ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ˆ„์ ๋œ๋‹ค.

โœ… 2๏ธโƒฃ I/O ์˜ค๋ฒ„ํ—ค๋“œ (I/O Overhead)

  • Redis์™€ ํ†ต์‹ ์€ ์ฃผ๋กœ TCP/IP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ด๋กœ ์ธํ•ด ์š”์ฒญ/์‘๋‹ต์˜ ํŒจํ‚ท ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์ž‘์€ ์š”์ฒญ์ด๋ผ๋„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐœ์ƒํ•˜๋ฉด Redis๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  I/O ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์Œ“์ธ๋‹ค.

โœ… 3๏ธโƒฃ Redis์˜ ํ•œ๊ณ„ (Single-threaded Model)

  • Redis๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ(single-threaded) ์•„ํ‚คํ…์ฒ˜๋กœ ๋™์ž‘ํ•œ๋‹ค.
  • O(1) ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋”๋ผ๋„, ๋ชจ๋“  ์š”์ฒญ์€ ๋‹จ์ผ ์Šค๋ ˆ๋“œ์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  • ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์•„์ง€๋ฉด Redis ์ž์ฒด๊ฐ€ ๋ณ‘๋ชฉ(Bottleneck)์œผ๋กœ ์ž‘๋™ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

โœ… 4๏ธโƒฃ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ (Concurrency) ๋ฌธ์ œ

  • ์„œ๋ฒ„๊ฐ€ Redis์— ์ ‘๊ทผํ•  ๋•Œ, ์š”์ฒญ์ด ๋™์‹œ์— ๋งŽ์ด ๋ฐœ์ƒํ•˜๋ฉด ํ์ž‰(Queuing) ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Redis๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์š”์ฒญ๋งŒ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ๋‹ค๋Ÿ‰์˜ ์š”์ฒญ์ด ๋™์‹œ์— ๋“ค์–ด์˜ค๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„(Queue Time)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ… 5๏ธโƒฃ ์บ์‹œ ๋ฏธ์Šค (Cache Miss)

  • Redis๋Š” ๋น ๋ฅธ ์ ‘๊ทผ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์—†์œผ๋ฉด ์ ‘๊ทผ ์‹œ๊ฐ„์ด ๋” ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋Ÿฐ ์ƒํ™ฉ์€ ์ฃผ๋กœ TTL์ด ์งง๊ฑฐ๋‚˜, ๋ฐ์ดํ„ฐ๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋งŒ๋ฃŒ๋  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

โš–๏ธ 3. Access Token vs Redis ๊ฒ€์ฆ ๋น„๊ต

๊ธฐ์ค€Access Token (Stateless)Session ID (Stateful with Redis)
ํ™•์žฅ์„ฑ๋›ฐ์–ด๋‚จ (์„œ๋ฒ„ ๋กœ์ปฌ ๊ฒ€์ฆ)์ œํ•œ์  (์ค‘์•™ Redis ์˜์กด)
์„ฑ๋Šฅ๋น ๋ฆ„ (๋„คํŠธ์›Œํฌ ์š”์ฒญ ์—†์Œ)๋„คํŠธ์›Œํฌ ๋น„์šฉ ๋ฐ Redis I/O ๋ฐœ์ƒ
๋ณด์•ˆํƒˆ์ทจ ์‹œ ์ œํ•œ๋œ ๋ฆฌ์Šคํฌํƒˆ์ทจ ์‹œ Redis ๊ฒ€์ฆ ๊ฐ€๋Šฅ
๋ณต๊ตฌStateless ๋ณต๊ตฌ ์‰ฌ์›€Redis ๋‹ค์šด ์‹œ ๊ฒ€์ฆ ๋ถˆ๊ฐ€
๋ณต์žก์„ฑ๋‚ฎ์Œ๋†’์Œ

๐Ÿ”„ 4. ์ตœ์ ํ™” ๋ฐฉ์•ˆ

โœ… 1๏ธโƒฃ Access Token์„ Statelessํ•˜๊ฒŒ ๊ฒ€์ฆ

  • Access Token์€ ๋ชจ๋“  ์š”์ฒญ์—์„œ Stateless ๊ฒ€์ฆ (์„œ๋ช… ๋ฐ ๋งŒ๋ฃŒ ์‹œ๊ฐ„ ํ™•์ธ)์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๋„คํŠธ์›Œํฌ ๋ฐ Redis ๋ถ€ํ•˜ ์—†์Œ.

โœ… 2๏ธโƒฃ ๋ฏผ๊ฐํ•œ ์ž‘์—…์—๋งŒ Redis ๊ฒ€์ฆ ์ถ”๊ฐ€

  • ๋ชจ๋“  ์š”์ฒญ์„ Redis๋กœ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ค‘์š”ํ•œ ์š”์ฒญ(์˜ˆ: ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ, ๊ฒฐ์ œ API)๋งŒ Session ID๋ฅผ Redis์—์„œ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

โœ… 3๏ธโƒฃ Redis Connection Pool ์‚ฌ์šฉ

  • Redis ์ ‘๊ทผ ์‹œ ์ปค๋„ฅ์…˜ ํ’€(Connection Pool)์„ ์‚ฌ์šฉํ•ด ๋„คํŠธ์›Œํฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

โœ… 4๏ธโƒฃ Session ID ๊ฒ€์ฆ ์ตœ์ ํ™”

  • Redis์—์„œ ์„ธ์…˜ ๊ฒ€์ฆ์„ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•„์š” ์ด์ƒ์œผ๋กœ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

โœ… 5๏ธโƒฃ ์บ์‹œ ๊ณ„์ธต ์ถ”๊ฐ€

  • ์„ธ์…˜ ์ •๋ณด๋ฅผ Redis ์•ž๋‹จ์— ๋กœ์ปฌ ์บ์‹œ์— ์ €์žฅํ•˜์—ฌ Redis ๋ถ€ํ•˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: Caffeine Cache, Guava Cache ๋“ฑ.

๐Ÿšฆ 6. ์ตœ์ข… ์ •๋ฆฌ

  1. Access Token (Stateless) ๊ฒ€์ฆ ์šฐ์„ :

    • ์„œ๋ช…(Signature)๊ณผ ๋งŒ๋ฃŒ ์‹œ๊ฐ„(exp)์„ ๊ฒ€์ฆ.
    • Redis ์ ‘๊ทผ ์ตœ์†Œํ™”.
  2. Session ID (Stateful) ๊ฒ€์ฆ์€ ๋ฏผ๊ฐํ•œ API์—๋งŒ ์ ์šฉ:

    • ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ, ๊ฒฐ์ œ API ๋“ฑ ์ค‘์š” API ์š”์ฒญ์—๋งŒ Redis ๊ฒ€์ฆ ์ˆ˜ํ–‰.
  3. Access Token Rotation ์‚ฌ์šฉ:

    • ์š”์ฒญ๋งˆ๋‹ค Access Token์„ ์ƒˆ๋กœ ๋ฐœ๊ธ‰ํ•ด ํƒˆ์ทจ ๋ฆฌ์Šคํฌ ์ตœ์†Œํ™”.
  4. Redis ์ตœ์ ํ™”:

    • Connection Pool ์‚ฌ์šฉ.
    • ์บ์‹œ ๊ณ„์ธต ๋„์ž… (์˜ˆ: Caffeine Cache).

โœ… 7. ๊ฒฐ๋ก 

  • Redis๊ฐ€ O(1)์ด๋ผ๋„ ๋„คํŠธ์›Œํฌ ๋น„์šฉ๊ณผ I/O ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ๋ฌด์‹œํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋ชจ๋“  ์š”์ฒญ์—์„œ Redis ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ Stateless ๊ฒ€์ฆ (Access Token)์„ ์šฐ์„  ์‚ฌ์šฉํ•˜๊ณ , ๋ฏผ๊ฐํ•œ API์—์„œ๋งŒ Stateful ๊ฒ€์ฆ (Session ID, Redis)์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

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