Django ORM

hs·2021년 11월 30일
0

전에 프로젝트를 진행하면서 조금 더 깊게 Django에 대해 생각 할 수 있는 기회가 생겼다. 그 때 생각 했던 것들을 정리해 보려한다.

  1. ORM을 쓰는 이유
  2. 데이터베이스의 접근을 줄이는 방법
  3. Django를 좀 더 활용하는 법

그 중 첫번째 ORM을 쓰는 이유에 관한 글이다.

Django ORM을 사용하는 이유

ORM(Object Relational Mapping)은 객체 관계 매핑으로 객체 지향 언어와 데이터 베이스의 통역사 같은 역활을 한다.
전에 생각으론 단순히 ORM을 사용하는 이유는 보다 직관적이고 사람이 이해하기가 쉬워서만 사용한다고 생각하였다.
하지만 찾아보니 좀 더 많은 이유가 있었고 그에 따른 단점들도 존재 하였다.

장점

1. 직관성(객체 지향적 코드)

  • SQl문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작하기 때문에 객체 모델만을 이용해 프로그래밍을 할 수 있다.
  • CRUD를 위한 SQL문을 작성할 필요가 없다.(쿼리 작성은 필요)
  • 각 객체 별로 작성하기 때문에 가독성이 높다.

2. 재사용, 유지보수의 편리성이 증가

  • ORM은 독립적으로 작성이되어있고, 객체로 작성되었기 때문에 재활용이 가능하다.
  • 매핑하는 정보가 명확하여 ERD를 보는 의존도를 낮출 수 있다.

3.DBMS 종속성 하락

  • 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하고, 객체의 자료형 타입까지 사용할 수 있기 때문에 RDBMS의 데이터 구조와 객체 지향 모델 사이의 간격을 좁힐 수 있다.
  • 객체에만 집중할 수 있기 때문에 DBMS를 교체하는 큰 작업에도 리스크가 적다.

단점

1. 완벽한 ORM 으로만 서비스를 구현하기가 어렵다.

  • 사용하기는 편하지만 설계는 매우 신중하게 해야한다.
  • 프로젝트의 복잡성이 커질경우 난이도 또한 올라갈 수 있다.
  • 잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길 수 있다.
  • 일부 자주 사용되는 대형 쿼리는 속도를 위해 SP를 쓰는등 별도의 튜닝이 필요한 경우가 있다.
  • DBMS의 고유 기능을 이용하기 어렵다. (하지만 이건 단점으로만 볼 수 없다 : 특정 DBMS의 고유기능을 이용하면 이식성이 저하된다.)
  • 복잡한 쿼리문의 경우 SQL문이 좀 더 직관적이면서 효율적일 수 있다.

2. DB와 바로 연결하는 것보다 초기설정이 더 많아지거나 복잡해 질 수있다.

3. DB와 ORM 프레임워크, 내부코드에 대한 충분한 이해가 없는 경우 문제 해결이 힘들다.

4. DB에 직접 Query문을 보내는 것이 아니기 때문에 성능저하가 발생한다.

정리

Django ORM을 사용하면서 느꼈던 장단점도 있고 생각하지 못한 장단점도 있다. 직관성이나 재사용성은 생각을 해보았지만 데이터베이스 측면 즉, 서버에서의 생각을 많이 하지 못한것 같다. 단순히 ORM을 사용만 하는 것이 아닌 동작 방식을 이해하고 작성해야 서버의 성능을 향상시킬 수 있다는 것을 알게 되었다.

profile
무엇이든 끝까지 보람차게

0개의 댓글