데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법.
객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용하기 때문에 ORM 기법을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 객체 모델과 관계형 모델 간의 불일치를 해결한다.
완벽한 ORM 으로만 서비스를 구현하기가 어렵다.
프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵다.
객체-관계 간의 불일치
다음과 같은 특성에서 객체-관계 간의 불일치가 생긴다.
세분성(Granularity)
경우에 따라서 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다.
상속성(Inheritance)
RDBMS는 객체지향 프로그래밍 언어의 특징인 상속 개념이 없다.
일치(Identity)
RDBMS는 기본키(primary key)를 이용하여 동일성을 정의한다. 그러나 자바는 객체 식별(a==b)과 객체 동일성(a.equals(b))을 모두 정의한다.
연관성(Associations)
객체지향 언어는 방향성이 있는 객체의 참조(reference)를 사용하여 연관성을 나타내지만 RDBMS는 방향성이 없는 외래키(foreign key)를 이용해서 나타낸다.
탐색(Navigation)
자바와 RDBMS에서 객체를 접근하는 방법이 근본적으로 다르다. 자바는 그래프형태로 하나의 연결에서 다른 연결로 이동하며 탐색한다. 그러나 RDBMS에서는 일반적으로 SQL문을 최소화하고 JOIN을 통해 여러 엔티티를 로드하고 원하는 대상 엔티티를 선택하는 방식으로 탐색한다.
자바 ORM 기술에 대한 명세(자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식)를 정의한 인터페이스.
JPA는 애플리케이션과 JDBC 사이에서 동작한다.
개발자가 JPA를 사용하면, JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신한다.
개발자는 JPA에 Member 객체를 넘긴다.
JPA는
개발자는 JPA에 member의 pk 값을 넘긴다.
JPA는
자바 언어를 위한 ORM 프레임워크로, JPA 인터페이스를 구현한 구현체의 한 종류.