Spring Data JPA로 Repository를 개발하다 보면, 특정 메서드를 직접 구현하기 위해 구현체를 만들어야 하는 경우가 있다. 이때 Repository에다가 직접 구현하면 공통 인터페이스가 제공하는 기능까지 모두 구현해야 한다.
Spring Data JPA는 해당 문제를 해결하여 필요한 메서드만 구현해 주는 방식을 제공한다.
✅ Spring Data 2.x부터 사용자 정의 구현 클래스에 사용자 정의 인터페이스 명
+ Impl
방식도 지원
// 사용자 정의 구현 클래스
public class MemberRepositoryCustomImpl implements MemberRepositoryCustom {
@Override
public List<Member> findMemberCustom() {
...
}
}
// 사용자 정의 인터페이스
public interface MemberRepositoryCustom {
public List<Member> findMemberCustom();
}
// 사용자 정의 인터페이스 상속
public interface MemberRepository extends JpaRepository<Member, Long>,
MemberRepositoryCustom {
...
}
}
QueryDSL
혹은 SpringJdbcTemplate
을 함께 사용할 때 사용자 정의 Repository를 사용한다.
하지만 별개의 @Repository를 생성해서 처리하는 것도 가능하기 때문에 항상 사용자 정의 리포지토리가 필요한 것은 아니다.
아키텍처적인 분리
다각적으로 고민 후 결정하는 것이 좋다.