[데이터베이스] 객체 관계형 데이터베이스 매핑
ORM (Object Relational Mapping)
객체 관계형 데이터베이스로 자동으로 매핑해주는 것을 의미한다.
- 객체간의 관계를 바탕으로 기존에 발생했던 객체 모델과 관계형 모델간의 불일치를 완화시켜주고 해결해준다.
- DB <-> Mapping <-> Object Field
- 이와 같은 개념으로 객체를 통해 간접적으로 데이터베이스의 데이터들을 다루는 것을 말한다.
장점
-
Object Relational
- 객체 지향적인 코드로 인해서 직관적이면서 로직적으로 구현할 수 있도록 해준다.
- 불필요한 코드를 줄일 수 있어서 코드의 가독성 및 생산성이 증가한다.
-
재사용 및 유지보수
- ORM은 독립적으로 작성되기때문에, 객체들을 재사용이 가능하다.
- 매핑 정보가 정확해서 ERD(Entity Relationship Diagram)보는 것에 의존성이 낮다.
- 디자인 패턴을 견고하게 짤 수 있다.
- 뷰와 함쳐지는 형태로 컨트롤러를 사용해서 가공된 데이터를 사용한다.
-
종속성 감소
- DBMS(Database Management System)에 대한 종속성이 줄어든다.
- RDBMS의 데이터 구조가 JAVA의 객체지향 모델 간격을 좁힐 수 있다.
- 객체에만 집중하기때문에 DBMS 교체에 필요한 시간과 리스크가 적어진다.
- 오버라이드 기능을 사용할 경우, 간결하고 빠른 가공이 가능하다.
- DBMS(Database Management System)에 대한 종속성이 줄어든다.
단점
-
어려운 서비스
- ORM으로는 설계에 매우 신중해야한다. 복잡도가 높아지면 난이도또한 같이 높아진다.
- 로직적으로 구현하지 못할 경우 리스크가 크다. (성능 저하로 이어진다.)
-
기존 시스템의 한계
- 프로시저가 많은 시스템에서 구현할 경우, 기존의 시스템들을 다시 객체화시켜야해서 생산성이 떨어지고 리스크가 크다.
특징
-
Granularity(세분성)
경우에 따라 데이터베이스에 있는 테이블보다 많은 클래스를 가진 객체 모델을 지닐 수 있다.
-
Coarse Granularity
- PersonDetails Class
-
Fine Granularity
- Persion Class, Address Class
-
-
Inheritance(상속)
RDBMS는 OOP(Object Oriented Programming) 객체 지향 프로그래밍으로 자연적 패러다임인 상속과 유사하게 정의되지 않으므로 상속의 개념이 없다.
-
Identity(일치)
RDBMS는 하나의 개념을 통해 정의하는 데 이것은 Primary key(기본키)로 정의한다.
-
Associations(연관성)
객체지향 언어는 Object Reference(객체 참조)를 사용하는 연관성을 나타내지만, RDBMS는 연관성을 Foreign key(외래키)로 정의한다.
-
Navigation(탐색 또는 순회)
RDBMS에서 일반적인 SQL 쿼리 수를 최소화하고 JOIN을 통해 여러 Entity(엔티티)를 로드하고 대상 엔티티를 select(선택)한다.