1️⃣ ORM
ORM (Object-Relational Mapping) 은 말 그대로 객체와 관계형 데이터베이스가 매핑(Mapping)되는 것을 줄여서 표현한 것이다. 객체와 데이터베이스 테이블간의 연결을 도와준다.
SQL 쿼리문이 아닌 프로그래밍 언어의 코드로 데이터를 다룬다는 관점에서 ORM 프레임워크는 객체와 데이터베이스 중간에서 매개체 역할을 한다.
즉, 객체와 쿼리를 나눠 ORM 을 통해 CRUD, 트랜잭션 처리 등 데이터베이스 관련 작업들을 훨씬 수월하게 해주는 방법이다.
2️⃣ JPA
JPA (Java Persistence API) 는 Java ORM 기술에 대한 API 표준 명세이다.
JPA는 ORM을 사용할 수 있도록 인터페이스를 모아둔 것으로, Java 언어를 통해 관계형 데이터베이스에 접근, 사용하는 방식을 정의하였다. 그 구현체로는 대표적으로 Hibernate, EclipseLink, DataNucleus 등이 있다.
위 그림을 보면 JAVA 애플리케이션과 데이터베이스 사이에 JPA 가 위치하여 JDBC API 를 통해 서로 상호작용한다는 것을 알 수 있다.
그렇다면 위 기술은 어떻게 등장하게 된 것일까?
기존 SQL 중심의 개발 방식은 문제가 많았다. 객체와 데이터베이스를 함께 다루다보니, 객체 지향의 원리를 지키며 개발을 하기엔 코드가 복잡해지고 매핑 작업 또한 점점 늘어났다.
이후 List, Set, Map 등 Java 컬렉션에 객체를 저장할 수 있듯이 데이터베이스에 객체를 저장할 수 없을까 하는 생각에서 등장한 것이 바로 JPA 이다. 그렇다면 JPA를 사용하면 얻는 이점이 무엇일까?
1) 장점
1. 기존 SQL 중심적인 개발에서 객체 중심으로 개발할 수 있다. 즉, 객체 지향적 관점에서 훨씬 유리하다.
2. 객체 중심으로 개발할 수 있어 생산성이 좋고 유지보수가 용이하다.
3. 성능 최적화 기능이 있어 프로그램을 효율적으로 짤 수 있다.
4. DB를 한번 생성하면 데이터(테이블) 조작을 Java 코드로 해결할 수 있다.
2) 단점
1. 복잡한 동적 쿼리 등 JPA 보다 SQL문으로 해결하면 성능이 더 좋은 경우가 있다.
2. 매핑에 대한 설계를 잘못했을 때 성능 저하가 발생할 수 있다.
3. 학습 시간이 오래 걸린다.
3) 특징
1. 관계형 데이터베이스와 객체간 패러다임 불일치 문제를 해결할 수 있다.
2. 영속성 컨텍스트를 제공한다.
3️⃣ Hibernate
Hibernate 는 JPA 의 구현체라고 하였다. 이는 Java 를 위한 ORM 프레임워크로 JPA 인터페이스를 구현하고, 내부적으로 JDBC API를 사용한다.
1) 장점
1. SQL 을 직접 사용하지 않고도 Java 코드 만으로 쿼리문을 수행할 수 있다. 따라서 생산성이 뛰어나다.
2. JPA는 추상화된 데이터 접근 계층을 제공하여 특정 벤더에 종속적이지 않고 독립적이다.
3. 상속, 연관 관계, 객체 그래프 탐색, 비교 등 객체와 관계형 데이터베이스간 패러다임 불일치를 해결할 수 있다.
4. 개발자는 비교적 SQL 보다 도메인 모델 설계, 매핑 설정 등에 집중할 수 있고, 유지 보수에 용이하다.
* Hibernate 는 JPA 표준 인터페이스 구현체중 하나이다.
참고 : 김영한 - 자바 ORM 표준 JPA 프로그래밍 강의, google