
스프링과 레디스를 연동하여 사용해보는 공부중 어플리케이션 실행 시 다음 경고 로그가
발생하는 것을 확인할 수 있었다.

살펴보면 Spring data JPA Repository와 Spring data Redis Repository가 모두
인식되어 JPA와 Redis가 자신의 리포지토리가 맞는 지 명시해달라는 내용이다.
@EnableJpaRepositories, @EnableRedisRepositories 이 두 어노테이션을 통해
사용하는 리포지토리를 명시적으로 기록하는 방법이 있다. 하지만 프로젝트 패키지 구조상
리포지토리가 너무 많이 분산되어 있는 형태면 설정이 까다로워진다.
@Configuration
@EnableRedisRepositories(basePackages = {"com.spring-allinone.user.auth"})
public class RedisConfig { ... }
RedisRepository를 사용하지 않고 RedisTemplate만을 이용해 Redis와 관련한
로직을 구성하는 방법이 있다. application.yml에 다음 설정을 추가해주면 된다.
spring:
data:
redis:
repositories:
enabled: false
로그 항목을 보다보면
Bootstrapping Spring Data JPA repositories in DEFAULT mode.
라는 내용이 보인다. @Enable...Repositories에는 BootstrapMode라는 설정이
포함되어 있다고 한다.
DEFAULT : 기본으로 모든 Repository를 즉시 인스턴스화 시킨다. Repository가 많은 경우 스프링 시작 시간이 지연되는 단점이 있다.LAZY : 모든 Repository를 프록시로 만들어두고, 처음 사용할 때 실제 인스턴스로 만들어 준다.DEFERRED : 기본적으로 LAZY와 동일하지만 비동적으로 작업하고, ContextRefreshedEvent에 의해 Repository가 초기화되어 검증되도록 진행한다.DEFAULT는 안전하지만 오래 걸린다는 단점이 있고, LAZY는 빠르지만 처음 Repository 사용시 약간의 딜레이가 있으며, 오류 발생시 초기가 아닌 사용 시점에 발생한다는 문제가 존재한다. DEFERRED는 LAZY와 비슷하지만 Repository 초기화가 보장되어 로드가 빠르고 유효성 검증이 보장된다.
보통 DEFERRED가 권장되고, LAZY는 개발환경 세팅에서 사용하기 좋을 수 있다.