에러가 나진 않지만 매우매우 불편한 로그가 나를 반겼다.
대충 읽어보면
2023-04-02T18:00:14.921+09:00 INFO 52154 --- [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface cherish.backend.member.repository.JobRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
저장소 할당을 안전하게 식별할 수 없습니다.작업 리포지토리; 이 리포지토리를 Redis 리포지토리로 만들려면 org.springframework.data.redis.core라는 주석 중 하나로 엔티티에 주석을 달아야 합니다.RedisHash(기본 설정) 또는 저장소를 사용하여 org.springframework.data.keyvalue.repository 유형 중 하나를 확장합니다.
라고 Spring data JPA repository 와 Spirng data redis Repository가 모두 인식되어서 redis가 이게 내 리포지토리가 맞아? 그럼 명시해줘 라는 로그입니다.
그렇다면 어떻게 해결해야할까...?
RedisRepository
(CRUD repository) 와 Jpa Repository
를 모두 사용할 경우
두가지의 data Repository가 등록되는 상황이다.
총 등록되는 repository는 총 세개
그렇다면 기본은 해당 인식을 해주는 클래스를 직접 지정해주면 되었다.
@EnableJpaRepositories
@EnableRedisRepositories
으로 구분하여 사용하는 리포지토리를 명시적 으로 적어주는 것이다.
현재 프로젝트는 계층형을 도메인형으로 나누었기 때문에 repository가 분산되어 있어서 코드에 너무 많은 루트가 적힐 가능성이 컸다.
그렇다면 어떤 방법이 있을까
나는 이메일 인증 Redis를 redisTemplate
를 통해 구현을 하였고 redisRepository는 사용하지 않는다.
고로 간편하게
spring:
data:
redis:
repositories:
enabled: false
를 설정해주었다.
이렇게 되면 redisRepository를 사용하지않으니 어떤 것을 사용할지 헷갈리지 않고 Jpa Repository만 사용하게 된다.
그리고 바로 위에 추가된 의문의 한줄
Bootstrapping Spring Data Redis repositories in DEFAULT mode.
Profile 등 한줄씩 무엇을 뜻하는지는 알겠는데 해당 줄에 대해서는 처음 보아서 조사해보았다.
사실 직관적으로 와닿진 않는다.
다른 레퍼런스 문서를 찾아보고 이해한바로는
고로 deferred 옵션을 사용했다.
사용법은
spring:
data:
jpa:
repositories:
bootstrap-mode: deferred
https://velog.io/@stbpiza/Spring-Boot-JPA-Redis-Repository-INFO