본문 바로가기
  • 저희는 평생 개발할 운명이걸랑요
Tech.log/데이터베이스

[ORM(Object Relational Mapping)]

by SpaciousKitchen 2021. 6. 4.

ORM(Object Relational Mapping)

그림1.ORM이미지

객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것
객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용하기 때문에  모델 간에 불일치가 존재한다.


ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다

 

 

ORM의 장 단점

 

장점
객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와준다.
재사용 및 유지보수의 편리성이 증가한다.
DBMS에 대한 종속성이 줄어든다. 

단점
프로젝트의 복잡성이 커질경우 난이도 또한 올라갈 수 있다.
잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길 수 있다.
프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵다.


더 자세한 내용은 https://gmlwjd9405.github.io/2019/02/01/orm.html 참고 

 

 

 

ORM의 특징

 

세분성(Granularity)
경우에 따라서 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다.

예를 들어, 객체지향 프로그래밍에서는 코드 재사용과 유지보수를 위해 Person과 Address라는 두 개의 클래스로 나눠서 관리할 수 있다. 그러나, 데이터베이스에는 person이라는 하나의 테이블에 사용자의 세부사항을 모두 저장할 수 있다

상속성(Inheritance)
RDBMS는 객체지향 프로그래밍 언어의 특징인 상속 개념이 없다.

일치(Identity)
RDBMS에서는 PK가 같으면 서로 동일한 record로 정의하지만, Java에서는 주소값이 같거나 내용이 같은 경우를 구분해서 정의한다.

연관성(Associations)
객체지향 언어는 객체 참조(Reference)를 사용하는 연관성을 나타내는 반면, RDBMS는 연관성을 ‘외래키(Foreign Key)’로 나타낸다.

 

 

연관성 RDBMS예시 그림

RDBMS에서는 FK와 Join으로 자연스럽게 방향성이 없는 연결이 가능하지만,

 

public class Employee {
	private int id;
	private String first_name;
	… 
    
    private Department department;
	// Employee -> Department … 
    
    
  }

자바에서의 객체 참조는 아래처럼 방향성이 있기 때문에 양방향 관계가 필요한 경우 연관을 두 번 정의해야 한다.

 

 

ORM 프레임워크

 

JPA/Hibernate
JPA(Java Persistence API)는 자바의 ORM 기술 표준으로 인터페이스의 모음이다.
이러한 JPA 표준 명세를 구현한 구현체가 바로 Hibernate이다.


Sequelize
Sequelize는 Postgres, MySQL, MariaDB, SQLite 등을 지원하는 Promise에 기반한 비동기로 동작하는 Node.js ORM이다.
Django ORM
python기반 프레임워크인 Django에서 자체적으로 지원하는 ORM이다.

 

 

 

 

 

'Tech.log > 데이터베이스' 카테고리의 다른 글

[SQL Injection]  (0) 2021.06.04
[NoSQL]  (0) 2021.05.22
[Statement VS Prepared Statement]  (0) 2021.05.22
[트랜잭션이란?]  (0) 2021.05.22
[정규화]  (0) 2021.05.21

댓글