SpringBootd에서 간단한 설정만으로 메모리 기반의 세션관리에서 Redis 기반의 세션관리로 적용이 가능하다. 세션 Storage로 Redis를 사용하면 토큰을 사용하지 않는 환경에서도 세션 공유에 대한 부담없이 유연하게 어플리케이션의 Scale-Out이 가능하다.
Redis 구성
Redis를 자체를 테스트하는 것이 아님으로 간단하게 Docker로 구성한다. 아래 명령으로 Redis 컨테이너를 실행한다.
docker run --name redis -p 6379:6379 -d redis
테스트용 Redis 준비는 이걸로 끝이다.
SpringBoot 설정
의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.session:spring-session-data-redis'
spring-boot-starter-data-redis로 SpringBoot에서 Redis를 사용하겠다는 설정을하고, spring-session-data-redis로 세션 Storage로 Redis를 사용하겠다는 설정을 추가한다.
application.yml 설정
spring:
redis:
host: localhost
port: 6379
# password: # todo
application.yml에 간단히 redis접속 정보를 localhost, 6379로 설정한다.
@EnableRedisHttpSession 추가
@SpringBootApplication
@EnableRedisHttpSession
public class SpringbootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDemoApplication.class, args);
}
}
Application Main클래스나 별도 JavaConfig클래스 상단에 @EnableRedisHttpSession 어노테이션을 추가해준다. 여기서는 별도 설정파일은 없어 Main클래스에 추가해줬다.
테스트
테스트 Controller 작성
@RestController
@RequestMapping("/redis")
public class RedisSessionController {
@GetMapping("/test")
public ResponseEntity<String> test(HttpSession session){
session.setAttribute("name", "HongGilDong");
return ResponseEntity.ok(session.getId());
}
}
테스트용 컨트롤러를 위와 같이 작성하고 어플리케이션을 실행하고 아래와 같이 호출해본다
Redis 확인
테스트 호출이 정상적으로 되었으면 이제 Redis에 접속해서 확인을 해본다. 실행중인 Redis 컨테이너에 아래 명령으로 접속한다.
docker exec -it redis bash
그리고 redis-cli 명령어를 통해 redis에 접속한 후 keys * 명령으로 세션을 조회해본다. 브라우저에서 확인한 세션ID와 동일한 세션 정보를 확인할 수 있다.
Redis 세션 정보
1. spring:session:sessions:세션ID = 세션생성시간, 최근조회시간, 최대 타임아웃 허용시간, 세션의 저장된 데이터 저장
2. spring:session:sessions:expires:세션ID = 해당 세션의 만료키로 사용
3. spring:session:expirations:시간 = 해당 시간이 되면 세션 삭제
'개발 > SpringBoot' 카테고리의 다른 글
SpringBoot Redis 활용 - Pub/Sub (0) | 2022.12.16 |
---|---|
SpringBoot Redis 활용 - RedisTemplate, RedisRepository (0) | 2022.12.16 |
SpringBoot SpringDoc(OpenAPI)을 이용한 Swagger 그룹화, 전역인증&Parameter 설정 (0) | 2022.08.03 |
SpringBoot SpringDoc(OpenAPI)을 이용한 Swagger 적용 (0) | 2022.08.02 |
SpringBoot Log4jdbc 를 사용한 Mybatis 쿼리 로그 출력 (0) | 2022.06.05 |
댓글