작성
·
221
0
안녕하세요.
공부를 하다가 누군가에게 hibernate or JPA를 사용해보았냐는 질문을 받았습니다.
JPA는 사용을 해보았다고 대답을 했으나 hibernate를 사용해봤는지 판단을 할 수 없었습니다.
그래서 찾아보니 hibernate와 JPA의 차이점을 찾아봤으나 hibernate는 JPA를 구현한것이다.
라는 답변을 찾을 수 있었으나 제가 이해한것이 맞는지 틀린지 판단을 할 수 없어서 질문드립니다.
1. entity를 설계하고 public interface MemberRepository extends JpaRepository<Member, Long>와같이 JpaRepository를 구현했다 -> JPA를 사용
2. entity를 설계하고 entityManager를 활용하였다 -> hibernate
라고 이해를 하였습니다. 맞게 이해한것인가요 ?
답변 1
1
안녕하세요. sangyong choi님
어느정도 알아보셨으니 질문에 바로 답변을 드릴께요^^
1. entity를 설계하고 public interface MemberRepository extends JpaRepository<Member, Long>와같이 JpaRepository를 구현했다 -> JPA를 사용
-> 이것은 스프링 데이터 JPA를 사용한 것입니다. 순수하게 JPA를 사용하는 것 보다 스프링 데이터 JPA가 여러가지 편리한 기능을 제공해주기 때문에 최근에는 이렇게 많이 사용합니다.
2. entity를 설계하고 entityManager를 활용하였다 -> hibernate
-> Hibernate를 직접 사용하면 EntityManager가 아니라 하이버네이트 Session이라는것을 사용합니다. JPA는 EntityManager 인터페이스를 제공하고, 하이버네이트를 사용하면 하이버네이트가 EntityManager 인터페이스를 통해서 제공됩니다. (하이버네이트가 JPA의 EntityManager를 구현합니다. Entity 설계도 마찬가지 입니다.)
최근에는 하이버네이트도 JPA에 거의 통합되고, 대부분 하이버네이트 구현체를 사용해서 JPA를 사용하면 거의 하이버네이트를 사용한 것으로 생각하셔도 됩니다.
사실 우리가 하이버네이트를 사용하고 있다는 것은 maven, gradle에서 포함한 라이브러리를 보시면 됩니다.
이런식으로 JPA 인터페이스를 통해서 사용하면 다음에 하이버네이트가 아닌 다른 구현체 라이브러리로 변경해도 기존 코드는 거의 손대지 않고 변경할 수 있는 장점이 있습니다.(하지만 하이버네이트 대항마가 나오기는 쉽지 않을 것 같아요.)
추가로 JPA 기본편 강의 - JPA 시작하기 5:23을 다시한번 참고해보시면 좋을 것 같습니다^^