2024๋ 1์ 4์ผ ์ค์ 10:01
ํ ํฐ๊ด๋ฆฌ์ ๋ํด์ ๊น๊ฒ ๊ณ ๋ฏผํ๋ค๊ฐ
์ง๊ธ๊น์ง ์ธ์ฆ ๋ฐ ์ธ๊ฐ๋ฅผ ๊ตฌํํ ๋ Access token๋ง ์ฌ์ฉํ์๋๋ฐ Access token์ ํ๊ณ๋ฅผ ๋๊ปด์ Refresh token์ ์ ์ฉํด๋ณด๋ ค๊ณ ํ๋ค.
Redis DB์ ๋ฃ์ด์ ๊ด๋ฆฌํ๋ฉด ์ด๋จ๊น ์๊ฐํ๋ค.
ํ ํฐ์ ์ ํจ ๊ธฐ๊ฐ์ ๊ธธ๊ฒ ์ค์ ํ๋ค๋ฉด ํด๋น ํ ํฐ์ ๋๊ตฐ๊ฐ์๊ฒ ํ์ทจ๋นํ์ ๋ ๊ธด ๊ธฐ๊ฐ ๋์ ์ฌ์ฉ์์ธ ์ฒ ์์ฒญ์ ํ ์ ์๊ฒ ๋๋ค.
๊ทธ๋์ access token์ ์ ํจ ๊ธฐ๊ฐ์ ์งง๊ฒ ํด์ ํ์ทจ๋นํ์ ๋ ์ํ์ ์ค์ฌ์ผ ํ๋ค.
๊ทธ๋ฐ๋ฐ access token์ ์ ํจ ๊ธฐ๊ฐ์ ์งง๊ฒ ํ๋ค๋ฉด 1๋ฒ ๋ฌธ์ ๊ฐ ๋ค์ ๋ฐ์ํ๋ค.
๊ฒฐ๊ตญ access token ํ๋๋ง์ผ๋ก๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ชจ๋ ํด๊ฒฐํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
์ด ๋ refresh token์ ๋์ ํ๋ค๋ฉด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
**RedisConnection, RedisConnectionFactory**
์ด๋ฌํ RedisConnection์ RedisConnectionFactory๋ฅผ ํตํด ์์ฑ๋๊ณ ์ด RedisConnectionFactory๊ฐ PersistenceExceptionTranslator ์ญํ ์ ์ํํ๋ค.
๋จ, RefreshToken์ด ํ์ทจ๋นํ๋ค๋ฉด ๋ฌด์ ํ AccessToken์ด ๋ฐ๊ธ๋๋ค.
ํ๊ณ ์ถ๊ฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ refresh token๊ณผ ๋์ผํ์ง ํ์ธํ๋ค.
์ฆ, access token์ ์ฌ๋ฐ๊ธ ํ ๋ refresh token๋ ์ฌ๋ฐ๊ธ ํ๋ ๊ฒ์ด๋ค.
- token rotation์ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ refresh token์ ์ ํจ ๊ธฐ๊ฐ์ด ๊ธธ๋๋ผ๋ ๊ฐ์ด ๊ณ์ ๊ฐฑ์ ๋๊ธฐ ๋๋ฌธ์ ๊ธด ์ ํจ ๊ธฐ๊ฐ์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ ์ ์๋ค.
https://bcp0109.tistory.com/328
๊ธฐ์กด ์งํ ์ค์ธ ํ๋ก์ ํธ์ ์ ์ฉํ๋ค๋ฉด build.gradle์ ๋ค์๊ณผ ๊ฐ์ด ์์กด์ฑ์ ์ถ๊ฐํด์ค๋ค.
build.gradle{
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
}
spring.redis.host=localhost
spring.redis.port=6379
redis java client๋ lettuce์ jedis๊ฐ ์๋๋ฐ lettuce๋ ๋ณ๋ค๋ฅธ ์ค์ ์์ด ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ด์ lettuce๋ก ์งํํด๋ณด๋ ค๊ณ ํ๋ค.
LettuceConnectionFactory๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํ๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
@Configuration
class RedisConfig {
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(
new RedisStandaloneConfiguration("ํธ์คํธ", 6379)
);
}
}
RedisStandaloneConfiguration์ ์ฒซ ๋ฒ์งธ ์ธ์์ ํธ์คํธ, ๋ ๋ฒ์งธ ์ธ์์ ํฌํธ ๋ฒํธ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
LettuceConnectionFactory๋ก๋ถํฐ ์์ฑ๋ Lettuce๋ ๋์ผํ thread-safe connection์ ๊ณต์ ํ๋ค.
RedisConnection์ ๊ฒฝ์ฐ binary valuef๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ฐ RedisTemplate์ ๊ฒฝ์ฐ ๋์ ์์ค์ ์ถ์ํ์ ์ง๋ ฌํ๋ฅผ ์ ๊ณตํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๊ธฐ๊ฐ ํธํ๋ค.
RedisTemplate์ ๋ค์ํ ํ์ ์ ๋ํด ๋ค์ํ ์ฐ์ฐ์ ์ ๊ณตํด์ค๋ค.
ํน์ ํค ๊ฐ์ ๋ํด value๋ฅผ string, list, set ... ๋ฑ๋ฑ ๋ง์ ์ฐ์ฐ์ ์ ๊ณตํด์ค๋ค.
key bound๋ฅผ ํตํด ๋ค์ํ ํ์ ์ key๋ ์ ์ํ ์ ์๋ค.
RedisConnectionFactory์ ์ด์ด RedisTemplate๋ ๋น์ผ๋ก ๋ฑ๋กํด๋ณด์.
@Configuration
public class RedisConfiguration {
@Value("${spring.redis.host}")
private String redisHost;
@Value("${spring.redis.port}")
private int redisPort;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(redisHost, redisPort);
}
@Bean
public RedisTemplate<String, String> redisTemplate() {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
return redisTemplate;
}
}