JPA를 사용하며 서칭서칭 중에 계속해서 밟히는 한 단어…ORM
OMR은 들어 봤어도 ORM?은 뭘까요?
바로 알아보도록 하겠습니다.
ORM이 무엇인지는 대충 알겠는데..그럼 왜 ORM을 사용하고, JPA와는 무슨 관계일까요?
ORM을 사용하지 않는 경우
SELECT * FROM Member;
SQL Query를 작성 후 실행하면 된다.
ORM을 사용한 경우
RDB상의 Member 테이블과 매핑된 객체를 member라고 하자
member.findAll();
즉, ORM를 사용함으로서 개발 언어인 Java로 RDB상의 데이터(테이블)를 조회할 수 있습니다.
오😮😮😮
SQL Query가 어렵거나 그런 것은 아니지만, ORM를 사용하면 개발 언어를 통해 직관적인 코드로 데이터를 조작할 수 있는 것 같습니다.
Java뿐 아니라 대부분의 언어의 클래스(객체)와 RDB의 테이블은 기존부터 서로의 호환 가능성을 두고 만들어진 것은 아니기 때문에 불일치가 발생한다.
불일치 | 설명 |
---|---|
세분성 (Granularity) | 경우에 따라서 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다 |
상속성 (Inheritance) | RDBMS는 객체지향 프로그래밍 언어의 특징인 상속 개념이 없다 |
일치 (Identity) | RDBMS는 기본키(primary key)를 이용하여 동일성을 정의한다.그러나 자바는 객체 식별(a==b) 과 객체 동일성(a.equals(b)) 을 모두 정의한다 |
연관성 (Associations) | 객체지향 언어는 방향성이 있는 객체의 참조(reference)를 사용하여 연관성을 나타내지만 RDBMS는 방향성이 없는 외래키(foreign key)를 이용해서 나타낸다 |
탐색 (Navigation) | 자바와 RDBMS에서 객체를 접근하는 방법이 근본적으로 다르다.자바는 그래프형태로 하나의 연결에서 다른 연결로 이동하며 탐색하지만RDBMS는 일반적으로 SQL문을 최소화하고 JOIN 을 통해 여러 엔티티를 로드하고 원하는 대상 엔티티를 선택하는 방식으로 탐색한다 |
위와 같은 불일치들을 ORM을 통해 객체간의 관계를 파악한 후 SQL문을 자동 생성하여 불일치를 해결합니다.
따라서 ORM을 사용하면 SQL문 작성 없이 객체와의 매핑을 통해 데이터베이스를 조작할 수 있습니다.