[SpringBoot] 스프링부트 Couchbase Repository 이슈
Springboot Couchbase Repository 이슈
회사에서 Spring 코드에서 Couchbase 관련 서비스를 개발하는 도중에 발생한 문제에 대해 정리합니다.
최초 개발 코드
다음은 예시 코드입니다.
- Java SDK version : 14
AccountDoc
클래스
@Document
@ToString
public class AccountDoc {
@Id
private String id;
@Field
@NotNull
private String userId;
@Field
@NotNull
private String userType;
@Field
@NotNull
private String userName;
}
AccountRepository
클래스
@Repository
public interface AccountRepository extends CouchbaseRepository<AccountDoc, String> {
AccountDoc findByUserId(String userId);
}
CouchbaseRepository
코드
public interface CouchbaseRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {
CouchbaseOperation getCouchbaseOperations();
}
최초 코드 구성시는 해당 document를 참고했습니다.
- Spring Data Couchbase Reference Documentation
- Couchbase Server Quickstart - Java with Spring Data Couchbase
문제점.
다음 코드에서 문제가 발생한 부분은 AccountRepository
의 findByUserId(String userId)
코드였습니다.
- 원인은 직접 선언한 메서드(파생 쿼리, Derived Query) 을 인식하지 못하고 문제가 발생하는 문제였습니다.
해결책.
해당 경우에서는 큰 요구사항이 필요하지 않았기 때문에 해당 파생 쿼리를 사용하지 않고 코드를 구성했습니다.
AccountRepository
클래스
@Repository
public interface AccountRepository extends CouchbaseRepository<AccountDoc, String> {
}
AccountService
서비스 클래스
private String id;
private AccountService accountService;
// ...
AccountDoc doc = accountService.findById(id);
// Service Logic ...
즉, 해당 경우에는 CrudRepository
인터페이스에서 제공되는 메소드만 지원이 가능했습니다.
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S entity);
Optional<T> findById(ID primaryKey);
Iterable<T> findAll();
long count();
void delete(T entity);
boolean existsById(ID primaryKey);
// ...
}
다음의 이슈에서 파생 쿼리 등을 사용하기 위해서는 아래 내용을 참고하면 좋을 것 같습니다.
좀 더 자세하게 보기
출처