text/Java
springboot 에 redis 세션 서버 사용
hoonzii
2024. 9. 1. 11:31
반응형
회사에서 지금 웹 서비스 중에 하나, 서버 이중화 한다고 세션 이중화 방안에 대해 알아보라고 하셔서...
팀 내 공유하려고 정리한 사항 블로그에도 살짝.
문제 상황
- 이중화 시 서버별 세션정보 불일치로 로그인 불가
해결 방안
- sticky session
- 웹 서비스 서버가 여러 대 있을 경우, 접속 시 세션이 생성된 서버로만 요청을 보내게끔 구성
- 단점) 여러대의 서버를 둬도 하나의 서버로만 몰릴 가능성 존재
- session clustering
- 여러 대의 서버의 세션 저장소를 하나로 관리
- 한 서버에 생성된 세션을 다른 서버 세션 저장소에도 복제
- 단점) 세션 생성 시마다 다른 서버에 복제, 메모리 필요, 성능저하 가능성 존재
- tomcat all-to-all session replication
- tomcat 내 delta manager, backup manager 존재
- delta manager -> 클러스터에 속한 다른 was에 세션을 전부 복제
- backup manager -> 클러스터 내 자신의 backup was 에게만 세션을 복제
- 여러 대의 서버의 세션 저장소를 하나로 관리
- session server
- 세션 정보만 관리하는 별도의 서버 구성 (ex. redis, memcached)
- 단점) 해당 서버가 죽을 경우, 세션 정보 전부 사라짐
적용 방안 결론! ⇒ redis session server 방법 사용 (spring boot 관련 설정 편의)
적용 방법
- redis 설치 (default port : 6379)
- ref)
window 레디스 설치 https://ittrue.tistory.com/318
linux 레디스 설치 https://log4day.tistory.com/6
프로젝트 설정 (spring boot 2.7.x / java 1.8 기준)
1. pom.xml 설정
1
2
3
4
5
6
7
8
9
10
11
12
|
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
|
cs |
2. application.properties 설정
1
2
3
4
5
6
|
# redis
spring.session.store-type=redis
spring.redis.host=localhost
spring.redis.password=
spring.redis.port=6379
spring.session.redis.namespace=spring:jsession
#redis 키로 들어갈 네임스페이스 설정 default는 spring:session |
cs |
3. xxxApplication.java 설정
1
2
3
4
5
6
7
8
9
10
|
//어노테이션 추가
@SpringBootApplication
@EnableRedisHttpSession(redisNamespace = "${spring.session.redis.namespace}")
public class RedisClusteringDemoApplication {
public static void main(String[] args) {
SpringApplication.run(RedisClusteringDemoApplication.class, args);
}
}
|
cs |
4.spring Security 설정
- 로그인, 로그아웃시 spring에서 알아서 session 등록/제거 진행
한다고 예고 받아서 간략정리했고, 나중에 실제로 하게 되면 뭐 또~ 그때 가서 추가적으로 진행하는 걸로~
참고 url
- 해결방안 종류 https://creeraria.tistory.com/38
- tomcat manager 관련 https://eng-nate.tistory.com/13
- redis 내부 동작 관련 https://hyuntaeknote.tistory.com/8
- redis 설정 관련
- redis key, value 조회 관련
반응형