상세 컨텐츠

본문 제목

ORM [Object Relational Mapping] 이란?

IT에 대해

by choiDev 2022. 1. 22. 19:12

본문

ORM[Object Relational Mapping]이란?


OOP(Object Oriented Programming)객체 지향 프로그래밍에서 말하는 객체와 

RDB(Ralational DataBase)에서 쓰이는 테이블을 연결하는 것을 의미한다.

객체와 테이블의 정의 방법이 완벽하게 일치하지 않으므로 ORM을 통해 객체를 만들고 그걸 TABLE로

사용하기로 하면 SQL문 자동 생성하여 복잡한 쿼리를 짜는 시간을 줄이며

OOP관점으로 바로 DB 질의가 가능하여 생산성을 높이고 있다.

 

ORM의 나온 배경


JAVA는 객체 지향 관점으로 만들어지고,

RDB는 관계형 DB 관점으로 만들어졌기에 서로 호환성을 두고 만든 기술이 아니다.

객체-관계간의 불일치는 아래와 같이 정리를 할 수 있다.

 

세분성(Granularity)

DB에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다.

예시로 Person(유저)와 PersonInfo(유저정보)라는 두개 클래스로 관리하는데,

그러나 DB에는 Person이라는 하나의 테이블에 사용자의 세부사항을 모두 저장할 수 있다.

이 상황에서는 Object2개 Table 1개가 되어 개수가 달라져 관리의 불편함이 생긴다. 

상속성(Inheritance)

- RDB는 객체지향 프로그래밍 언어의 특징인 상속 개념이 없다. 예시로 모든 테이블에 필요한

데이터 (생성, 수정) 일자를 모든 테이블에 가지게 하려고 한다.

JAVA는 데이터 (생성, 수정) 일자를 가진 클래스를 상속하면 모든 객체가 데이터의 생성, 수정일을 가지는 반면

RDB는 상속의 개념이 없으므로 해당 작업을 일일히 해야한다.

 

일치(Identity)

RDB는 PK가 같아야 동일한 row라고 간주하는데 

JAVA의 객체는 주소값이 같거나 내용이 같은 경우를 구분한다. 

 

연관성(Associations)

객체지향 언어는 객체 참조(Reference)를 통해 객체관의 연관성을 나타내지만 RDB는 연관성을 외래키로

나타내며 자바의 객체 참조는 단방향의 객체 참조성을 가지기에, 서로를 참조하려면 양 객체 모두 

서로를 참조해야한다.

하지만 RDB는 외래키와 Join으로 자연스럽게 방향성이 없는 연결이 이뤄진다.

 

탐색(Navigation)

JAVA는 person.getFriendList().get(0).getName()의 형식으로 계층형태로 데이터를 탐색하지만

RDB는 JOIN을 통해 여러 Entity를 로드하고 원하는 대상 Entity를 select하는 방식으로 탐색한다.

 


ORM의 장점

- 객체지향적 코드로 Query를 프로그래밍 언어로 작성하며 로직에 집중할 수 있도록 도와준다.

- 재사용 및 유지보수의 편리성이 증가한다.

- RDB에 대한 종속성이 줄어든다.

ORM의 단점

 - 완벽한 ORM으로만 서비스 구현은 어렵다.

 - 프로시저가 많은 시스템에선 ORM의 객체지향적인 장점을 활용하기 어렵다.

관련글 더보기