본문 바로가기

개발중/Spring Boot & Redis

(13)
로컬에서는 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 에 있는 두 개의 계정에 대한 ..
[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.RELE..
[Spring - Redis] READONLY You can't write against a read only replica. redis 를 단일 master 구조로 구성했을 때는 해당 포스팅처럼 연결했는데 잘 연결이 되었습니다. 그런데 master / slave 구조로 바꾸니 아래와 같이 에러가 났습니다. READONLY You can't write against a read only replica. master / slave 구조상 master 는 조회, 등록이 가능하나 slave 는 조회만 가능합니다.slave 는 master 의 복제본이기 때문에 등록이 불가능합니다. 근데 뭔가 에러를 읽다보니 spring 에서 slave 에게 쓰기를 하고 있는 기분이 들었습니다. ( slave 는 READONLY 입니다. )그러면 에러가 나는게 당연하지만 ... 저는 k8s 에 reids 를 구성했고, spring 의 redis 접근 정..
Spring Session storage 를 Redis 로 설정하기 ! Redis 로컬 설치curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpgecho "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.listsudo apt-get updatesudo apt-get install redissudo service redis-server start local 에서 실행redis 접속redis-cli redis 실시간 모니터링redis-cli MONITOR maven 추가 org.springframewo..