본문 바로가기

기술 학습

Spring Boot + Redis로 세션 공유하기

1. 개요

Spring Boot 애플리케이션을 여러 서버에서 운영할 때, 사용자의 세션을 공유하는 것이 중요합니다. 이 글에서는 Redis를 활용한 Spring Boot 세션 공유 방법을 설명합니다.

 

2. 왜 Redis를 사용할까?

  • 속도: 메모리 기반 저장소라서 빠름
  • 확장성: 여러 서버 간 세션 동기화 가능
  • 편리한 데이터 구조: Key-Value 형태로 저장

 

3. 프로젝트 설정

3.1. Redis 의존성 추가

Spring Boot 프로젝트의 build.gradle에 Redis 관련 의존성을 추가합니다.

implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.session:spring-session-data-redis'

3.2. Redis 설정 파일 (application.yml)

spring:
  redis:
    host: localhost
    port: 6379
  session:
    store-type: redis

3.3. Redis 세션 설정

Spring Boot에서 Redis 기반 세션 관리를 활성화하기 위해 @EnableRedisHttpSession 어노테이션을 추가합니다.

@Configuration
@EnableRedisHttpSession
public class RedisSessionConfig {
}

 

4. 세션 공유 테스트

4.1. 컨트롤러 생성

@RestController
@RequestMapping("/session")
public class SessionController {

    @GetMapping("/set")
    public String setSession(HttpSession session) {
        session.setAttribute("username", "user123");
        return "Session set successfully!";
    }

    @GetMapping("/get")
    public String getSession(HttpSession session) {
        return "Stored username: " + session.getAttribute("username");
    }
}

4.2. 실행 및 테스트

  1. localhost:8080/session/set을 호출하여 세션을 저장합니다.
  2. localhost:8080/session/get을 호출하여 저장된 세션 값을 확인합니다.

 

5. 성능 최적화 및 추가 설정

  • TTL(Time To Live) 설정: 세션 만료 시간을 조정하려면 spring.session.timeout 값을 설정합니다.
  • Redis 클러스터 활용: 여러 Redis 노드를 구성하여 가용성을 높일 수 있습니다.
spring:
  session:
    timeout: 1800  # 30분

 

6. 결론

여러 개의 Spring Boot 서버에서 Redis를 이용한 세션 공유가 가능합니다. 이를 통해 부하 분산 및 확장성을 확보할 수 있습니다.

Redis를 활용한 세션 관리는 고속성과 안정성을 갖춘 솔루션으로, 실무에서도 널리 사용됩니다. 추가적인 보안 및 성능 최적화 방법을 적용하여 더욱 효율적인 시스템을 구축할 수 있습니다.