[Django] 장고 ORM이란?

jiyoung·2023년 1월 3일
0

ORM이 무엇인가요?

간단히 말하자면 말 그대로 객체(object)와 관계(relational)의 연결(mapping)이라고 할 수 있습니다.

원래 데이터베이스 서버의 어떤 데이터를 조회, 추가, 수정, 삭제할 때는 sql이라는 언어를 써야합니다. 코드를 짜는것도 머리 아픈데 DB쿼리까지 신경쓰려면 머리가 두 배로 아프겠죠? 그런데 sql을 사용하지 않고, 파이썬이라면 파이썬 코드로, 자바면 자바로, 각 언어를 활용해서 sql 코드를 만들어내는 라이브러리가 있는데 이것을 ORM 이라고 합니다. ORM의 개념을 이해하기 위해서는 먼저 SQL에 대해서 알아야 합니다.

SQL이란? Structure Query Language로 데이터베이스와 대화할때 사용하는 언어입니다. 이를 콘솔에 작성하는 것을 SQL statement라고 하고 다음과 같은 형태로 사용합니다.

SELECT * FROM users WHERE country="korea" ORDER BY created_date

django는 파이썬을 기반으로 하는 프레임워크이기 때문에 원래대로라면 데이터베이스에 접근하기 위해서 SQL을 따로 사용해야 합니다. 하지만 장고에서는 ORM을 통해 두가지 언어를 사용해야 하는 귀찮은 상황을 해결해줍니다. 한마디로, 장고 ORM은 파이썬과 SQL사이의 통역사라고 할 수 있습니다. 따라서 위의 SQL 예문을 다음과 같은 파이썬 언어로 표현할 수 있게 해줍니다.

User.objects.filter(country="korea").order_by('created_date')

ORM의 장점

  • 객체 지향적 코드를 작성 할 수 있음 (직관적이고 높은 가독성)
  • 객체와 테이블의 매핑 관계가 명확하고 SQL쿼리를 별도로 작성하지 않고 DB를 관리할 수 있기 때문에 유지보수가 편리함
  • 재사용가능
  • 생산성

ORM의 단점

  • ORM만으로는 완벽한 서비스를 구현 불가능
  • 프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어려움
    -> 이미 존재하는 프로시저에 대하여 객체로 변경하여야 한다는 고충, 그 과정에서 생기는 생산성 저하나 리스크
  • 프로젝트의 복잡성이 크면 오히려 구현 난이도가 상승
  • ORM에 너무 의존하게 되면 직접 쿼리를 작성해야 하는 등의 문제가 발생했을때 대처할 수 없음

참고자료

0개의 댓글