Java 개발을 하면서 데이터베이스 연동을 위한 ORM 프레임워크로 많이 쓰이는 Hibernate을 사용하려고 한다. 그 전에 먼저 ORM 기술 표준인 JPA에 대해서 조금은 알고 학습하려고 한다. 이 시리즈에서 학습한 내용은 모두 김영한님께서 집필하신 자바 ORM 표준 JPA 프로그래밍의 내용을 기반으로 한다.
JPA(Java Persistence API)는 자바 ORM 기술 표준이다. 애플리케이션과 JDBC 사이에서 동작한다.
객체와 관계형 데이터베이스 매핑으로 객체와 테이블을 매핑하여 패러다임의 불일치 문제를 해결한다. 객체를 데이터베이스에 저장하거나 불러올 때 ORM 프레임워크는 SQL 문을 자동으로 수행한다. 대표적으로 하이버네이트 프레임워크가 있다.
과거 EJB라는 표준 기술이 있었다. 하지만 매우 복잡하고 기술 성숙도가 떨어져 자바 엔터프라이즈 애플리케이션 서버(J2EE)에서만 동작했다.
오픈 소스 ORM 프레임워크로 가볍고 실용적이며 기술 성숙도가 높았다. 특히 J2EE 없이 동작할 수 있어 결국 하이버네이트를 기반으로 ORM 기술의 표준으로 JPA가 만들어졌다.
SQL의 작성을 JPA가 대신 처리해줘 기능 개발에 좀 더 집중할 수 있다.
엔티티 필드의 수정이나 등 전반적인 SQL 수정이 필요할 때 이를 JPA가 대신 처리해줘 유지보수의 장점이 있다.
상속, 연관 관계, 객체 그래프 탐색, 비교 등 패러다임의 불일치를 해결한다.
애플리케이션과 데이터베이스 사이에 다양한 성능 최적화 기회를 제공한다. JPA는 애플리케이션과 데이터베이스 사이에서 동작하므로 계층이 하나 더 있는 샘이다. 이는 최적화의 관점에서 시도할 수 있는 것들이 많다. 만약 같은 데이터를 두 번 연속 찾게 된다면 JPA는 이미 찾은 데이터를 다시 찾지 않고 재사용한다.
관계형 데이터베이스는 벤더마다 기능 사용법이 다른 경우가 많다. 예를 들어 페이징 처리는 데이터베이스마다 달라서 사용법을 각각 배워야 한다. JPA는 애플리케이션과 데이터베이스 사이에 추상화된 데이터 접근 계층을 제공하여 다른 데이터베이스에서도 같은 기능을 수행할 수 있게 한다.