비즈니스 요구사항을 정의한 도메인 모델을 객체로 모델링하면 객체지향 언어가 가진 장점들을 활용할 수 있다.
하지만 문제는 객체 인스턴스를 생성한 후이다.
이처럼 객체와 RDB는 지향점이 서로 다르므로, 둘의 기능과 표현 방법도 다르다. 그러므로 상속이나 참조 관계 등 복잡한 상태를 갖는 객체 구조를 RDB의 테이블 구조에 저장하는 데에는 어려움이 있다.
이러한 문제를 객체와 관계형 데이터베이스의 패러다임 불일치 문제라고 하며, 개발자가 중간에 이 문제를 해결해 주어야 한다. 문제는 이 불일치 문제를 해결하는 데에 너무 많은 시간과 코드가 소비된다는 것이다.
ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스를 매핑한다는 뜻이다. ORM 프레임워크는 객체와 테이블을 매핑해서 위에 서술한 객체와 RDB 간 패러다임 불일치 문제를 개발자 대신 해결해 준다.
그래서 ORM 프레임워크를 사용하면 객체를 데이터베이스에 저장할 때라도 SQL문을 직접 작성하는 대신 객체를 자바 컬렉션에 저장하듯이 저장하면 된다. 그러면 ORM 프레임워크가 적절한 INSERT문을 생성해서 데이터베이스에 해당 객체를 직접 저장해준다.
즉, 객체와 테이블을 어떻게 매핑하고자 하는지 ORM 프레임워크에게 알려주기만 하면 ORM 프레임워크가 이후의 과정을 수행해주기 때문에, 개발자는 객체 지향 애플리케이션 개발에만 집중할 수 있게 된다.
자바 진영에서는 하이버네이트 프레임워크가 가장 많이 사용된다. 하이버네이트는 거의 대부분의 패러다임 불일치 문제를 해결해주는 성숙한 ORM 프레임워크이다.
JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준이다. 즉, 자바 진영의 ORM 프레임워크 인터페이스를 모아둔 것이다. 따라서 JPA를 사용하려면 JPA를 구현한 ORM 프레임워크 중 하나를 선택해야 하는데, 앞서 언급했듯 이 중에서 하이버네이트가 가장 대중적이다.
ORM, JPA 공부하실 때 어떤 레퍼런스 참고하시나요?