[JPA] ORM, JPA, Hibernate

ORM (Object Relational Mapping)

객체가 테이블이 되도록 매핑시켜주어 자바 객체와 쿼리를 분리할 수 있으며 트랜잭션 처리나 기타 DB 관련 작업들을 간편하게 처리할 수 있게해주는 기술

 

JPA (Java Persistance API)

Java의 ORM 기술에 대한 API 표준 명세이며, JPA는 ORM을 사용하기 위한 인터페이스를 모아둔 것이다.

즉, 사용하기 위해서는 구현체가 있어야한다.

장점 단점
데이터를 객체 지향적으로 관리할 수 있기 때문에 개발자가 비즈니스 로직에만 집중할 수 있다. 학습 비용이 높다
SQL을 직접 작성하지 않아도 되며, 테이블 변경 시 Entity만 수정하면 된다. 복잡한 쿼리가 필요한 경우 불편할 수 있다.
DB에 대한 코드 종속성이 낮아 DB가 변경되더라도 JPA가 해당 DB에 맞는 쿼리를 자동으로 생성한다. 잘못 사용 시 SQL 문을 작성한 것보다 성능이 저하될 수 있다.

요약: 간편성, 코드 가독성, 확장성이 좋지만, 학습 난이도가 있고, 잘못 사용했을 경우 성능 저하로 이어진다.

 

Hibernate

JPA의 구현체로써 메소드 호출만으로 쿼리가 실행된다.

메소드로 쿼리를 싱행하여 간편하게 사용할 수 있고, 테이블 관리가 편하며, 비즈니스 로직에 집중할 수 있다.

하지만 SQL보다 어렵고, 메소드만으로 쿼리를 실행하기 때문에 내부적으로 동작이 많아 네이티브 쿼리보다 성능이 떨어질 수 있다.

 

Spring Data JPA

JPA를 사용하기 위해서는 구현체인 Hibernate와 같은 것을 사용해야한다.

하지만 spring에서 JPA를 사용하면서 Hibernate를 직접 다루진 않는다.

이처럼 구현체들을 좀 더 쉽게 사용하고자 추상화시킨 모듈이 Spring Data JPA이다.

Sprint Data JPA를 사용하면 구현체를 Hibernate에서 EclipseLink로 바꾸어아하는 상황이와도 쉽게 교체할 수 있다.

이처럼 JPA를 사용하는 가장 큰 이유 중 하나로 DB가 바뀌어도, 구현체가 바뀌어도 쉽게 교체할 수 있다는 점이다.