본문 바로가기
[Django]/Django 개념

[Django] ORM이란?

by 코드몽규 2022. 3. 14.
반응형

ORM을 알아보기 전에 먼저 SQL에 대해 알고 넘어가자.

 

What is SQL

  • SQL means Structured Query Lnaguage 
  • Is the language that the SQL databases understand
  • We write SQL statement to get data from the database
  • SQL databases are relational databases

SQL의 언어적 특성

1. SQL은 대소문자를 가리지 않습니다.

 

2. SQL 명령은 반드시 세미콜론(;)으로 끝나야 한다.

 

3. 고유의 값은 따옴표('')로 감싸준다. 

ex) SELECT * FROM EMP WHERE NAME = 'James' ;

 

4. SQL에서 객체를 나타낼 때는 백틱(``)으로 감싸준다. 

ex) SELECT `COST`, `TYPE` FROM `INVOICE`;

 

5. 주석은 일종의 도움말로, 주석 처리된 문장은 프로그램에서 동작하지 않습니다. 한 줄 주석은 문장 앞에--를 붙여서 사용합니다.

ex) -- SELECT * FROM EMP;

 

6. 여러 줄 주석은 /* */로 감싸줍니다.

ex)

/*

SELECT * FROM EMP WHERE EMPID = (SELECT * FROM EMP WHERE NAME = '홍길동')

*/


ORM 이란?

ORM

 

- ORM(Object Relational Mapping) 은 객체와 관계형 데이터 베이스의 데이터를 자동으로 매핑해주는 것을 의미한다. 객체 지향 프로그래밍에선 Class를 사용하고, 관계형 데이터 베이스는 Table을 사용한다. 때문에 객체 모델과 관계형 모델 간에 불일치가 존재하게 되는데, ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.

 


ORM의 장단점

장점

  • 객체 지향적인 코드로 인해 더 직관적이게 사용가능하다.

- ORM을 이용하면 SQL Query가 아닌 직관적인 코드 (메서드)로 데이터를 조작할 수 있어 개발자가 객체 모델로 프로그래밍하는 데 집중할 수 있도록 도와준다.

- 객체 지향적인 접근으로 인해 생산성이 증가한다. 

 

  • 재사용 및 유지보수의 편리성이 증가한다.
  • DBMS에 대한 종속성이 줄어든다.

 

단점

  • ORM의 한계 

- ORM을 사용하면 매우 편리할 수 있지만 그만큼 신중하게 설계를 해야 한다. 프로젝트의 복잡성이 커질수록 난이도가 올라간다. 또한 부족한 설계로 객체관의 관계가 잘못 구현되었을 경우에는 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있다. 

 

  • 객체 - 관계 간의 불일치 

세분 성(Granularity)

  경우에 따라서는 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다.(User라는 Table이 Person, Address라는 클래스로 구분해서 생성하는 경우)

상속 성(Inheritance)

  RDBMS는 객체지향 프로그래밍 언어의 특징인 상속 개념이 없다.

일치(Identity)

  RDBMS는 Primary key를 이용하여 동일성을 정의하지만 객체지향 언어는 객체 식별(a==b)과 객체 동일성(a is b)을 모두 지원한다.

연관성(Associations)

  객체지향 언어는 방향성이 있는 객체의 참고를 사용하여 연관성을 나타내지만 RDBMS는 방향성이 없는 외래 키를 이용해서 나타낸다.(객체 지향 언어는 쌍방향 참조 시 각 객체가 서로를 참조할 변수를 지녀야 한다.)

탐색(Navigation)

  객체지향 언어의 경우 객체 간의 연결을 통해서 이동하며 탐색 및 순회하지만, RDBMS에서는 일반적으로 SQL문을 최소화하고 쿼리를 최적화하여 Join을 통해 여러 entity를 로드하고 탐색 및 선택한다.

 

 

반응형

댓글