GenericJackson2JsonRedisSerializer vs JdkSerializationRedisSerializer

PUROMANGAยท2025๋…„ 5์›” 22์ผ

๊ธฐ์ˆ ์Šคํƒ

๋ชฉ๋ก ๋ณด๊ธฐ
4/22

โœ… 1. GenericJackson2JsonRedisSerializer

๊ฐœ์š”

๐Ÿ‘‰ JSON ํฌ๋งท์œผ๋กœ ์ง๋ ฌํ™”

{
  "id": 1,
  "name": "FutureMan"
}
  • ๐Ÿ”น ์žฅ์ 
    ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฌ์›€ (๋ฐ์ดํ„ฐ ๊ฐ€์‹œ์„ฑ โ†‘)
    Redis ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ฐ’ ํ™•์ธ ๊ฐ€๋Šฅ
    ๋‹ค์–‘ํ•œ ์–ธ์–ด ๊ฐ„ ํ˜ธํ™˜์„ฑ ์ข‹์Œ (Node.js, Python ๋“ฑ์—์„œ๋„ ํŒŒ์‹ฑ ๊ฐ€๋Šฅ)
    DTO, Map, List ๋“ฑ ๋‹ค์–‘ํ•œ ๊ตฌ์กฐ ์ง๋ ฌํ™” ์šฉ์ด
  • ๐Ÿ”น ๋‹จ์ 
    ํ•„๋“œ ์ด๋ฆ„๊นŒ์ง€ ์ €์žฅํ•˜๋ฏ€๋กœ ์šฉ๋Ÿ‰ ์•ฝ๊ฐ„ ํผ
    Jackson์ด ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค์—ฌ์•ผ ํ•จ (๊ธฐ๋ณธ ์ƒ์„ฑ์ž ๋“ฑ ํ•„์š”)

์˜ˆ์‹œ

โœ”๏ธ 1. API ์‘๋‹ต ์บ์‹ฑ

@Cacheable(cacheNames = "UserList", key = "'all'")
public List<UserDto> getAllUsers() {
    return userRepository.findAll();
}

ํ”„๋ก ํŠธ์—์„œ JSON์œผ๋กœ ๊ฐ€์ ธ๋‹ค ์จ์•ผ ํ•จ

API ์บ์‹œ๊ฐ€ Redis์— ์ €์žฅ๋จ

โ†’ JSON ์ง๋ ฌํ™”๊ฐ€ ๊ฐ€๋…์„ฑ๊ณผ ์—ฐ๋™์„ฑ ์ธก๋ฉด์—์„œ ์ตœ์ 

โœ”๏ธ 2. ์™ธ๋ถ€ ์‹œ์Šคํ…œ (Node.js, Python ๋“ฑ)๊ณผ Redis ๊ณต์œ 

์˜ˆ: ๋‹ค๋ฅธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ Redis์—์„œ ์ด ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ™์ด ์”€

โ†’ Jackson ๊ธฐ๋ฐ˜ JSON ์ง๋ ฌํ™” ํ•„์š”

โœ”๏ธ 3. ์šด์˜ ์ค‘ ๋ฐ์ดํ„ฐ ํ™•์ธ, ๋””๋ฒ„๊น…์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ

Redis CLI๋‚˜ RedisInsight์—์„œ ๋ฐ์ดํ„ฐ ๋‚ด์šฉ ๋ฐ”๋กœ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ

โ†’ JSON ํ˜•์‹์ด๋ฉด ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ์–ด ๋ฌธ์ œ ํŒŒ์•… ์‰ฌ์›€

โœ… 2. JdkSerializationRedisSerializer

๊ฐœ์š”

๐Ÿ‘‰ Java์˜ ๊ธฐ๋ณธ ์ง๋ ฌํ™” ๋ฐฉ์‹ (Serializable ๊ธฐ๋ฐ˜)

xacEDx0005sr00... (๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ)

๐Ÿ”น ์žฅ์ 
์ˆœ์ˆ˜ Java ๊ฐ์ฒด๋งŒ์„ ์œ„ํ•œ ์™„์ „ํ•œ ์ง๋ ฌํ™”
ํด๋ž˜์Šค ๊ณ„์ธต์ด๋‚˜ ๋ณต์žกํ•œ ๋‚ด๋ถ€ ์ƒํƒœ๊นŒ์ง€ ๋ชจ๋‘ ์ €์žฅ ๊ฐ€๋Šฅ

๐Ÿ”น ๋‹จ์ 
์‚ฌ๋žŒ์ด ๋ณผ ์ˆ˜ ์—†์Œ (๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ)
Java์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (ํƒ€ ์–ธ์–ด ํ˜ธํ™˜ ๋ถˆ๊ฐ€)
์„ฑ๋Šฅ ๋А๋ฆฌ๊ณ , Redis์—์„œ ๋””๋ฒ„๊น… ๋ถˆํŽธ
ํด๋ž˜์Šค ๋ณ€๊ฒฝ ์‹œ ์—ญ์ง๋ ฌํ™” ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ (๋ฒ„์ „ ๋ฌธ์ œ)

์˜ˆ์‹œ

โœ”๏ธ 1. ๋‚ด๋ถ€ ์บ์‹œ: ๋‹จ์ˆœํžˆ Java ๊ฐ์ฒด ์ €์žฅ/๋ถˆ๋Ÿฌ์˜ค๊ธฐ๋งŒ ํ•˜๋Š” ๊ฒฝ์šฐ

@Cacheable(cacheNames = "AuthToken", key = "#userId")
public SessionToken generateToken(Long userId) {
    return sessionTokenService.issue(userId);
}

์ด SessionToken์€ Redis์— ์ €์žฅ๋˜์ง€๋งŒ ์ ˆ๋Œ€ ์™ธ๋ถ€ ๋…ธ์ถœ ์•ˆ ๋จ

์ฝ๋Š” ์ชฝ๋„ ์˜ค์ง Java์—์„œ๋งŒ ์กด์žฌ

โ†’ ๊ณ ์†, ์•ˆ์ „ํ•œ ์ €์žฅ์ด ์šฐ์„ ์ด๋ผ๋ฉด JDK ์ง๋ ฌํ™” ์ ํ•ฉ

โœ”๏ธ 2. ๋ณด์•ˆ์ƒ ๋ฐ์ดํ„ฐ ๋…ธ์ถœ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ

JSON ์ง๋ ฌํ™”ํ•˜๋ฉด ํ•„๋“œ๋ช…, ๊ฐ’ ์ „๋ถ€ ๋“œ๋Ÿฌ๋‚จ

JDK ์ง๋ ฌํ™”ํ•˜๋ฉด ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ๋ผ ์ˆจ๊ธธ ์ˆ˜ ์žˆ์Œ

(๋‹จ, ๋ณด์•ˆ์„ฑ ์ž์ฒด๊ฐ€ ๊ฐ•ํ•ด์ง€๋Š” ๊ฑด ์•„๋‹˜)

โœ”๏ธ 3. ๊ฐ์ฒด ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์„œ JSON ์ง๋ ฌํ™”๊ฐ€ ์–ด๋ ค์šด ๊ฒฝ์šฐ

์ˆœํ™˜ ์ฐธ์กฐ (A โ†’ B โ†’ A)

๋น„ํ‘œ์ค€ getter/setter

Jackson์ด ์ž˜ ๋ชป ์ง๋ ฌํ™”ํ•˜๋Š” ๊ตฌ์กฐ

โ†’ JDK ์ง๋ ฌํ™”๋Š” ๊ทธ๋Œ€๋กœ ์ง๋ ฌํ™”ํ•˜๋ฏ€๋กœ ์•ˆ์ •์„ฑโ†‘

๐Ÿ” ์ง„์งœ ์‹ค๋ฌด ์˜ˆ์‹œ ๋น„๊ต

์‚ฌ์šฉ ์ƒํ™ฉ์ง๋ ฌํ™” ๋ฐฉ์‹์ด์œ 
ํ”„๋ก ํŠธ ์บ์‹ฑ (e.g. /products, /posts)GenericJackson2JsonJSON์œผ๋กœ ๊ทธ๋Œ€๋กœ ์‘๋‹ต ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ
๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ ์บ์‹œGenericJackson2JsonRedisInsight๋กœ ๋‚ด์šฉ ํ™•์ธ ์‰ฌ์›€
์‚ฌ์šฉ์ž ์„ธ์…˜ ์ •๋ณด ์ €์žฅJdkSerialization์™ธ๋ถ€ ๋…ธ์ถœ ์—†์Œ, Java์—์„œ๋งŒ ์”€
๋‚ด๋ถ€ ์ „์šฉ ์ธ์ฆ ํ† ํฐ, ์ œํ•œ ์ •๋ณดJdkSerialization์™ธ๋ถ€์—์„œ ์“ธ ์ผ ์—†๊ณ  ์„ฑ๋Šฅ ์ค‘์‹ฌ
์™ธ๋ถ€ ์—ฐ๋™ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค (Kafka + Redis + Node.js)GenericJackson2Json์–ธ์–ด ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ณต์œ ๊ฐ€ ํ•„์š”ํ•จ

๐Ÿ”š ๊ฒฐ๋ก 

ํŒ๋‹จ ๊ธฐ์ค€์ถ”์ฒœ ์ง๋ ฌํ™” ๋ฐฉ์‹
์™ธ๋ถ€์™€ ์—ฐ๋™ํ•˜๊ฑฐ๋‚˜, ๊ฐ€์‹œ์„ฑ์ด ํ•„์š”ํ•จโœ… GenericJackson2JsonRedisSerializer
๋‚ด๋ถ€ Java ์‹œ์Šคํ…œ์—์„œ๋งŒ ์“ฐ๊ณ  ๋น ๋ฅธ ์ฒ˜๋ฆฌ ์›ํ•จโœ… JdkSerializationRedisSerializer
Redis ๋‚ด์šฉ ๋””๋ฒ„๊น… ์ž์ฃผ ํ•จโœ… JSON
Jackson์ด ์ง๋ ฌํ™” ๋ชปํ•˜๋Š” ๋ณต์žก ๊ฐ์ฒดโœ… JDK

0๊ฐœ์˜ ๋Œ“๊ธ€