Redis 적용

JH Kim·2026년 1월 16일

Spring

목록 보기
3/8

Redis란?

  • Redis는 Remote Dictionary Server의 약자로, 메모리 기반의 Key-Value 저장소
  • 주요 특징
  1. In-Memory 저장소
    • 데이터를 디스크 대신 RAM에 저장해서 매우 빠른 읽기·쓰기 속도를 제공합니다.
    • 필요하면 데이터의 스냅샷(백업)을 디스크에 저장할 수도 있습니다.
  2. 다양한 데이터 구조 지원
    • 단순 문자열(String)뿐 아니라 List, Set, Sorted Set, Hash, Bitmap, HyperLogLog, Stream 등을 지원합니다.
    • 그래서 단순 캐시뿐 아니라 실시간 순위표, 세션 저장소, 큐 시스템 등에도 사용됩니다.
  3. 싱글 스레드 기반 고성능
    • 하나의 스레드로 동작하지만, 네트워크 I/O와 메모리 접근이 매우 빠르기 때문에 초당 수십만 건의 요청을 처리할 수 있습니다.
  4. 캐시 및 세션 관리에 적합
    • Spring 같은 웹 애플리케이션에서 로그인 세션, 토큰, 임시 데이터 저장소로 자주 사용됩니다.
    • TTL(Time To Live) 기능으로 자동 만료 설정이 가능해 캐시 관리가 쉽습니다.
  5. 분산·고가용성 지원
    • Redis Sentinel(장애 감지·자동 페일오버)
    • Redis Cluster(샤딩을 통한 분산 저장)

pom.xml 설정

  • session 등록

org.springframework.session

spring-session

1.3.1.RELEASE

org.springframework.session

spring-session-data-redis

1.3.1.RELEASE

pom

  • lettuce Redis 등록

biz.paluch.redis

lettuce

3.5.0.Final

web.xml 설정

  • Redis session 설정

springSessionRepositoryFilter

org.springframework.web.filter.DelegatingFilterProxy

springSessionRepositoryFilter

/*

REQUEST

ERROR

context-common.xml 설정

  • session 설정

<!— 레디스 세션 만료시간, 초단위 —>

<util:constant static-field=”org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP”/>

<bean id=”lettuceConnectionFactory” class=”org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory” destroy-method=”destroy">

<property name=”hostname” value=”redis server IP”/>

<property name=”hostname” value=”redis server IP”/>

다른 두 프로젝트가 Redis 서버를 공유할 때 발생하는 오류

  • org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to deserialize payload. Is the type array a result of corresponding serialization for DefaultDeserializer?; nested exception is org.springframework.core.NestedIOException: Failed to deserialize object type; nested exception is java.lang.CalssNotFoundException: kr.co.test.common.vo.UserVO

— 해당 오류는 웹에 있는 UserVO 를 모바일에서 계속 땡겨와 직렬화 및 역직렬화가 안되는 현상임

— 따라서 redis에 있는 sessionId를 웹에서 접근시 WEB_JSESSIONID 로 변경하여 수정함( 차후 추가수정도 있을 수 있음)

  • context-common.xml 에 있는 <context:annotation-config/> 아래 빈에 해당 내용 추가

— redis 리눅스 서버에서 key 검색시 나오는 value를 customize 가능

  • 아래에 bean 추가

— 브라우저에서 개발자도구로 SESSION 확인시 나오는 name을 customize 가능

profile
Backend Engineer(Spring, API, Spring Boot, MSSql, SVN..)

0개의 댓글