본문 바로가기

개발중/Spring Boot & Redis

(11)
Spring Boot 3와 Redis: 로컬 도커 환경에서 시작하기 이 블로그 포스트에서는 로컬 개발 환경에서 Docker를 활용하여 Redis를 설치하고 구성하는 과정을 안내합니다. Redis는 다양한 개발 상황에서 선호되는 오픈 소스, 인 메모리 키-값 데이터베이스로, 빠른 성능과 높은 확장성을 제공합니다. 또한, 최신 Spring Boot 3 프레임워크와의 통합을 통해 실제 어플리케이션 개발 상황을 시뮬레이션하며 기초적인 CRUD 작업을 수행하는 예제를 소개하고자 합니다. Docker를 이용한 Redis 설치docker 에서 redis 설치 후 실행 시키는 방법 1. Redis 이미지 다운로드 Redis Docker 이미지를 다운로드합니다. 터미널 또는 커맨드 라인을 열고 다음 명령을 실행합니다: docker pull redis2. Redis 컨테이너 실행 다운로드..
Spring Boot 3.x 및 Security 6.x를 이용한 중복 로그인 관리 방법 이 글은 Spring Boot 3.x와 Security 6.x를 활용하여 중복 로그인을 관리하는 방법에 대해 설명합니다.Spring Security의 세션 관리 기능을 사용하여 동일 사용자의 중복 로그인 시도를 제어하는 방법을 다룹니다.  중복 로그인은 보안 및 세션 관리 측면에서 중요한 문제입니다. 특히 Spring Boot와 Spring Security를 사용하여 안전하고 효율적으로 중복 로그인을 관리하는 방법에 대해 알아보겠습니다. 로그인 성공 시 세션에 사용자 정보 저장하기 먼저, 사용자의 로그인 정보를 세션에 저장하는 방법을 살펴보겠습니다. Spring Security에서는 로그인 성공 시에 AuthenticationSuccessHandler를 통해 로그인 이후의 작업을 처리할 수 있습니다. 아..
Spring Boot와 Redis를 사용한 데이터 저장 및 관리 Redis는 빠른 오픈 소스 인-메모리 키-값 데이터 스토어로, 다양한 데이터 구조를 지원합니다. Spring Boot 애플리케이션에서 Redis를 사용하면, 데이터 캐싱, 메시지 브로커 등 다양한 방식으로 활용할 수 있습니다.  이 글에서는 Spring Boot를 이용하여 Redis 데이터 구조를 어떻게 조작하는지 보여드립니다.  설정 사항 먼저, Redis 서버가 설치되어 있어야 하며, application.properties 파일에 다음과 같이 Redis 서버 접속 정보를 설정해야 합니다: spring.redis.host=localhostspring.redis.port=6379  Redis 데이터 유형 및 조작 StringRedis CLI127.0.0.1:6379> SET key valueOK127..
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 환경에서의 serialVersionUID 관리 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 에 있는 두 개의 계정에 대한 ..