CustomRepository
🧩 Custom Repository
정의
Custom Repository는 Spring Data JPA의 기본 Repository 기능에 사용자 정의 조회 로직을 추가하는 확장 방식이다.JpaRepository에 직접 넣기 어려운 복잡한 쿼리나 특수 로직을 별도 구현체로 분리할 때 사용한다.
기본 CRUD는 JpaRepository가 맡고, 추가 조회나 복잡한 조건은 Custom Repository가 담당하는 구조로 많이 사용한다.
🧩 역할
- 기본 Repository 기능을 확장한다
- 복잡한 조회 로직을 분리한다
- Querydsl, JPQL, Native Query를 함께 사용할 수 있다
- 서비스 계층을 단순하게 유지하는 데 도움이 된다
🛠 구현 방법
커스텀 인터페이스 정의
public interface CustomUserRepository {
List<User> findActiveUsers();
}
구현 클래스 작성
import com.querydsl.jpa.impl.JPAQueryFactory;
import org.springframework.stereotype.Repository;
import java.util.List;
import static com.example.domain.QUser.user;
@Repository
public class CustomUserRepositoryImpl implements CustomUserRepository {
private final JPAQueryFactory queryFactory;
public CustomUserRepositoryImpl(JPAQueryFactory queryFactory) {
this.queryFactory = queryFactory;
}
@Override
public List<User> findActiveUsers() {
return queryFactory.selectFrom(user)
.where(user.isActive.eq(true))
.fetch();
}
}
JpaRepository와 결합
public interface UserRepository extends JpaRepository<User, Long>, CustomUserRepository {
}
🧩 특징
- 구현 클래스는 보통 인터페이스 이름 뒤에
Impl을 붙인다. - Spring Data JPA가 자동으로 구현체를 연결한다.
- Querydsl과 함께 쓰면 동적 조회를 깔끔하게 분리할 수 있다.
- 기본 CRUD와 커스텀 조회를 한 Repository에서 함께 사용할 수 있다.
⚠️ 주의사항
- 구현 클래스 이름 규칙을 맞춰야 자동 연결된다.
- 커스텀 로직이 지나치게 많아지면 Repository 책임이 커질 수 있다.
- 조회 로직과 비즈니스 로직은 가능한 한 분리하는 것이 좋다.
- 단순 조회는 굳이 Custom Repository로 분리하지 않아도 된다.
📌 정리
Custom Repository는 Spring Data JPA의 Repository를 확장하는 방식이다.- 복잡한 조회나 Querydsl 기반 로직을 분리할 때 유용하다.
JpaRepository와 함께 사용하면 기본 기능과 확장 기능을 같이 가져갈 수 있다.
댓글남기기