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배가 넘게 속도가 향상됐다.
'DBMS > Redis' 카테고리의 다른 글
[Spring Boot + Redis 캐싱] 좌석 목록 조회 캐싱 리팩토링 & 역직렬화 이슈 해결기 (1) | 2025.04.18 |
---|---|
[Redis] Redis 캐싱 전략 (0) | 2025.01.14 |
[Redis] 기본 명령어 (0) | 2025.01.14 |
[Redis] Redis란?, 설치 (0) | 2025.01.07 |
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배가 넘게 속도가 향상됐다.
'DBMS > Redis' 카테고리의 다른 글
[Spring Boot + Redis 캐싱] 좌석 목록 조회 캐싱 리팩토링 & 역직렬화 이슈 해결기 (1) | 2025.04.18 |
---|---|
[Redis] Redis 캐싱 전략 (0) | 2025.01.14 |
[Redis] 기본 명령어 (0) | 2025.01.14 |
[Redis] Redis란?, 설치 (0) | 2025.01.07 |