하이버네이트가 JPA 스펙 구현체 아닌가요?

2015-02-03 00:16

최근에야 ORM에 대해 관심을 갖게 되어 가볍게 개념부터 익히려고 이리저리 검색하여,

JPA는 스펙이고, ORM에 한 종류로 하이버네이트가 있고, 하이버네이트는 JPA 구현체 중 하나이군~

이라고 정리될 찰나

https://humbroll.wordpress.com/2009/11/12/1-ibatis-hibernate-%EA%B7%B8%EB%A6%AC%EA%B3%A0-jpa-%EB%AC%B4%EC%97%87%EC%9D%84-%EC%84%A0%ED%83%9D%ED%95%A0-%EA%B2%83%EC%9D%B8%EA%B0%80/

위 블로그 작성자 글 중에..

"현재 회사에서 진행하고 있는 프로젝트의 ORM은 요즘 대세인 Hibernate나 iBatis를 사용하지 않고 JPA(eclipselink)를 사용하고 있다. 사실 이런 선택을 한 이유는 처음 학습비용을 줄이고 빠른 프로젝트 진행을 위해서였다. -_-;"

라는 부분에서 마치 JPA와 Hibernate가 별개의 스펙으로 되어있는 마냥 기술되어 있어 잠시 혼란을 느끼고 있습니다;;

저 블로그 작성자가 잘못 이해한건가요?

1개의 의견 from SLiPP

2015-02-03 01:21

명세와 API는 다릅니다. 명세는 코드를 작성할 때, 제약사항이 될 수도 있고 가이드라인이 될 수도 있습니다. 하지만 명세를 만족하면 나머지 자유도는 보장됩니다.

예를 들어서 JDBC Driver 같은 경우에도 산업표준은 x/open XA 이고 이를 바탕으로 ODBC와 JDBC가 구현되었습니다. 그리고 JDBC의 경우에는 드라이버에 대한 인터페이스만 제공할 뿐, 구현은 각 DBMS벤더에서 하기 때문에 그래서 대게 distribution/lib과 같은 폴더에 드라이버 jar파일이 있고 기본적인 connection과 같은 메소드는 시그니처가 같지만 각 벤더에서만 사용할 수 있는 API는 조금씩 다릅니다.

마찬가지 이유로 하이버네이트에서도 스펙에 대응하는 API들을 별도로 만들었습니다. 클래스를 매핑하는 EntityManager와 같은 클래스는 JPA 명세를 반영한 API이기 때문에 SpringData와 Hibernate 모두 동일하게 사용하지만

Hibernate에서 제공하는 Session, SessionFactory와 같은 클래스는 org.hibernate에 속한 하이버네이트에서만 사용가능한 API입니다.

의견 추가하기

연관태그

← 목록으로