배경
회사에서 내가 운영하고 있는 애플리케이션 중에는 별도의 Redis 서버를 이용하여 로그인 기능을 제공하고 있는데,
Spring Data에서 제공하는 Redis도 있다. 추후 쓸일이 있을 듯하여 어떤 차이가 있는지 어떤 용도로 사용될 수 있는지 간략히 알아보았다.
Spring Data Redis
- Spring Data 의 일부로, Spring application 을 이용해 Redis의 손쉬운 설정 및 접근을 제공한다.
- 그리하여 사용자가 인프라 걱정으로부터 자유로울 수 있게 해준다.
- 임베디드 레디스 서버
- 일반적으로 실제 DB로써의 역할로써 사용하는 것보다는 별도의 저장소가 존재하고 이를 캐싱하여 성능을 향상시키는 역할로써 사용되는 듯하다.
의존성
spring-boot-starter-cache, spring-boot-starter-data-redis 를 라이브러리에 추가한다.
설정
- 클래스 상단에 @EnableCaching 을 선언하고 캐싱 설정할 메서드에 @Cacheable 애노테이션을 달면 된다.
- 이때 만약 캐시 단위 별 구분이 필요하다면 value 옵션을 사용한다.
- Spring Boot가 cache configuration이 default 설정되어있는 RedisCacheManager로 자동 설정해준다.
ㄴ 물론 수정할 수 있다.
// TTL 설정, Null 값에 대한 캐싱 비활성화, 캐시 생성 위한 기본 직렬화 전략 정의
@Bean
public RedisCacheConfiguration cacheConfiguration() {
return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(60))
.disableCachingNullValues()
.serializeValuesWith(SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
}
더 많은 커스텀을 하고 싶다면 RedisCacheManagerBuilderCustomizer
를 등록하면 된다.
Ex) 각 캐시 단위로 캐싱 동작을 세밀하게 조정할 수 있다.
- 연결의 기본 세부 정보는 localhost:6379 이다. 연결 정보 또한 조정할 수 있다.
예시
데이터베이스로부터 item 정보를 조회하는 ItemService 컴포넌트 존재.
해당 작업은 실제로 비용이 많이 들 수 있는 작업이며, 캐싱하기에 적합한 후보이다.
@Cacheable 애노테이션을 추가한다.
@Cacheable(value = "itemCache")
public Item getItemForId(String id) {
return itemRepository.findById(id)
.orElseThrow(RuntimeException::new);
}
위 메서드를 2번 호출하는 테스트 코드를 작성해보자.
그리고 1번만 호출됐는지 확인해보자.
verify(mockItemRepository, times(1)).findById(AN_ID);
참고
Bealdung 문서 : https://www.baeldung.com/spring-boot-redis-cache
Spring 공식 문서 : https://spring.io/projects/spring-data-redis
반응형
'Web > Spring' 카테고리의 다른 글
[Spring Batch] 1. 스프링 배치 공부 순서와 간단 소개 (0) | 2023.06.11 |
---|---|
Spring Framework와 Spring Boot의 차이 (0) | 2022.08.01 |
@Component에 대해 (@Bean) (0) | 2022.07.26 |
@RequestBody 붙였어?? (0) | 2022.07.13 |
Filter와 OncePerRequestFilter (0) | 2022.02.22 |