redis 도입해보기

·2026년 2월 22일

1. 코드

1) config


@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory connectionFactory) {

	// RedisTemplate<K: key, V: val> 넣을 것이다. 다만 Redis는 내부적으로 byte[]만 저장!
    RedisTemplate<String, String> template = new RedisTemplate<>();
    
	
    template.setConnectionFactory(connectionFactory); 

    template.setKeySerializer(new StringRedisSerializer()); // Key를 문자열 그대로 저장
    template.setValueSerializer(new StringRedisSerializer()); // Val를 문자열 그대로 저장

    return template;
}

만약 객체 저장을 하는 경우.

RedisTemplate<String, User>

Jackson2JsonRedisSerializer<User> serializer =
        new Jackson2JsonRedisSerializer<>(User.class);

template.setValueSerializer(serializer);

2) jwt 발급 코드


  private static final long REFRESH_EXPIRE_DAYS = 7; // 만료시간
  private static final String REFRESH_KEY_PREFIX = "refresh:"; // key 입력시 사용


 private TokenResponseDTO issueToken(Long userId, String role) {
    String accessToken = jwtProvider.createAccessToken(userId, role);
    String refreshToken = jwtProvider.createRefreshToken(userId);


	// redisTemplate.opsForValue().set("key", "value",만료시간, 시간 유닛);
    // redisTemplate.opsForValue().set("key", "value"); 기본은 이렇게
    redisTemplate.opsForValue().set(
        REFRESH_KEY_PREFIX + userId,
        refreshToken,
        REFRESH_EXPIRE_DAYS,
        TimeUnit.DAYS
    );

    return new TokenResponseDTO(accessToken, refreshToken, userId, role);
    
 -----------------------------
 // 이를 적용한 코드 
 
  @Override
  public TokenResponseDTO login(LoginRequestDTO dto) {

    // 1. signId로 계정 조회
    AuthLocalAccount account = localAccountRepository.findBySignId(dto.getSignId())
        .orElseThrow(() -> new IllegalArgumentException("아이디 또는 비밀번호가 올바르지 않습니다."));

    // 2. 비밀번호 검증
    if (!passwordEncoder.matches(dto.getPassword(), account.getPassword())) {
      throw new IllegalArgumentException("아이디 또는 비밀번호가 올바르지 않습니다.");
    }
    // 3. JWT 발급
    return issueToken(account.getUserId(), account.getRoleName().name());
  }
    
  • ㄱ. hash : redisTemplate.opsForHash()
  • ㄴ. list : redisTemplate.opsForList()
  • ㄷ. set : redisTemplate.opsForSet()
  • ㄹ. zset : redisTemplate.opsForZSet()
profile
# h

0개의 댓글