๐ค ๋ฐฐ๊ฒฝ
ํ๋ก์ ํธ ์งํ ์ค์ Redis Queue์ WebSocket์ ํ์ฉํด์ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋ ๊ณผ์ ์ด ์์๋ค. Spring Data Redis๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด Config ํ์ผ์ RedistTemplate์ Bean์ผ๋ก ๋ฑ๋กํ๊ฒ ๋์๊ณ , ๊ด๋ จํด์ Key์ Value์ Serializer๋ ์ค์ ํ๊ฒ ๋์๋ค. ํด๋น ๊ณผ์ ์์ ์๊ฒ ๋ RedisSerializer ์ข ๋ฅ์ ํน์ง์ ๋ํด ์๊ฐํด๋ณด๋ ค๊ณ ํ๋ค.
Redis๋ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฏ๋ก Redis์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ/์กฐํํ๋ ๋์์ ์ง๋ ฌํ/์ญ์ง๋ ฌํ๊ฐ ํ์ํ๋ค.
์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ธฐ ์ํด ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
RedisTemplate ์ค์
Spring Data Redis ์์กด์ฑ์ ์ถ๊ฐํ๋ฉด RedisTemplate ๊ฐ์ฒด๋ฅผ Bean์ผ๋ก ๋ฑ๋กํ๊ณ ์ด๋ฅผ ํ์ฉํด์ Redis๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ ๋ฐ์ดํฐ Key์ Value๋ฅผ ์ง๋ ฌํ / ์ญ์ง๋ ฌํํ๋ ๋ฐฉ์์ ํ์์ ๋ฐ๋ผ ์ ์ ํ ๋ฐฉ์์ผ๋ก ์ค์ ํด์ผ ํ๋ค.
@Configuration
@EnableRedisRepositories
public class RedisConfig {
@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<?, ?> redisTemplate() {
RedisTemplate<byte[], byte[]> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setKeySerializer(new JdkSerializationRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
}
redisTemplate์๋ setKeySerializer, setValueSerializer ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋๋ฐ ํด๋น ํ๋ผ๋ฏธํฐ๋ก RedisSerializer ๊ตฌํ์ฒด๋ฅผ ์ถ๊ฐํ ์ ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก RedisTemplate์์ ์ ๊ณตํ๋ ์ง๋ ฌํ/์ญ์ง๋ ฌํ ๋ด๋น ๊ตฌํ ํด๋์ค๊ฐ ์กด์ฌํ๋ค.
1. JdkSerializationRedisSerializer (Default)
- ๊ธฐ๋ณธ์ผ๋ก ์ค์ ๋ ์๋ฐ ์ง๋ ฌํ ๋ฐฉ์์ด๋ค.
2. StringRedisSerializer
- ๋ฌธ์์ด(String) ํ์ ์ ๊ฐ์ ๊ทธ๋๋ก ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค.
- Class Type์ ๋ณ๋๋ก ์ง์ ํ ํ์๊ฐ ์๋ค.
- ์ผ๋ฐ์ ์ธ ๊ฐ์ฒด ํ์ (Dto, Entity ๋ฑ)์ ์บ์คํ ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก UTF-8๋ก ์ค์ ๋๋ค.
3. GenericJackson2JsonRedisSerializer
- ๋ณ๋ Class Type์ ์ง์ ํ์ง ์๊ณ ๋ชจ๋ Class Type์ JSON ํ์์ผ๋ก ์ ์ฅํ ์ ์๋ค๋ ๋ฒ์ฉ์ ์ธ ํน์ง์ด ์๋ค.
- Object์ class, package๋ฅผ ๊ฐ์ด ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ณ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ๊ทผํด์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ด๋ ต๋ค.
(๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ฐ๋์ @class๋ก ์ง์ ๋ ๋์ผํ ํจํค์ง์ ์๋ Dto๋ก ๊ฐ์ ธ์์ผ ํ๋ค.)
- ๋ด๋ถ์ ์ผ๋ก ObjectMapper๋ฅผ ์ฌ์ฉํด์ ์ง๋ ฌํ, ์ญ์ง๋ ฌํ ๊ณผ์ ์ ์ํํ๋ค.
4. GenericToStringSerializer<T>
- Class Type์ ์ง์ ํด์ผ ํ๊ณ (Generic), ํน์ Class Type์ ํ๋ผ๋ฏธํฐ๋ฅผ Converter.convert()๋ฅผ ํ์ฉํด์ String์ผ๋ก ๋ณํ ํ, ์ง๋ ฌํํ๋ ํน์ง์ด ์๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ํ์ ๋ค์ ๋ณํ์ด ๊ฐ๋ฅํ๋๋ก ์คํ๋ง์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ Converter, ConverterFactory๋ฅผ ๋ฑ๋กํ DefaultConversionService์ ์ฌ์ฉํ๋ค.
5. Jackson2JsonRedisSerializer<T>
- Class Type์ ์ง์ ํด์ผ ํ๊ณ (Generic), Redis์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ ๋ JSON ํํ๋ก ์ ์ฅํ๋ ํน์ง์ด ์๋ค.
- Class Type ์ง์ ๋๋ฌธ์ ํน์ ํด๋์ค์ ์ข ์์ ์ด๋ฉฐ, ๋ง์ฝ ์ถ์ ํด๋์ค, ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด์ ์ถ์ํํ๋ ๊ฒฝ์ฐ์๋ ์ถ๊ฐ์ ์ธ ๋ณ๋ ์ค์ ์ด ํ์ํ๋ค.
- ๋ด๋ถ์ ์ผ๋ก ObjectMapper๋ฅผ ์ฌ์ฉํด์ ์ง๋ ฌํ, ์ญ์ง๋ ฌํ ๊ณผ์ ์ ์ํํ๋ค.
6. OxmSerializer
- Marshaller, Unmarshaller๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ง๋ ฌํ, ์ญ์ง๋ ฌํ๋ฅผ ์ํํ๋ ํน์ง์ด ์๋ค.
(Marshaller๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ XML ๋ฌธ์๋ก ๋ณํ, Unmarshaller๋ XML ๋ฌธ์๋ฅผ ์๋ฐ ๊ฐ์ฒด๋ก ๋ณํ)
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
nginx์์ ์๋ฒ๋ก ๋๋ฉ์ธ ์ ๋ฌํ๊ธฐ (0) | 2023.08.26 |
---|---|
Spring message ChannelInterceptor ๋ฉ์๋ ํน์ง (0) | 2023.07.23 |
Spring Boot 3 ํ๊ฒฝ์์ KeyCloak ์ ์ฉํ๊ธฐ (0) | 2023.06.25 |
Spring Boot 3 + JPA๋ฅผ ํ์ฉํ Liquibase ์ค์ตํ๊ธฐ (4, final) (0) | 2023.06.06 |
๋์ ๋ฆฌ์คํธ ๋ฐ์ธ๋ฉ ๋ฌธ์ ํด๊ฒฐํ๊ธฐ (java.lang.IndexOutOfBoundsException: Index: 256, Size: 256) (0) | 2023.06.06 |
๋๊ธ