일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 페이스북
- oauth2
- 스프링 부트
- GC
- 권한
- g1
- assertj
- 페이징
- gdg
- 비동기
- apache
- clean code
- java
- 리팩토링
- jvm
- 시큐리티
- Refactoring
- Producer
- RabbitMQ
- 스프링
- Spring
- 클린코드
- OAuth
- load balancing
- 스프링부트
- Security
- JPA
- tomcat
- JWT
- spring boot
- Today
- Total
허원철의 개발 블로그
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
'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 |