[Django]ORM의 장단점

김예진·2021년 4월 4일
4

TIL

목록 보기
40/40

이전에 Django를 사용하면서 ORM에 대해 글을 남긴 적이 있었는데, 그 때는 ORM이 무엇인지, 어떻게 사용하는 것인지만 써서 ORM의 장,단점을 정리해보려고 한다.

ORM이란?

Object Relational Mapping
: 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 도우미 역할을 한다.

ORM의 장/단점

- 장점

1) 완벽한 객체지향적인 코드 -> 직관적인 이해가 쉬움
: ORM을 이용하면 SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있어, 개발자가 객체 모델만 이용해서 프로그래밍을 하는 데 집중할 수 있게한다. SQL 문을 사용하면서 같이 필요한 선언문, 할당, 종료 같은 부수적인 코드가 사라지거나 줄어들며, 각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높일 수 있다. 객체지향적 접근과 SQL의 절차적/순차적 접근이 혼재되어있던 기존 방식과 달리 오직 객체지향적 접근만 고려하면 되기때문에 생산성이 증가한다.

2) 재사용, 유지보수, 리팩토링의 용이성
: ORM을 통해 작성한 객체를 재활용할 수 있다는 측면에서 재사용 및 유지보수의 편리성이 증가함

3) DBMS(DataBase Management System) 종속성 하락
:객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하고, 객체의 자료형 타입까지 사용할 수 있기 때문에 RDBMS의 데이터 구조와 객체지향 모델 사이의 간격을 좁힐 수 있다. 객체에만 집중할 수 있기 때문에 DBMS를 교체하는 큰 작업에도 리스크가 적고 드는 시간도 줄어든다. 예들 들어 자바에서 가공할 경우 equalshashCode의 오버라이드 같은 자바의 기능을 이용할 수 있고, 간결하고 빠르게 가공할 수 있다.

- 단점

1) ORM이 모든 걸 해결해줄 수 없다. -> 적절하게 SQL문을 사용할 수 있어야한다.
: 프로젝트의 복잡성이 커질 수록 난이도도 올라가고 부족한 설계로 잘못 구현되었을 경우 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있다. 또한 일부 자주 사용되는 대형 SQL문은 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있다.

2) 복잡한 쿼리문의 경우 오히려 SQL문으로 사용이 직관적이면서 효율적일 수 있다.

ORM이 적절하게 사용되기 위한 방법**

1) 타겟 데이터베이스를 이해하라

  • ORM을 적용할 때, SQL 및 데이터베이스의 락킹(locking) 모델을 무시하면 안된다. O-R 매핑은 작업을 쉽게 해 주는 툴이지, 구현되는 환경에 대한 이해를 불필요하게 만드는 툴은 아니다.(ORM 적용 환경에서 발생하는 많은 문제가 데이터베이스와 SQL의 문제를 간과함으로써 발생한다.)

2) 필요한 경우 SQL을 사용하는 것을 두려워하지 마라

  • 많은 경우에서 이 방법으로 효과를 볼 수 있다. Hibernate, TopLink와 같은 ORM 제품은 SQL 쿼리 작성 기능을 제공한다. 하지만 경우에 따라 SQL문을 직접 작성해야 할 경우도 있다.

3) O-R 매핑 제품을 선택하기 전에 충분히 검토하라

  • 모든 ORM 제품이 동일한 수준의 기능을 제공하는 것은 아니다. 요구 사항을 반영하는 환경을 구축하고 2~3가지 제품을 비교 테스트해 봐야 한다. 이 과정을 통해 ORM이 성능 기준을 만족하는지 검증할 수 있다. 엔터프라이즈 개발 과정의 다른 요소들과 마찬가지로, 프로젝트 라이프사이클의 초기 단계에서 성능과 관련된 리스크를 최소화하는 것이 중요하다. 또 ORM 툴의 매핑 기능에 과도한 오버헤드가 수반되지 않는지 확인해야 한다.

4) ORM이 적절하게 사용될 수 있는 상황을 이해하라

  • ORM은 엔티티를 개별적으로 업데이트하고 간헐적으로 셋 기반 작업을 수행하는 OLTP 애플리케이션에 특히 적합하다.

5) ORM이 적절하지 않은 경우를 이해하라

ORM이 적합하지 않은 경우

    ▷ 많은 수의 레코드에 대해 잦은 빈도로 벌크 업데이트를 수행하는 애플리케이션

    - OLAP 애플리케이션
    

    ▷ 데이터 마이닝을 위해 사용되는 어플리케이션에서는 이미 데이터를 본래의 엔티티 상태로 사용하기 어렵다.

    - 데이터의 인출 및 업데이트를 위해 핸드코딩으로 작성된 SQL 및 저장 프로시저를 이용하는 데이터베이스 환경

    이 경우 JDBC 기반의 접근 방법이 최선의 선택이 될 수 있다. iBATIS SQL Maps 역시 이러한 환경에서 빛을 발한다

    하지만 몇몇 ORM 제품은 기존 스키마 및 저장 프로시저와 효과적으로 연동될 수 있으므로, 이러한 환경에서도 ORM의 사용을 고려할 가치가 있다.
    

    ▷ 순수 SQL 기반 접근 방법을 적용하는 것이 적절한 애플리케이션

    - 비즈니스 로직의 대부분이 데이터베이스에 이미 구현되어 있거나, 데이터베이스 무결성 제약( integrity constraint )이 적용되어 있는 경우 등을 그 예로 들 수 있다. 이러한 애플리케이션에서는 오브젝트 또는 ORM의 활용 여지가 매우 적으며, 데이터베이스 테이블을 도메인 오브젝트로 모델링 함으로써 기대할 수 잇는 효과가 거의 없다.
profile
Backend Developer 🌱 벨로그 내용을 티스토리로 이사중~!

1개의 댓글

comment-user-thumbnail
2022년 10월 26일

잘보고갑니다 👍

답글 달기