벡엔드 환경 특히
Django
는 python프레임워크이기 때문에 기본적으로python
지식이 요구되며, DB관리를 위해서SQL문
을 알아야 DB관리를 효율적으로 할 수 있다. 그러나SQL문
까지 사용하지 않고python
코드로만 DB에 접근가능한 방법이 있다. 바로ORM을 이용하는것이다. 이 ORM에 대해 알아보자.
우선 DB에 접근하는 SQL문의 예시를 한번 살펴보자
SELECT * FROM users WHERE country="colombia" ORDER BY created_date
# users테이블에서 country가 colombia인 데이터를
# created_date순으로 정렬하여 모든 데이터를 조회하기.
위와 같은 방법으로 DB에 접근하여 정보를 얻어 올 수 있고 간단해 보이지만, 데이터가 점점 쌓일수록 지저분해보이며 한 프로젝트에 최대한 적은 수의 언어로 개발을 하는 것이 좋다.
DB에 접근하기 위해서는 위와같이 SQL문
을 또 배워야하고 지저분해지는 단점이 있기 때문에 장고에서는 ORM
이 나타났다.
#python으로 구성된 ORM
User.objects.filter(country="colombia").order_by('created_date')
#위와 같은 형태의 SQL문
SELECT * FROM users WHERE country="colombia" ORDER BY created_date
장고 ORM
은 파이썬과 SQL
사이의 통역사 같은 것이라고 생각하면 이해하기가 쉽다. 저렇게 코드를 작성하게 되면 장고는 위의 파이썬 코드를 SQL
로 번역하게 된다. 개발자는 여기서 무엇인가 더 해줄 필요가 없이 원하는 DB데이터를 볼 수 있게된다.
◾ 완벽한 객체지향적인 코드
ORM
을 이용하면 SQL문
이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있다. 개발자는 객체 모델만 이용해서 프로그래밍을 하는데 집중 할 수 있게 된다. 부수적인 코드가 사라저 코드의 가독성을 높일 수 있고 생산성 또한 증가한다.◾ DBMS 종속성 하락
SQL문
을 자동으로 생성하고, 객체의 자료형 타입까지 사용할 수 있기 때문에 RDBMS
의 데이터 구조와 객체지향 모델 사이의 간격을 좁힐 수 있다.◾ ORM
이 모든 걸 해결해줄 수 없다.
ORM
을 사용하는 것은 편리하지만 잘못 구현되었을 경우 속도 저하 및 일관성을 무너뜨리는 문제가 생길 수 있다. 그렇게 되면 SQL문
을 써야할 수도 있다.◾ 성능 저하 문제