๐๏ธ Java Redis์ง๋ ฌํ ์ผ์ด์ฌ: Json, String, JDK
์ด๋ฒ ํฌ์คํ ์์๋ Java์์ Redis ์ง๋ ฌํ ์ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ค์ ๋น๊ตํ๊ณ ๊ฐ ๋ฐฉ์์ ํน์ง๊ณผ ์์ ๋ฅผ ์ค๋ช ํฉ๋๋ค. ย JdkSerializationRedisSerializer JDK ๊ธฐ๋ณธ ์ง๋ ฌํ๋ Java ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ java.io.Serializable ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก ๋ณํํ๋ ๋ฐฉ์์ ๋๋ค. ์ด ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ์ง๋ง, ๋ค์ ๋ฌด๊ฑฐ์ด ์ค๋ฒํค๋๊ฐ ์์ ์ ์์ต๋๋ค.ย ย ์ฅ์ : * Java ๋ด์ฅ ๊ธฐ๋ฅ์ด๋ผ ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ ์์ * ๋ณต์กํ ๊ฐ์ฒด ๊ตฌ์กฐ๋ ์ฝ๊ฒ ์ง๋ ฌํ ๊ฐ๋ฅ ๋จ์ : * ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๊ฐ ์๋์ ์ผ๋ก ํผ * ์ง๋ ฌํ/์ญ์ง๋ ฌํ ๊ณผ์ ์ด ๋น๊ต์ ๋๋ฆผ public class RedisConfig { public RedisTemplate redisTemplate() { RedisTemplate template = new RedisTemplate(); template.setValueSerializer(new JdkSerializationRedisSerializer()); // ๊ธฐํ ์ค์ return template; } }ย ์ ์ฅ๋๋ ํํ 127.0.0.1:6379> GET user:2 "\xac\xed\x00\x05sr\x00\x04User...\x78\x6f" ย StringRedisSerializer String ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด ํํ๋ก ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค. ์ด ๋ฐฉ์์ ๊ฐ๋จํ๊ณ ๊ฐ๋ณ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ธ ํค-๊ฐ ์ ์ฅ์ ์ ํฉํฉ๋๋ค. ์ง๋ ฌํ ๊ณผ์ ์์ด ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ Redis์ ์ ์ฅํฉ๋๋ค. ย ์ฅ์ : * ์๋๊ฐ ๋น ๋ฅด๊ณ ๊ฐ๋ฒผ์ * ๋ฐ์ดํฐ๊ฐ ์ฌ๋์ด ์ฝ์ ์ ์์ด ๋๋ฒ๊น ์ด ์ฌ์ ๋จ์ : * ๊ฐ์ฒด ์ง๋ ฌํ์ ๋นํด ์ ์ฐ์ฑ์ด ๋จ์ด์ง * ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์๋ ์ ํฉํ์ง ์์ย import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.data.redis.core.RedisTemplate; public class RedisConfig { public RedisTemplate redisTemplate() { RedisTemplate template = new RedisTemplate(); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new StringRedisSerializer()); // ๊ธฐํ ์ค์ return template; } } ์ ์ฅ๋๋ ํํ 127.0.0.1:6379> GET message "Hello, World!" ย GenericJackson2JsonRedisSerializer JSON ์ง๋ ฌํ๋ ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ์์ด๋ก ๋ณํํ๋ ๋ฐฉ์์ ๋๋ค. JSON์ ๊ฐ๋ณ๊ณ ์ฌ๋์ด ์ฝ์ ์ ์์ผ๋ฉฐ ๋ค์ํ ์ธ์ด์ ํธํ์ด ์ ๋ฉ๋๋ค. Jackson ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ํ์ฉํด ์์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. ย ์ฅ์ : * ๋ฐ์ดํฐ ํฌ๋งท์ด ๊ฐ๋ณ๊ณ ์ฌ๋์ด ์ฝ๊ธฐ ์ฌ์ * ๋ค์ํ ์ธ์ด ๊ฐ ํธํ์ฑ ์ฐ์ * ๊ฐ์ฒด ํ์ ์ ์์ฝ๊ฒ ๋ณต์ ๊ฐ๋ฅ ๋จ์ : * ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ํ ์คํธ ๊ธฐ๋ฐ์ด๋ผ ๋ค์ ํด ์ ์์ * ์ด์ง ๋ฐ์ดํฐ๋ณด๋ค๋ ๋๋ฆผ import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.core.RedisTemplate; public class RedisConfig { public RedisTemplate redisTemplate() { RedisTemplate template = new RedisTemplate(); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); // ๊ธฐํ ์ค์ return template; } } ์ ์ฅ๋๋ ํํ 127.0.0.1:6379> GET user:1 "{\"@class\":\"com.example.User\",\"name\":\"Alice\",\"age\":25}" ย ์ผ์ด์ค๋ณ ์ ํ * ์ฌ๋ฌ ์ธ์ด์์ ํธํ์ฑ: GenericJackson2JsonRedisSerializer ์ถ์ฒ * ๊ฐ์ ์ธ์ด(Java) ๊ฐ ๋ฐ์ดํฐ ๊ณต์ : GenericJackson2JsonRedisSerializer ๋๋ JdkSerializationRedisSerializer ์ถ์ฒ * ๋จ์ ๋ฐ์ดํฐ: StringRedisSerializer ์ถ์ฒ * ๋ณต์กํ ๊ฐ์ฒด ๋๋ Java ์ ์ฉ ๋ฐ์ดํฐ: JdkSerializationRedisSerializer (๋จ, ๋ชจ๋ ์๋น์ค๊ฐ Java์ธ ๊ฒฝ์ฐ์๋ง) ย ์ ๊ฐ์ ๊ฒฝ์ฐ๋ ์๋ก ๋ค๋ฅธ ์๋น์ค์์ ๋์ผํ Redis ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค. ๋์ผํ ํ๋ก์ ํธ๊ฐ ์๋์๊ธฐ์ JdkSerializationRedisSerializer์ ์ฌ์ฉํ ์ ์์๊ณ , ๊ฐ๋จํ ๋ฐ์ดํฐ๋ ์๋์๊ธฐ์ String์ ์ ํํ๊ธฐ์๋ ์ด๋ ค์ ์ต๋๋ค. ย ๊ฒฐ๊ตญ GenericJackson2JsonRedisSerializer๋ฅผ ์ ํํ์๋๋ฐ, ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจ๋๋ @class ์์ฑ์ ๋ฐ์ดํฐ์ ํ์ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง๋ง, ๋ค๋ฅธ ์๋น์ค์์ ํ์ํ์ง ์์์ต๋๋ค. ์ด๋ฅผ ๋นํ์ฑํํ๋ ค๋ฉด ObjectMapper ์ค์ ์ ํตํด ์ปค์คํฐ๋ง์ด์งํ ์ ์์ต๋๋ค.