[프로젝트] 23. 로그아웃 기능을 위한 Redis 추가
프로젝트에 로그아웃 기능을 위해 Redis를 추가하는 것은 세션 관리 및 토큰 무효화를 효과적으로 처리할 수 있게 합니다. Redis는 빠른 데이터 처리 속도와 다양한 데이터 구조를 지원하는 인메모리 데이터 저장소로, 분산 세션 관리, 캐싱, 메시지 브로커 등 다양한 용도로 사용됩니다. 로그아웃 기능에서 Redis를 사용하는 주요 목적은 사용자의 JWT 토큰을 저장하여 유효성을 관리하는 것입니다.
Gradle 설정
build.gradle 파일에 Redis와 관련된 의존성을 추가합니다. Spring Boot는 Redis를 위한 spring-boot-starter-data-redis 스타터를 제공합니다.
// redis
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
Docker Compose를 이용한 Redis 컨테이너 설정
docker-compose.yml 파일에 Redis 서비스를 추가하여 로컬 개발 환경에서 Redis 인스턴스를 쉽게 실행할 수 있도록 합니다.
cache-database:
image: redis
container_name: spring_cache
expose:
- 6379
ports:
- "6379:6379"
RedisConfig 설정
RedisConfig 클래스를 생성하여 Spring Boot 애플리케이션에서 Redis를 사용할 수 있도록 구성합니다. 이 클래스는 Redis 연결과 데이터 직렬화 방식을 정의합니다.
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(host, port);
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
// 일반적인 key:value의 경우 시리얼라이저
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
// Hash를 사용할 경우 시리얼라이저
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
// 모든 경우
redisTemplate.setDefaultSerializer(new StringRedisSerializer());
return redisTemplate;
}
}
application.yml 설정
application.yml 파일에 Redis 서버의 호스트와 포트 정보를 설정합니다. 이 정보는 RedisConfig 클래스에서 사용됩니다.
redis:
host: localhost
port: 6379
Redis를 이용한 로그아웃 기능 구현
로그아웃 기능에서 Redis를 사용하는 방법은 로그인 시 발급된 JWT 토큰을 Redis에 저장하고, 로그아웃 요청 시 해당 토큰을 Redis에서 삭제하거나 무효화하는 방식으로 진행됩니다. 사용자가 로그아웃을 요청하면, 해당 사용자의 토큰을 Redis에서 찾아 삭제하거나 만료 시간을 업데이트하여 더 이상 유효하지 않도록 처리합니다.
결론
이러한 접근 방식은 토큰의 유효성을 실시간으로 관리할 수 있게 하며, 분산된 시스템 환경에서도 일관된 세션 관리를 가능하게 합니다. Redis를 사용한 로그아웃 기능 구현은 애플리케이션의 보안을 강화하고, 사용자 경험을 향상시키는 중요한 요소가 됩니다.