DBMS/Redis

[Redis] redis를 Spring Boot에 추가

챛채 2025. 2. 14. 18:27

1. Spring Boot 프로젝트에 Redis 셋팅 추가

✅ Spring Boot 프로젝트에 Redis 셋팅 추가하기

1. Redis 의존성 추가하기

  • build.gradle
dependencies {
  ...
  implementation 'org.springframework.boot:spring-boot-starter-data-redis'
}

 

2. application.yml 수정하기

jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
  data:
    redis:
      host: localhost
      port: 6379

logging:
  level:
    org.springframework.cache: trace # Redis 사용에 대한 로그가 조회되도록 설정

 

3. Redis 설정 추가하기

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

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

  @Bean
  public LettuceConnectionFactory redisConnectionFactory() {
    // Lettuce라는 라이브러리를 활용해 Redis 연결을 관리하는 객체를 생성하고
    // Redis 서버에 대한 정보(host, port)를 설정한다. 
    return new LettuceConnectionFactory(new RedisStandaloneConfiguration(host, port));
  }
}

 

  • config/RedisCacheConfig
@Configuration
@EnableCaching // Spring Boot의 캐싱 설정을 활성화
public class RedisCacheConfig {
  @Bean
  public CacheManager boardCacheManager(RedisConnectionFactory redisConnectionFactory) {
    RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration
        .defaultCacheConfig()
	      // Redis에 Key를 저장할 때 String으로 직렬화(변환)해서 저장
        .serializeKeysWith(
            RedisSerializationContext.SerializationPair.fromSerializer(
                new StringRedisSerializer()))
        // Redis에 Value를 저장할 때 Json으로 직렬화(변환)해서 저장
        .serializeValuesWith(
            RedisSerializationContext.SerializationPair.fromSerializer(
                new Jackson2JsonRedisSerializer<Object>(Object.class)
            )
        )
        // 데이터의 만료기간(TTL) 설정
        .entryTtl(Duration.ofMinutes(1L));

    return RedisCacheManager
        .RedisCacheManagerBuilder
        .fromConnectionFactory(redisConnectionFactory)
        .cacheDefaults(redisCacheConfiguration)
        .build();
  }
}

 

4. 필요 메소드에 캐싱 로직 추가해서 사용하기 

  • @Cacheable(cacheNames = "getBoards", key = " 'boards:page: ' + #pag e:' + #page + ':size:' + #size", cacheManager = "boardCacheManager")
    • @Cacheable 어노테이션을 붙이면 Cache Aside전략으로 캐싱이 된다. 즉, 해당 메서드로 요청 들어오면 레디스 확인 후 데이터 있으면 레디스의 데이터 조회하여 바로 응답하고 데이터가 없다면 메서드 내부의 로직을 실행시킨뒤에 return 값으로 응답한다! 그리고 return 값을 레디스에 저장한다.
  • 속성 값
    • cacheNames: 캐시 이름 설정
    • key : Redis에 저장할 Key의 이름 설정
    • cacheManager : 사용할 cacheManager의 Bean 이름 지정

 

5. TEST

  • Spring Boot 서버를 실행시켜서 API 실행시켜보기

Cache가 존재하지 않아서 DB로부터 데이터를 조회한 뒤 Cache를 생성했다고 로그가 찍혀있다.

한 번 더 새로고침을 해보면 Cache가 생성(Creating)되지 않고 기존 Cache를 조회해왔음을 알 수 있다.

 

  • Redis-cli 활용해서 정작적으로 캐싱이 됐는지 확인해보면 
$ redis-cli 

$ keys * # Redis에 저장되어 있는 모든 key 조회
$ get getBoards::boards:page:1:size:10 # 특정 key의 Value 조회
$ ttl getBoards::boards:page:1:size:10 # 특정 key의 TTL 조회

 

redis 적용 전 

redis 적용 후



여러번 요청을 보내보니 평균 10~20ms 정도의 속도가 나오는 걸 확인 할 수 있다! 10배가 넘게 속도가 향상됐다.