Spring Data JPA - JpaRepository
Spring Data JPA
백기선님의 강의인 Spring Data JPA 강의를 듣고 공부한 내용을 정리한 글
JPA Repository
원래 Spring Data JPA를 사용하려면 @EnableJpaRepositories
라는 애노테이션을 사용해야했다.
그러나 스프링 부트에서는 이를 자동설정으로 지원해주므로 쓸 필요가 없다.
@EnableJpaRepositories
는 JpaRepository 인터페이스를 상속받은 인터페이스들을 프록시 빈으로 등록해주기 위해 사용된다.
설정 값으로는 엔티티 매니저, 트랜잭션 매니저 등을 설정할 수 있다.
그리고 기본 basePackge의 경로를 명시해줄 수 있다.
이게 필요한 경우가 간혹 존재하는데, 가령 멀티 프로젝트로 나누어서 프로젝트를 구축하는 경우가 있을 수 있다.
이 때 Entity나 Repository와 같은 빈들이 다른 패키지에 선언되어 있는 경우가 있을 수 있다.
이 때 @EnableJpaRepositories
에 basePackage 옵션에 해당 패키지 명을 명시해두면 그 패키지에 존재하는 Jpa 관련 빈들도 읽어오는 것이 가능하다.
@Repository
@Repository
는 안붙여도 된다.
왜냐면 JpaRepository 인터페이스의 구현체인 SimpleJpaRepository에 이미 @Repository
애노테이션이 붙어있기 때문이다.
그럼 이 @Repository
애노테이션의 역할은 무엇일까?
당연히 빈을 등록하기 위해서도 맞다.
그리고 하나 더, SQLException이나 JPA 관련 예외를 스프링의 DataAccessException으로 변환하는 기능이 있기 때문이다.
그럼 왜 굳이 SQLException으로 예외를 발생시켜도 되는데 굳이 변환을 하는가에 대한 의문이 생길 수 있다.
우선 SQLException 클래스 하나로 모든 예외 상황을 하나로 처리하기 때문에 일일이 어떤 에러인지 확인을 해야만 했었다.
그래서 이러한 계층 구조를 만들어서 클래스 이름만 봐도 어떤 에러가 났는지 알 수 있으므로 굳이 변환을 하는 것이다.
참고로 하이버네이트의 예외만 봐도 어떤 에러가 났는지 명시적으로 알 수 있다는게 함정이다. (…)
Reference
인프런 백기선님의 스프링 Data JPA