Spring Boot - Redis를 활용한 Session Clustering
이번 편은 Session Clustering 알아보기에 이어 Spring Boot에서 Redis를 활용하여 빠르게 Session을 공유해보록 하겠습니다.
우선 전편에서 Redis에 대해 자세하게 설명하지 않아, 간단하게 설명하고 넘어가겠습니다.
Redis 란?
- 메모리기반 Key/Value Store 로 No-SQL 로 구분됩니다. 또한 이와 비슷한 memcached와 같은 In memory 솔루션으로도 구분되기도 합니다. 모든 데이터는 메모리에 저장되고, 매우 빠른 Write/Read 속도를 보장합니다. 하지만 메모리기반이기 때문에 실 데이터를 저장하는 것보다는 Session 과 같은 데이터를 담아두기에 적합하다고 볼 수 있습니다. 관계형 데이터베이스와 같은 데이터 형식보다는 한 로우 형태의 데이터를 담아두이게 적합합니다.
※ 기본적으로 패스워드는 없습니다 만약 패스워드가 필요하다면 Redis 경로에 가셔서 conf 파일에서 requirepass 라는게 주석(#) 이 되어 있는데 주석을 풀고 원하는 패스워드를 설정하신 다음, Redis 를 서비스 재시작해주시면 됩니다.
How..!!
- Security와 함께 추가 설정을 하기 위해 Spring Boot - Security 나 Github 를 참고하여 진행 하겠습니다.
1. Gradle 설정
2. Properties 설정
3. Config 설정
4. Result
1. Gradle 설정
- spring-session-data-redis 가 추가하여 Redis를 연동할 것 입니다.
1 2 3 4 5 6 7 8 9 | dependencies { compile('org.springframework.boot:spring-boot-starter-data-jpa') compile('org.springframework.session:spring-session-data-redis:1.2.2.RELEASE') compile('org.springframework.boot:spring-boot-starter-security') compile('org.springframework.boot:spring-boot-starter-web') runtime('com.h2database:h2') compileOnly('org.projectlombok:lombok') testCompile('org.springframework.boot:spring-boot-starter-test') } | cs |
2. Properties 설정
1 2 3 4 | spring.session.store-type=REDIS spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password=wonchul | cs |
① story-type 을 REDIS로 하겠다는 설정
② host 설정(Default : localhost)
③ port 설정(Default : 6379)
④ password 설정(Default : X / conf파일에서 설정 및 재시작 필요)
3. Config 설정
1 2 3 4 | @EnableRedisHttpSession public class RedisSessionConfig { } | cs |
@EnableRedusHttpSession : springSessionRepositoryFilter라는 이름의 스프링 Bean을 만들어 줍니다.
※ 여기서 JedisConnectionFactory를 Bean으로 등록해준다면 application.properties에서 설정 값이 아닌 새로운 설정 값을 Redis 연결을 할 수 있습니다.
----------------------------------------- 2016-12-28 수정
!! 추가적으로, 간혹 enablerediskeyspacenotificationsinitializer 라는 문구와 함께 Exception을 내뿜는데
① 버전이 맞지 않아 생기는 문제 -> Version Up
② 설정이 바뀌어 생기는 문제 -> IP, Port, Password 등을 확인
이와 같이, 해결 할 수 있습니다.
4. Result
- CommandLineRunner 로 id : wonchul / pw : 1234 로 미리 넣어둔 뒤, 스프링 기본 로그인 화면에서 로그인을 시도합니다.
로그인을 하게 되면, session이 Redis에 저장되어 지는 것을 볼 수 있습니다. 그리고 스프링 부트를 재시작한 뒤, 재접속을 해도 세션이 지속적으로 유지되는 것을 볼 수 있습니다. (매니저 Tool 을 이용하여, 확인 해보면 Redis는 db0~db15 로 16개으로 구성이 되는데 다른 설정이 없으면 db0에 저장됩니다.)
----------------------------------------- 2016-12-28 추가
① RedisHttpSessionConfiguration.class 설정에 @EnableScheduling 존재하여 따로 설정하지 않아도 스케쥴러를 사용가능 합니다.
참고
http://docs.spring.io/spring-session/docs/1.0.x/reference/html5/guides/rest.html