본문 바로가기

개발중/Spring Boot & Redis

로컬에서는 Spring Session, 배포에서는 Redis: 세션 저장소 분리 전략

728x90
반응형

이슈

개발자들이 로컬 환경에서 각각 Redis를 설정하는 것은 번거로운 작업입니다. (아마도 ? web 팀에서는 이러한 결론이 나왔습니다!) 이러한 문제를 해결하기 위해, 로컬 개발 환경에서는 Spring Session Storage를 사용하고, 실제 배포 환경에서는 Redis Session Storage를 사용하는 방법을 채택했습니다. 이렇게 하면 개발자는 로컬에서 별도의 Redis 설정 없이도 작업을 진행할 수 있고, 실제 운영 환경에서는 Redis의 뛰어난 성능과 안정성을 활용할 수 있습니다.

 

 

해결 방안

Spring의 Profile 기능을 이용해 로컬과 배포 환경에서 세션 저장소를 분리하는 방법을 구현했습니다.

 

/**
 * dev / prod 환경에서는 Redis Session Storage 를 사용합니다.
 * @author sbjung
 */
@Profile("!local")
@Configuration
@EnableRedisHttpSession
public class RedisSessionConfiguration {

    @Bean
    public SessionRegistry springSessionBackedSessionRegistry(RedisIndexedSessionRepository redisIndexedSessionRepository) {
        return new SpringSessionBackedSessionRegistry<>(redisIndexedSessionRepository);
    }
}

 

로컬 환경에서는 SessionRegistryImpl을 사용하였습니다.

 

/**
 * dev / prod 환경에서는 Spring Session Storage 를 사용합니다.
 * @author sbjung
 */
@Profile("local")
@Configuration
public class SessionConfiguration {

    @Bean
    public SessionRegistry springSessionBackedSessionRegistry( ) {
        return new SessionRegistryImpl();
    }
}

 

배포 환경에서는 Redis를 사용하기 위해 RedisIndexedSessionRepository와 SpringSessionBackedSessionRegistry를 활용했습니다.

 

local 프로필에서 Redis 자동 구성을 비활성화하려면, application-local.properties 또는 application-local.yml 파일에 다음 설정을 추가합니다.

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
728x90
반응형