๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ธ์ฆ์ธ๊ฐ€2

[Spring] Access Token vs Refresh Token ์™„๋ฒฝ ์ •๋ฆฌ + Redis ์ €์žฅ ์ด์œ ๊นŒ์ง€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ JWT ์ธ์ฆ ์‹œ์Šคํ…œ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•„์š”์„ฑ์„ ๋А๋ผ๊ณ  ๊ณต๋ถ€ํ•˜๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ๋‹ด์•˜๋‹ค.๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์ด๋Ÿฐ ์งˆ๋ฌธ์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ƒ๊ธด๋‹ค."Access Token์ด๋ž‘ Refresh Token, ์ด ๋‘˜์€ ๋„๋Œ€์ฒด ๋ญ๊ฐ€ ๋‹ค๋ฅด๊ณ , ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•ด์•ผ ํ• ๊นŒ?"ํŠนํžˆ Refresh Token์„ ์–ด๋””์— ์ €์žฅํ•ด์•ผ ํ• ์ง€, Redis๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ญ”์ง€ ๊ถ๊ธˆ์ฆ์ด ๋งŽ์•˜๋‹ค.๊ทธ๋ž˜์„œ Access Token๊ณผ Refresh Token ๊ฐœ๋…๋ถ€ํ„ฐ Refresh Token์„ ์„œ๋ฒ„, ํŠนํžˆ Redis์— ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๐Ÿ”‘ Access Token์ด๋ž€?!๋กœ๊ทธ์ธํ•˜๋ฉด ๋ฐœ๊ธ‰๋ฐ›๋Š” ์งง์€ ์ˆ˜๋ช…์˜ ํ† ํฐ์ด๋‹ค. (ex. 30๋ถ„)์‚ฌ์šฉ์ž๋Š” ๋งค ์š”์ฒญ๋งˆ๋‹ค Access Token์„ HTTP ํ—ค๋”์— ๋‹ด.. 2025. 5. 14.
[ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] Spring Boot JWT ์ธ์ฆ ํ๋ฆ„ ๋งŒ๋“ค๊ณ  200 OK๋งŒ ๋‚˜์˜ค๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ๐Ÿ”ฅ JWT ์ธ์ฆ ๊ตฌํ˜„ & ํ•„ํ„ฐ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ํ”„๋กœ์ ํŠธ์—์„œ JWT ์ธ์ฆ์„ ์ฒ˜์Œ์œผ๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ•ด ๋ดค๋‹ค.ํšŒ์›๊ฐ€์ž…๊ณผ ๋กœ๊ทธ์ธ๊นŒ์ง€๋Š” ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ–ˆ์ง€๋งŒ.. ๋ฌธ์ œ๋Š” ๊ทธ ์ดํ›„์˜€๋‹ค.Controller๋กœ ์š”์ฒญ์ด ๋„˜์–ด๊ฐ€์ง€ ์•Š๊ณ , 200 OK๋งŒ ๋‚˜์˜ค๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.๋ฌธ์ œ๋ฅผ ์ฐพ์ง€ ๋ชปํ•ด์„œ ํ•œ์ฐธ์„ ํ—ค๋งค๋‹ค๊ฐ€, ๊ฒฐ๊ตญ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ •๋ฆฌํ•˜๋ฉด์„œ ํ•ด๊ฒฐํ–ˆ๋‹ค. โœ๏ธ JwtUtil ํด๋ž˜์ŠคJWT๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ณ , ๊ฒ€์ฆํ•˜๊ณ , Claim ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.@Slf4j(topic = "JwtUtil")@Component@RequiredArgsConstructorpublic class JwtUtil { private static final String BEARER_PREFIX = "Bearer "; privat.. 2025. 5. 13.