본문 바로가기

개발중/Redis

(13)
Spring Boot 2.x.x에서 3.x.x로 업그레이드 후 Redis에 Java 객체 저장 문제 발생 문제: Spring Boot 2.x.x에서 3.x.x로 업그레이드 후 Redis에 Java 객체 저장 문제 발생 Spring Boot를 2.x.x 버전에서 3.x.x 버전으로 업그레이드하면서 AuthUser 객체의 직렬화 및 역직렬화 과정에서 문제가 발생했습니다. 업그레이드 이전에는 이러한 이슈가 없었으나, 새 버전에서는 AuthUser 객체를 Redis에 저장하고 불러오는 과정에서 역직렬화를 할 수 없다는 오류가 발생했습니다. 해결 방법: Jackson Mix-In과 ObjectMapper 설정 이 문제를 해결하기 위해, Jackson 라이브러리의 Mix-In 기능을 활용했습니다. Mix-In을 사용하면 기존 클래스를 수정하지 않고도 직렬화 및 역직렬화 규칙을 적용할 수 있습니다. AuthUser 클래..
Spring boot 3.2.2 & Redis & GenericJackson2JsonRedisSerializer Spring Boot 2 에서 Spring Boot 3 으로 마이그레이션 하면서 Redis 역/직렬화 이슈가 발생하였습니다. 아래 문서를 읽고 기존에 사용하던 Jackson2JsonRedisSerializer 라이브러리를 GenericJackson2JsonRedisSerializer 라이브러리로 교체하였습니다. https://docs.spring.io/spring-session/reference/configuration/redis.html GenericJackson2JsonRedisSerializer GenericJackson2JsonRedisSerializer 클래스는 Spring Data Redis에서 제공하는 RedisSerializer의 구현체 중 하나로, Java 객체를 JSON으로 직렬화하거나..
[Spring Redis] java.io.InvalidClassException: com.Company; local class incompatible: stream classdesc serialVersionUID = 6590452854062395951, local class serialVersionUID = 2663707115855654317 k8s depolyment 의 이미지 버전을 업그레이드 시키니 이런 에러가 발생했습니다. org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to deserialize payload. Is the byte array a result of corresponding serialization for DefaultDeserializer?; nested exception is java.io.InvalidClassException: co..
로컬에서는 Spring Session, 배포에서는 Redis: 세션 저장소 분리 전략 이슈 개발자들이 로컬 환경에서 각각 Redis를 설정하는 것은 번거로운 작업입니다. (아마도 ? web 팀에서는 이러한 결론이 나왔습니다!) 이러한 문제를 해결하기 위해, 로컬 개발 환경에서는 Spring Session Storage를 사용하고, 실제 배포 환경에서는 Redis Session Storage를 사용하는 방법을 채택했습니다. 이렇게 하면 개발자는 로컬에서 별도의 Redis 설정 없이도 작업을 진행할 수 있고, 실제 운영 환경에서는 Redis의 뛰어난 성능과 안정성을 활용할 수 있습니다. 해결 방안 Spring의 Profile 기능을 이용해 로컬과 배포 환경에서 세션 저장소를 분리하는 방법을 구현했습니다. /** * dev / prod 환경에서는 Redis Session Storage 를 사용..
Spring Security에서 Redis를 사용하면서 겪은 SessionRegistry 문제 조건 시스템은 중복 로그인이 2회까지 가능합니다. Api pod 는 2개가 실행중입니다. 실패 시나리오 1. Pod A 에 test@com 계정이 로그인을 시도했고 성공했습니다. 2. Pod A 에 test@com 계정이 로그인을 시도했고 성공했습니다. ( 이 때 까지는 중복 로그인이 허용되는 범위입니다. ) 3. Pod B 에 test@com 계정이 로그인을 시도했고 중복 로그인이 허용되는 범위를 초과했습니다. ( 하지만 로그인 성공했습니다. ) 이슈 Redis 에서 통합적인 session 관리를 하므로 Pod B 에서 시도한 3회차 로그인 시도에서는 중복로그인이 허용되는 범위를 초과했기 때문에 중복 로그인이 실패해야합니다. Pod 2 에서 로그인된 계정을 판단할 때 Pod 1 에 있는 두 개의 계정에..
[트러블 슈팅] Headless Service 에 대한 오해 (1) 아래와 같은 설정을 하는 와중에 오해한 부분을 찾았습니다. 고성능을 위한 Redis (High Availability, HA)와 Kubernetes 구축 마스터 가이드 (Spring Session storage 설정까지) 목표 1. Redis k8s 구성 이해 Redis Sentinel 고가용성(High Availability, HA) 클러스터 구성 방식으로 설계하였습니다. Master Redis Server 실제 데이터를 저장하고 처리하는 주 서버입니다. Slave Redis Server Master soobindeveloper8.tistory.com Headless service Headless service는 Kubernetes에서 특별한 유형의 서비스입니다. 일반적인 Kubernetes 서비스는 ..
고성능을 위한 Redis (High Availability, HA)와 Kubernetes 구축 마스터 가이드 (Spring Session storage 설정까지) 목표 1. Redis k8s 구성 이해 Redis Sentinel 고가용성(High Availability, HA) 클러스터 구성 방식으로 설계하였습니다. Master Redis Server 실제 데이터를 저장하고 처리하는 주 서버입니다. Slave Redis Server Master 서버의 데이터를 복제합니다. 이는 고가용성을 높이고 읽기 쿼리의 부하 분산에 사용될 수 있습니다. Sentinel Nodes 클러스터의 상태를 모니터링하고, Master가 다운되면 새로운 Master를 선출하는 등의 작업을 수행합니다. 목표 2. Redis k8s 구축하기 Helm helm 에서 chart 내려 받습니다. helm install lucy3-redis oci://registry-1.docker.io/bitna..
[Spring - Redis] RedisReadOnlyException: READONLY You can't write against a read only replica. Master kill 시 에러 ( master / slave 구조임 ) 에러 내용 ## master 죽였을 때 Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) ~[lettuce-core-6.1.10.RELEASE.jar!/:6.1.10.RELEASE] at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) ~[lettuce-core-6.1.10.REL..