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. ์ต์ข
์ ๋ฆฌ
-
Access Token (Stateless) ๊ฒ์ฆ ์ฐ์ :
- ์๋ช
(Signature)๊ณผ ๋ง๋ฃ ์๊ฐ(
exp
)์ ๊ฒ์ฆ.
- Redis ์ ๊ทผ ์ต์ํ.
-
Session ID (Stateful) ๊ฒ์ฆ์ ๋ฏผ๊ฐํ API์๋ง ์ ์ฉ:
- ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ, ๊ฒฐ์ API ๋ฑ ์ค์ API ์์ฒญ์๋ง Redis ๊ฒ์ฆ ์ํ.
-
Access Token Rotation ์ฌ์ฉ:
- ์์ฒญ๋ง๋ค Access Token์ ์๋ก ๋ฐ๊ธํด ํ์ทจ ๋ฆฌ์คํฌ ์ต์ํ.
-
Redis ์ต์ ํ:
- Connection Pool ์ฌ์ฉ.
- ์บ์ ๊ณ์ธต ๋์
(์: Caffeine Cache).
โ
7. ๊ฒฐ๋ก
- Redis๊ฐ O(1)์ด๋ผ๋ ๋คํธ์ํฌ ๋น์ฉ๊ณผ I/O ์ค๋ฒํค๋๋ ๋ฌด์ํ ์ ์๋ค.
- ๋ชจ๋ ์์ฒญ์์ Redis ๊ฒ์ฆ์ ์ํํ๋ ๊ฒ์ ๋นํจ์จ์ ์ด๋ค.
- ๋ฐ๋ผ์ Stateless ๊ฒ์ฆ (Access Token)์ ์ฐ์ ์ฌ์ฉํ๊ณ , ๋ฏผ๊ฐํ API์์๋ง Stateful ๊ฒ์ฆ (Session ID, Redis)์ ์ํํด์ผ ํ๋ค.