728x90
- 이중화는 시스템의 부하를 분산하고, 단일 실패 지점(Single Point of Failure, SPOF) 없이 서비스를 지속적으로 제공하는 아키텍처를 구현하는 것을 목표로 하며 스프링 시큐리티는 이러한 이중화 환경에서 인증, 권한 부여, 세션 관리 등의 보안 기능을 제공
- 스프링 시큐리티는 사용자 세션을 안전하게 관리하며 이중화된 환경에서 세션 정보를 공유할 수 있는 메커니즘을 제공하며 대표적으로 레디스 같은 분산 캐시를 사용하여 세션 정보를 여러 서버 간에 공유 가능
레디스 세션 서버
- 로컬 환경 (Linux 기준)
- 대부분의 Linux 에서 apt 또는 yum을 사용하여 레디스를 설치 가능
- sudo apt-get install redis-server, sudo yum install redis ..
- 설치 후 sudo service redis-server start 명령어로 레디스 서버를 시작
- 대부분의 Linux 에서 apt 또는 yum을 사용하여 레디스를 설치 가능
- Docker를 사용한 설치
- Docker 가 설치된 환경에서 다음 명령어로 레디스 컨테이너를 실행 가능
- docker run --name redis -p 6379:6379 -d redis
- 이 명령어는 레디스 이미지를 다운로드하고, 이름이 redis인 컨테이너를 백그라운드에서 실행
- 포트 6379를 사용하여 로컬 호스트와 연결
- Docker 가 설치된 환경에서 다음 명령어로 레디스 컨테이너를 실행 가능
- Dependency
implementation 'org.springframework.session:spring-session-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-data-redis
- application.properties
spring.data.redis.host=localhost
spring.data.redis.port= 6379
- Redis 설정 클래스
@Configuration
@EnableRedisHttpSession
public class RedisConfig {
@Value("${spring.data.redis.host}")
private String host;
@Value("${spring.data.redis.port}")
private int port;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(host, port);
}
}
세션 관리와 이중화의 필요성
- 로드 밸런서는 여러 클라이언트의 요청을 여러 서버에 분산시켜 트래픽을 분산하고 시스템의 부하를 줄이는 역할
- 예를 들어, 1번 클라이언트가 1번 서버에 연결되어 인증을 완료하면, 1번 서버는 세션을 생성하고 이를 저장
- 만약 1번 서버가 다운되거나 문제가 생기면, 1번 클라이언트는 로드 밸런서에 의해 2번 서버나 3번 서버로 연결
- 이 때, 1번 클라이언트의 세션 정보가 1번 서버에만 저장되어 있다면, 2번이나 3번 서버는 클라이언트를 다시 인증해야 하는 문제가 발생
Redis를 이용한 세션 공유
- 위와 같은 문제를 해결하기 위해, 서버들은 세션 정보를 공유할 수 있는 중앙 저장소를 사용 → Redis가 그 역할을 함
- Redis는 세션 정보를 여러 서버 간에 공유할 수 있도록 해주며, 어떤 서버가 다운되더라도 다른 서버들이 세션 정보를 Redis에서 꺼내와서 클라이언트의 요청을 처리
Redis를 사용하지 않는 경우의 세션
- 서버마다 WAS(Tomcat)에서 내부적으로 세션을 생성하기 때문에 서버 간의 세션이 공유되지 않는 것
728x90
'Language > Spring Security' 카테고리의 다른 글
[PasswordEncoder] BCryptPasswordEncoder (0) | 2024.08.28 |
---|---|
Custom DSLs - HttpSecurity.with(AbstractHttpConfigurer) (0) | 2024.08.03 |
다중 보안 설정 (0) | 2024.08.03 |
Spring MVC 비동기 통합 - WebAsyncManagerIntergrationFilter (0) | 2024.08.03 |
Spring MVC 통합 - @AuthenticationPrincipal (0) | 2024.08.03 |