JWT๋ ๋ฌด์ํ ์ธ์ฆ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์, ํ ํฐ์ ํด๋ผ์ด์ธํธ์๋ง ์ ์ฅํ๋ฉด ์๋ฒ๋ ์ํ๋ฅผ ๊ธฐ์ตํ์ง ๋ชปํจ.
์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด Redis๋ฅผ ์ฌ์ฉํด ๋ก๊ทธ์์๋ ํ ํฐ์ด๋ ๊ฐ์ ๋ก ๋ง๋ฃ์ํฌ ํ ํฐ์ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํจ.
SecurityContextHolder์ ์ฌ์ฉ์ ์ ๋ณด ์ ์ฅ โ ์ดํ ์์ฒญ์์ ์ธ์ฆ ์ ๋ณด ์ฌ์ฉ ๊ฐ๋ฅif (isValid(jwt)) {
if (!redisService.hasKey(jwt)) {
Authentication auth = getAuthentication(jwt);
SecurityContextHolder.getContext().setAuthentication(auth);
} else {
// ๋ธ๋๋ฆฌ์คํธ์ ๋ฑ๋ก๋ ํ ํฐ โ ์ธ์ฆ ์คํจ ์ฒ๋ฆฌ
}
}
| ์ญํ | ์ค๋ช |
|---|---|
| ๋ธ๋๋ฆฌ์คํธ ์ ์ฅ์ | ๋ก๊ทธ์์๋ JWT๋ฅผ Redis์ ์ ์ฅํ์ฌ ์ธ์ฆ ๊ฑฐ๋ถ ์ฒ๋ฆฌ |
| TTL ๊ธฐ๋ฐ ๊ด๋ฆฌ | ๋จ์ ํ ํฐ ๋ง๋ฃ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก Redis์ TTL ์ค์ โ ์๋ ์ญ์ |
| ๋น ๋ฅธ ์กฐํ | RDB๋ณด๋ค ๋น ๋ฅธ in-memory ์กฐํ๋ก ์ธ์ฆ ์ฑ๋ฅ ์ต์ ํ |
| ๋ฐฉ์ | ๋จ์ |
|---|---|
| RDB์ ๋ธ๋๋ฆฌ์คํธ ํ ์ด๋ธ | ๋งค ์์ฒญ๋ง๋ค DB IO โ ์ฑ๋ฅ ์ ํ + TTL ๊ด๋ฆฌ ๋ณต์ก |
| ํด๋ผ์ด์ธํธ์์๋ง ํ ํฐ ์ญ์ | ์๋ฒ๋ ์ฌ์ ํ ํ ํฐ์ ์ ํจํ๋ค๊ณ ํ๋จํจ (๋ณด์ ์ทจ์ฝ) |
| accessToken ์งง๊ฒ + refreshToken | ์ผ์ ์๊ฐ ๋ด accessToken์ ์ฌ์ ํ ์ ํจ โ ์ค์๊ฐ ์ฐจ๋จ ๋ถ๊ฐ |
โก๏ธ ๊ฒฐ๋ก : Redis๋ ํ ํฐ ๋ฌดํจํ์ ์ธ์ ์ ์ด๋ฅผ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌํ๋ฉด์๋ ํผํฌ๋จผ์ค๊น์ง ํ๋ณดํ ์ ์๋ ์ต์ ์ ์ ํ์ง
โJWT๋ ๋ฌด์ํ ์ธ์ฆ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์, ๋ก๊ทธ์์์ด๋ ๊ฐ์ ๋ง๋ฃ๊ฐ ์ด๋ ค์ด ๋จ์ ์ด ์์ต๋๋ค.
์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด Redis์ ๋ธ๋๋ฆฌ์คํธ๋ฅผ ๊ด๋ฆฌํ๊ณ TTL์ ์ค์ ํจ์ผ๋ก์จ, ์๋ฒ ์ธก์์ ํ ํฐ์ ์ค์๊ฐ์ผ๋ก ๋ฌดํจํํ ์ ์๋๋ก ํ์ต๋๋ค.โ