Object-relational mapping, ORM은 객체와 관계형 데이터베이스 사이에 존재하는 패러다임 불일치를 해소해준다.
객체와 관계형 데이터베이스는 지향하는 목적이 서로 다르므로 둘의 기능과 표현 방법도 서로 다르다. 따라서 객체를 관계형 데이터베이스에 저장할 때, 관계형 데이터베이스에 있는 데이터를 객체로 가져와 조작하고 싶을 때 문제가 발생하고 이 문제는 개발자가 (ORM이 없다면 더 많은) 시간과 비용을 들여 해결해야 한다. 패러다임 불일치의 예를 살펴보자.
=> JPA를 사용하면 개발자는 마치 자바 컬렉션에 저장하듯이 JPA에 객체를 저장하면 된다.
=> JPA를 이용하면 참조를 이용하여 관계를 맺은 다른 객체에 접근하듯 데이터베이스에 있는 데이터를 가져올 수 있다.
=> JPA는 같은 트랜잭션일 때 같은 객체가 조회되는 것을 보장한다.
=> JPA를 이용하면 객체 그래프를 마음껏 탐색할 수 있다. JPA는 연관된 객체를 사용하는 시점에 적절한 SELECT SQL을 실행하기 때문이다. 이 기능은 실제 객체를 사용하는 시점까지 데이터베이스 조회를 미룬다고 해서 지연 로딩이라 한다.
A를 사용할 때마다 B를 함께 사용한다면 A를 조회하는 시점에 조인을 이용해서 B까지 함께 조회하는 것이 효과적이다. JPA는 연관된 객체를 즉시 함께 조회할지 아니면 실제 사용되는 시점에 지연해서 조회할지를 간단한 설정으로 정의할 수 있다.
개발자가 객체지향 애플리케이션과 데이터베이스 중간에서 SQL과 JDBC API를 사용해서 변환 작업을 직
접 해주어야 한다. 많은 시간과 비용이 드는 일이다. 개발의 중심이 객체가 아닌 데이터(SQL)로 이동하기 쉽다.
=> JPA를 이용하면 개발자는 데이터 중심인 관계형 데이터베이스를 사용해도 객체지향적으로 애플리케이션을 개발할 수 있다.
객체와 관계형 데이터베이스 사이에 존재하는 패러다임 불일치를 해소해준다. 또한 지루하고 반복적인 CRUD SQL을 알아서 처리해줄 뿐만 아니라 객체 모델링도 손쉽게 할 수 있도록 도와준다. ORM을 통해 개발자는 더 중요한 일에 집중할 수 있다.
JPA란 자바 진영에서 Hibernate를 기반으로 만든 ORM 표준이다.