[Redis] 스프링이 제공하는 Redis 직렬화/역직렬화 (Serializer/Deserializer)

2025. 9. 16. 11:18·Redis

RedisSerializer 

Redis는 메모리 기반 key-value 저장소이기 때문에, 자바 객체를 직접 넣을 수는 없다.

  • 자바 객체(Object) -> 바이트 배열 (byte[]) -> Redis 저장 
  • Redis에 저장된 바이트 배열 -> 자바 객체(Object) 

이 변환 과정을 해주는 게 바로 Serializer/Deserializer (직렬화/역직렬화)이다. 

 

스프링에서는 이 과정을 편하게 할 수 있도록 여러 가지 RedisSerializer 구현체를 제공한다. 


 

스프링 Redis 직렬화/역직렬화 종류 

1) `StringRedisSerializer` 

자바의 String을 바이트 배열 변환을 담당한다. UTF-8 인코딩/디코딩을 사용하고 Redis 자체가 key-value를 문자열 기반으로 관리하기 때문에, key 직렬화에 가장 많이 사용된다. 

 

2) `JdkSerializationRedisSerializer` 

자바의 기본 직렬화(ObjectOutputStream, ObjectInputStream)을 사용한다. 모든 Serializable 객체를 저장할 수 있지만, Redis에 저장된 것은 바이너리라 사람이 읽기 어렵다. 크기도 크고 성능도 좋지 않기 때문에 거의 사용하지 않는다. 

 

3) `Jackson2JsonRedisSerializer` 

Jackson(ObjectMapper)을 이용해서 객체를 JSON 문자열로 직렬화한다. 사람이 읽을 수 있는 JSON이 Redis에 저장된다. 성능도 적당히 빠르고, 유지보수하기도 쉬워 실무에서 가장 많이 사용된다. 

 

4) `GenericJackson2JsonRedisSerializer` 

`Jackson2JsonRedisSerializer`와 비슷하지만, 타입 정보(`@class`)를 포함해서 저장한다. 그래서 꺼낼 때 타입을 몰라도 알아서 변환된다는 장점이 있다. 여러 타입 객체를 한 Redis에 저장할 때 유용하다. 


Config 예시 

보통은 key → StringRedisSerializer, value → Jackson2JsonRedisSerializer 조합을 사용한다. 

@Configuration
public class RedisConfig {

    @Bean // RedisTemplate을 Bean으로 등록
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);

        // Key는 문자열 직렬화
        template.setKeySerializer(new StringRedisSerializer());

        // Value는 JSON 직렬화
        Jackson2JsonRedisSerializer<Object> serializer =
            new Jackson2JsonRedisSerializer<>(Object.class);
        template.setValueSerializer(serializer);

        return template;
    }
}

 

RedisTemplate 이란 ? 

스프링에서 Redis와 연결해서 명령어를 실행할 수 있게 해주는 헬퍼(Helper) 객체이다. JdbcTemplate이 SQL 실행을 도와주는 것 처럼 RedisTemplate은 Redis 명령 실행을 도와준다. 내부적으로는 RedisConnectionFactory 를 통해 실제 Redis 서버와 연결된다. 

 

 

'Redis' 카테고리의 다른 글

[Redis] Redis Pub/Sub  (0) 2025.09.11
[Redis] Redis란 무엇인가 ?  (0) 2025.09.09
'Redis' 카테고리의 다른 글
  • [Redis] Redis Pub/Sub
  • [Redis] Redis란 무엇인가 ?
erika0915
erika0915
백엔드 개발자가 되고 싶어요 .
  • erika0915
    erikoding
    erika0915
  • 전체
    오늘
    어제
    • 분류 전체보기 (78)
      • 프로젝트 (13)
        • 끼니콩 (3)
        • 덕메랑 (3)
        • handDoc (7)
        • Haeil (0)
      • Java (9)
        • 클린코더스 (0)
      • Spring (30)
      • Redis (3)
      • CS (7)
        • 운영체제 (3)
        • 컴퓨터구조 (0)
        • 네트워크 (4)
      • DevOps (2)
      • 코딩테스트 (0)
      • Tech (14)
        • TDD (1)
        • 정리 (5)
        • 우테코 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코드레빗
    STT
    스프링부트
    git
    Network
    TDD
    자바
    파인튜닝
    java
    springboot
    redis
    운영체제
    지라
    OS
    coderabbit
    레디스
    docker
    AI
    jira
    promtail
    몽고디비
    네트워크
    깃허브
    CoolSMS
    도커
    MongoDB
    Spring
    스프링
    깃
    github
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
erika0915
[Redis] 스프링이 제공하는 Redis 직렬화/역직렬화 (Serializer/Deserializer)

티스토리툴바