본문 바로가기
Computer-Sience

[Database] ORM(Object-Relational Mapping)

by dev_ss 2022. 12. 23.

ORM (Object-Relational Mapping) : 

객체관계형 데이터 베이스의 데이터를 자동으로 매핑해주는 것을 의미

 

Java와 같은 객체 지향 프로그래밍 언어들은 클래스를 선언하여 인스턴스에 정보를 저장하는 것처럼

관계형 데이터 베이스는 테이블을 생성하고 스키마를 기반으로 인스턴스에 정보를 저장한다.

 

여기서 클래스와 테이블은 모델 간의 불일치가 존재하고,

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

 


ORM의 간단한 예시로 SQL query문과 Python의 웹 프레임워크인 Django의 queryset을 비교해볼 수 있다.

 

Example :

# SQL
SELECT ID FROM USER WHERE AGE = 50;

이는 SQL query문으로 'USER' TABLE에서  AGE가 50인 대상 ID들의 값을 가져오라는 명령어이지만,

 

아래의 ORM으로 Django에서도 동일한 기능을 할 수 있는 코드를 작성할 수 있다.

 

Example : 

# Django

# 객체 조회
objects_id = User.objects.filter(age=50)

# id 값 추출
ids = [object.id for object in objects_id]

차이는 SQL query에서는 ID 값들이 반환이 되지만 Django에서는 조건에 맞는 객체가 반환이 되기 때문에 추가로

인스턴스 값을 추출하는 부분이 필요하다.


ORM의 장단점:

 

장점 :

 1. 객체지향적 코드로 재사용성 및 유지보수의 편리성이 확대

   - ORM은 독립적으로 작성되어 있고, 해당 객체들을 재사용이 가능

   - 명확한 Mapping 정보를 통하여 ERD의 의존도를 낮추는 것이 가능

 

 2. DBMS에 대한 종속성 축소

   - 대부분의 ORM Solution은 DB에 종속적이지 않음

   - 종속적이지 않다는 점은 구현 방법 외에도 자료형까지 유효하다는 점

 

단점 :

 1. ORM만으로는 완벽한 서비스 구현이 어려움

   - 잘못된 구현으로 인하여 성능의 저하를 야기 (ex. Django - N + 1 문제)

   - 서비스 규모가 커지고 복잡도가 높아질 때 구축 난이도 또한 상승

 

 2. 프로시저가 많은 시스템에서는 ORM의 객체지향적 장점 활용의 어려움이 존재

   - 프로시저가 많은 시스템에서는 다시 객체로 전환하는 과정에서 생산성 저하 혹은 리스크 발생 가능

반응형