Skip to content

Latest commit

 

History

History
56 lines (43 loc) · 4.61 KB

CustomRepository 사용.md

File metadata and controls

56 lines (43 loc) · 4.61 KB

💡 CustomRepository 사용

@NoRepositoryBean
public interface CustomRepository<T, ID> extends Repository<T, ID> {
    List<T> findAll();
    T save(T entity);
    Optional<T> findById(ID id);
    void deleteById(ID id);
}

CustomRepository는 기본적인 CRUD 메서드만을 제공하는 사용자 정의 리포지토리 인터페이스로, Repository 인터페이스를 확장하여 필요한 기능을 추가하거나 수정할 수 있다.

장점 🌟

  1. 명확한 데이터 접근 방식:

    • CustomRepository는 필수적인 CRUD 메서드만을 정의하므로, 특정 메서드를 사용할 때 명시적으로 선언해야 한다. 이는 리포지토리 인터페이스를 보고 데이터베이스와의 상호작용 방식을 명확하게 파악할 수 있게 한다.
    • 예를 들어, 페이징 처리가 필요한 경우 findAll(Pageable pageable) 메서드를 리포지토리에서 직접 선언함으로써, 어떤 방식으로 데이터가 가져와지는지 한눈에 알 수 있다.
  2. 경량화된 코드베이스:

    • JpaRepository처럼 모든 기능을 기본적으로 제공하지 않으므로, 불필요한 메서드나 복잡한 기능을 배제할 수 있다.
    • 이로 인해 코드베이스가 경량화되며, 특정 기능만 필요로 하는 작은 프로젝트에서는 간결하고 유지보수가 용이한 리포지토리 계층을 구현할 수 있다.
  3. 유연한 커스터마이징:

    • 필요한 경우 CustomRepository에 메서드를 추가하여 커스터마이징할 수 있다. 예를 들어, 특정 조회 조건에 맞는 메서드를 추가하고자 할 때, 별도의 구현체를 작성해 비즈니스 요구사항을 충족할 수 있다.
    • 이와 같은 유연한 확장성은 다양한 프로젝트 요구사항에 맞춰 리포지토리를 설계할 수 있는 장점을 제공한다.
  4. 프로젝트의 데이터 액세스 통일성 유지:

    • CustomRepository를 사용하면, 모든 리포지토리가 동일한 형태의 기본 CRUD 기능을 가지게 되어, 프로젝트 내에서 데이터 접근 방식의 통일성을 유지할 수 있다.
    • 이는 코드 리뷰 시에도 데이터 접근 패턴을 파악하기 쉬워지고, 개발자 간의 일관된 코드 스타일을 유지할 수 있게 한다.

단점 ⚠️

  1. 추가적인 메서드 선언 필요:

    • JpaRepository가 기본적으로 제공하는 메서드(예: 페이징 처리, 정렬, batch 관련 메서드 등)를 CustomRepository에서 사용하려면, 각 리포지토리에서 명시적으로 선언해야 한다.
    • 이는 특히 페이징이나 정렬 기능을 자주 사용하는 경우, 코드 작성의 반복을 초래할 수 있으며, 코드 중복의 가능성이 높아질 수 있다.
  2. 동적 프록시 기능의 제한적 활용:

    • JpaRepository는 다양한 기능을 포함하고 있으며, 기본적인 CRUD 외에도 JPA의 고급 기능을 간단하게 사용할 수 있는 장점이 있다. 하지만 CustomRepository는 이러한 기능들을 직접 추가해야 하므로, Spring Data JPA의 동적 프록시 기능을 충분히 활용하지 못할 수 있다.
    • 따라서, 복잡한 쿼리나 특수한 데이터베이스 연산이 필요할 때, 추가적인 개발 작업이 필요해질 수 있다.
  3. 프로젝트 크기에 따른 효용성 차이:

    • 작은 규모의 프로젝트에서는 CustomRepository의 명시적인 선언 방식이 단순하고 깔끔할 수 있지만, 프로젝트 규모가 커지면서 다양한 엔티티에 대해 반복적인 작업이 필요할 때는 JpaRepository의 기능을 활용하는 것이 더 효율적일 수 있다.
    • 이는 특히 리포지토리 인터페이스 수가 많아지고, 각 리포지토리에서 비슷한 메서드를 반복적으로 작성해야 할 때 부담으로 작용할 수 있다.
  4. 개발자 이해도 요구:

    • CustomRepository를 사용하는 방식은 일반적인 JpaRepository와는 다르게, 메서드를 직접 정의하고 사용해야 하므로 개발자의 이해도가 요구된다.
    • 특히, Spring Data JPA의 동작 원리를 이해하지 못한 상태에서 CustomRepository를 사용할 경우, 오히려 코드의 복잡도를 높일 위험이 있다.

🗣 멘토님의 조언

  • 기술적으로 문제는 없을 것 같고, 개발할때 약간 귀찮을 순 있겠지만 인터페이스를 좀 더 명시적으로 만들려는 설계상의 선택으로 보인다.
    팀 내에서 협의하신 방향으로 진행해보시면 좋을 것 같다

💡 팀 결론

JpaRepository를 사용하기로 결정