728x90
분산 서버 환경에서의 세션 사용 문제점
세션은 대표적인 로그인(회원 인증) 방식 중 하나이다.
로그인 시 서버에서 클라이언트로 세션 쿠키를 발급해주는데 분산 서버 환경에서는 이 세션에 대한 정보를 모든 서버가 공유할 수 있는 방법이 필요하다.
제대로 공유가 되지 않으면 로그인한 회원이 로그인한 서버 외의 서버에 접근할 경우 로그인이 안 된 것으로 식별되기 때문이다.
이런 문제를 해결하는 방법으로 Redis에 세션 정보를 저장하여 공유하는 방법이 있다.


Redis를 이용한 세션 공유
구별된 인스턴스에서 Redis를 공유하기 위해서 아래의 설정이 필요하다.
//build.gradle에 redis, session 관련 의존성 추가
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.session:spring-session-data-redis'
}
//application.yml 파일에 설정 추가. session.storage-type을 redis로 해두면 세션이 redis에 저장된다.
spring:
redis:
host: localhost
port: 6379
session:
storage-type: redis
이제 세션에 데이터를 저장하는 코드를 작성해보자
간단한 구현을 위해 클라이언트에서 userId를 보내면 세션을 발급해주는 방식으로 구현한다.
//userId를 key-value 구조로 저장해 세션과 매칭한다. 아래에선 간단하게 name으로 저장
@PostMapping("/login")
public void login(HttpSession session, @RequestParam String userId) {
session.setAttribute("name", userId);
}
//세션의 저장된 userId를 불러오는 코드
@GetMapping("/name")
public String returnName(HttpSession session) {
String name = (String)session.getAttribute("name");
return name;
}
'/login' 으로 userId를 보내면 쿠키가 발급되는 것을 확인할 수 있다.

728x90
'Redis' 카테고리의 다른 글
| [Redis] 캐시(Cache)의 개념과 목적 (0) | 2023.03.25 |
|---|---|
| [Redis] Redis 데이터 형식(Bitmaps) (0) | 2023.03.22 |
| [Redis] Redis 데이터 형식(Sorted Sets) (0) | 2023.03.22 |
| [Redis] Redis 데이터 형식(Hashes) (0) | 2023.03.22 |
| [Redis] Redis 데이터 형식(Sets) (0) | 2023.03.22 |