허원철의 개발 블로그

Spring Boot - Redis를 활용한 Session Clustering 본문

web

Spring Boot - Redis를 활용한 Session Clustering

허원철 2016. 12. 13. 18:03

이번 편은 Session Clustering 알아보기에 이어 Spring Boot에서 Redis를 활용하여 빠르게 Session을 공유해보록 하겠습니다.


우선 전편에서 Redis에 대해 자세하게 설명하지 않아, 간단하게 설명하고 넘어가겠습니다.



Redis 란?


- 메모리기반 Key/Value Store 로 No-SQL 로 구분됩니다. 또한 이와 비슷한 memcached와 같은 In memory 솔루션으로도 구분되기도 합니다. 모든 데이터는 메모리에 저장되고, 매우 빠른 Write/Read 속도를 보장합니다. 하지만 메모리기반이기 문에 실 데이터를 저장하는 것보다는 Session 과 같은 데이터를 담아두기에 적합하다고 볼 수 있습니다. 관계형 데이터베이스와 같은 데이터 형식보다는 한 로우 형태의 데이터를 담아두이게 적합합니다.


Redis 윈도우 설치


Redis 매니저 Tool


※ 기본적으로 패스워드는 없습니다 만약 패스워드가 필요하다면 Redis 경로에 가셔서 conf 파일에서 requirepass 라는게 주석(#) 이 되어 있는데 주석을 풀고 원하는 패스워드를 설정하신 다음, Redis 를 서비스 재시작해주시면 됩니다.



How..!!


- Security와 함께 추가 설정을 하기 위해 Spring Boot - SecurityGithub 를 참고하여 진행 하겠습니다.


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

http://springboot.tistory.com/13

'web' 카테고리의 다른 글

Spring Boot - Resource 개선하기  (414) 2016.12.25
HTTP1.1 Header  (404) 2016.12.17
JNDI 살펴보기  (426) 2016.12.09
페이징에 대한 이해 - 2  (396) 2016.12.08
페이징에 대한 이해 - 1  (429) 2016.12.06
Comments