Object Relational Mapping, 말 그대로 객체-관계 매핑이라는 것이다. 다만 RDB는 테이블로 이루어져 있고, OPP 객체지향 프로그래밍에서는 클래스를 사용하게 된다. 하지만 객체와 관계형 데이터베이스가 애초에 호환을 염두 하고 만들어 진 것이 아니다보니, 자연스럽게 불일치가 발생하게 된다. 이럴때 ORM을 사용하여 객체의 관계를 바탕으로 SQL문을 자동적으로 생성 불일치를 해결한다.
1. Granularity(세분성)
경우에 따라 데이터베이스에 있는 해당 테이블 수보다 더 많은 클래스를 가진 객체 모델을 가질 수 있다.
2. Inheritance(상속)
RDBMS는 객체지향 프로그래밍 언어의 자연적 패러다임인 상속과 유사한 것을 정의하지 않는다.
3. Identity(일치)
RDBMS는 ‘sameness’라는 하나의 개념을 정확히 정의하는데, 바로 ‘기본키(primary key)’이다.
4. Associations(연관성)
객체지향 언어는 객체 참조(reference)를 사용하는 연관성을 나타내는 반면, RDBMS는 연관성을 ‘외래키(foreign key)’로 나타낸다.
장점
객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와준다.
선언문, 할당, 종료 같은 부수적인 코드가 없거나 급격히 줄어든다.
SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 인해 생산성이 증가한다.
재사용 및 유지보수의 편리성이 증가한다.
ORM은 독립적으로 작성되어있고, 해당 객체들을 재활용 할 수 있다.
탐색(Navigation) 자바와 RDBMS에서 객체를 접근하는 방법이 다르다.
자바는 그래프형태로 하나의 연결에서 다른 연결로 이동하며 탐색한다.
RDBMS에서는 JOIN을 통해 여러 엔티티를 로드하고 원하는 대상 엔티티를 선택하는 방식으로 탐색.
단점
사용하기는 편하지만 설계는 매우 신중하게 해야함.
완벽한 ORM 으로만 서비스를 구현하기가 어려움.
프로젝트의 복잡성이 커질경우 난이도 또한 올라갈 수 있다.
일부 자주 사용되는 대형 쿼리는 속도를 위해 SP를 쓰는등 별도의 튜닝이 필요한 경우가 있다.