Data/Redis

[Redis] Redis, Spring session을 이용하여 login 구현하기

누구세연 2024. 5. 4. 21:35

Spring에서 redis를 이용하여 간단하게 login을 구현해보겠습니다.

 

 

build.grable 에 추가

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

 

 

application.yaml 설정

spring: 
  session:
    store-type: redis
    redis:
      repository-type: indexed
      flush-mode: on_save
  data:
    redis:
      host: 127.0.0.1
      password: password123
      port: 6379
  • 세션 저장소로 Redis를 사용하기 위해 지정해줍니다.
    리포지토리 유형은 인덱싱된 리포지토리를 사용하였습니다.
    그리고 세션 변경 내용을 저장할 때마다 Redis에 즉시 flush(저장)합니다.
  • Redis 서버의 호스트 주소, 서버의 비밀번호, 서버의 포트 번호를 지정합니다.

 

RedisConfig 

`@EnableRedisRepositories` 어노테이션을 선언하여 Redis 레포지토리를 활성화합니다.
이를 통해 Spring Data Redis를 사용하여 Redis 데이터베이스와 상호작용할 수 있습니다.

@Configuration
@EnableRedisRepositories
public class RedisConfig {
  @Value("${spring.data.redis.host}")
  private String redisHost;

  @Value("${spring.data.redis.port}")
  private int redisPort;

  @Value("${spring.data.redis.password}")
  private String password;

  //LettuceConnectionFactory를 사용하여 Redis 연결을 설정하고 반환
  @Bean
  public RedisConnectionFactory redisConnectionFactory() {
    RedisStandaloneConfiguration redisConfiguration = new RedisStandaloneConfiguration();
    redisConfiguration.setHostName(redisHost);
    redisConfiguration.setPort(redisPort);
    redisConfiguration.setPassword(password);
    LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisConfiguration);
    return lettuceConnectionFactory;
  }

  // RedisTemplate 빈 정의
  @Bean
  public RedisTemplate<String, String> redisTemplate() {
    RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();

    redisTemplate.setKeySerializer(new StringRedisSerializer());
    redisTemplate.setValueSerializer(new StringRedisSerializer());
    redisTemplate.setConnectionFactory(redisConnectionFactory());

    return redisTemplate;
  }
}

 

 

로그인 로직

"user"이라는 이름으로 속성값을 추가하여 세션을 저장합니다.

Session session = sessionRepository.createSession();
session.setAttribute("admin", adminInfo.getUserId());
sessionRepository.save(session);

return new LoginResponse(adminInfo.getUserId(), session.getId());

 

로그인을 시도하고 아래에서 저장된 정보를 확인해보겠습니다!!

 

 

Redis에 저장된 세션 정보

저는 docker에 Redis를 설치하여 확인하였습니다.

먼저 실행되고 있는 컨테이너 목록을 확인합니다.

docker ps -a

 

이때 목록에서 container Id를 확인하여 아래 명령어를 실행합니다.
Redis 컨테이너 내부의 Redis cli를 실행하기 위한 명령어입니다.

이를 통해 Redis 서버와 상호작용하여 데이터베이스에 대한 명령을 실행할 수 있습니다.

docker exec -it 'container id' redis-cli

 

 

Redis에서 사용 가능한 키를 반환하여 확인해보겠습니다.

keys *

 

  1. `spring:session:sessions:expires:556d2c1d-3806-4849-871c-195f095fb100`
    이 키는 세션 데이터의 만료 정보를 저장합니다. 여기서 "556d2c1d-3806-4849-871c-195f095fb100"은 세션의 고유 식별자입니다. 만료 정보는 세션이 언제 만료되는지를 나타내는 타임스탬프로 표시됩니다.
  2. `spring:session:expirations:1714556460000`
    이 키는 세션의 만료 시간을 관리하는 데 사용됩니다. 여기서 "1714556460000"은 만료 시간을 나타내는 UNIX 타임스탬프입니다. 만료 시간이 지나면 세션 데이터가 삭제됩니다.
  3. `spring:session:sessions:556d2c1d-3806-4849-871c-195f095fb100`
    이 키는 실제 세션 데이터를 저장합니다. 여기서 "556d2c1d-3806-4849-871c-195f095fb100"은 세션의 고유 식별자입니다. 이 키에는 세션에 관련된 데이터가 저장되며, 클라이언트가 서버에 요청할 때마다 이 데이터가 사용됩니다.

 

'Data > Redis' 카테고리의 다른 글

[Redis] redis에 대해  (0) 2024.04.28