HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🏠
2차 팀 프로젝트: 오늘의 집
/
Repository의 위치

Repository의 위치

완료 여부
완료
발의자

사용자 정의 리포지터리 구현

  • 필요
    • 스프링 데이터 JPA가 제공하는 인터페이스를 직접 구현하기에는, 구현해야 할 기능이 너무 많음
    • 다음과 같은 이유 등으로 인터페이스를 직접 구현하고 싶을 때 필요한 기능
      • JPA 직접 사용(em)
      • JDBC Template 사용
      • MyBatis 사용
      • DB 커넥션 직접 사용
      • QueryDSL 사용 등
  • 사용 방법
    • 새 인터페이스 만듦: CustomMemberRepository
      • public interface CustomMemberRepository {    List<Member> findMemberCustom(); }
    • 새 인터페이스의 구현체 생성: MemberDataJpaRepositoryImpl (명명 주의!)
      • @RequiredArgsConstructor public class MemberDataJpaRepositoryImpl implements CustomMemberRepository {    private final EntityManager em;    @Override    public List<Member> findMemberCustom() {        return em.createQuery("SELECT m FROM Member m")               .getResultList();   } }
    • 사용할 Data JPA Repsitory가 커스텀 인터페이스도 상속받게 만듦
      • public interface MemberDataJpaRepository extends JpaRepository<Member, Long>, CustomMemberRepository {
  • 주의사항
    • 새 인터페이스의 구현체 명은 우리가 사용할 리포지터리명 + Impl 형태로 명명해야 한다.
    • 다른 형태의 postfix사용하고 싶다면
      • xml 설정
        • <repositories base-package="프로젝트경로.repository경로"              repository-impl-postfix="impl"/>
      • JavaConfig 설정
        • @EnableJpaRepositories(basePackages =                      "프로젝트경로.repository경로",                      repositoryImplementationPostfix = "impl")
  • 꼭 커스텀까지 사용해서 하나의 리포지터리에 모든 기능을 몰아 넣을 필요는 없다.
    • 핵심 로직을 담은 리포지터리와 화면에 맞춘 리포지터리를 분리하는 것을 추천한다.
    •