본문 바로가기
TTL/9주차 ~ 12주차 TIL (10.24 ~ 11.18)

2022-11-15 TIL (django orm, SQL언어)

by dev_junseok 2022. 11. 15.

ORM이란?

ORM (Object Relational Mapping) 은 데이터베이스를 하나의 '객체(Object)' 덩어리로 보고, 데이터베이스를 SQL언어가 아닌 클래스로 쉽게 표현 및 사용 할 수 있게 해 줍니다.

 

SQL 이란?

데이터베이스를 사용할 때, 데이터베이스에 접근할 수 있는 데이터베이스 하부 언어를 말한다.

 

가령 book 이라는 객체에서 저자의 이름이 kim인 책 목록을 가져오고 싶을 때,

 

SQL 쿼리문을 사용할 경우

book_list = new list();
sql = "SELECT book FROM library WHERE author = 'kim'";
data = query(sql);
while (row = data.next()){
    book = new Book();
    book.setAuthor(row.get('author'));
    book_list.add(book);
}

이런 복잡한 코드를 쳐야하지만 우리가 사용하는 django에서 제공하는 django orm 을 사용하면

book_list = BookTable.query(author="kim")

이렇게 간단하게 한 줄로 원하는 객체를 가져올 수 있다.

 

ORM 활용

 

1. 데이터 가져오기

 

  • objects.all()
>>> Book.objects.all()
<QuerySet [<Book: one>, <Book: two>]>

Book객체에 저장된 데이터를 모두 가져올 수 있다.

 

  • objects.get()
>>> Book.objects.get(author='kim')

Book객체에서 이름이 kim인 데이터를 가져온다

 

2. 데이터 추가하기

 

  • objects.create()
>>> Book.objects.create(title='Developer', author='hyelyn')

데이터 모델 Book객체에 정의된 title과 author 필드에 데이터를 넣어 새로운 데이터를 추가할 수 있다.

  • ()
>>> book = Book()
>>> book.title = 'Hyelyn Potter'
>>> book.author = 'hyelyn'
>>> book.save()

3. 데이터 검색

  • objects.delete()
>>> d = Book.objects.get(title='Developer')
>>> d.delete()
# 삭제 완료.

Book 객체중에 title이 Developer인 객체를 가져와서 삭제한다.

 

ORM의 장점 

  • SQL query가 아닌 직관적인 코드로 (메소드) 데이터를 조작할 수 있어 개발자가 객체모델로 프로그래밍하는 데 집중할 수 있다.
  • 각 객체에 대한 코드를 별도로 작성하기 때문에 코드 가독성이 좋다.
  • SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 생산성이 좋다.

ORM의 단점 

  • 프로젝트 복잡성이 커질 경우 난이도가 높아진다.
  • 잘못 구현하게 되면 속도가 저하되고 일관성이 없어질 수 있다.
  • sql 쿼리문으로 다루지 않다 보니 정확한 원리를 이해하는데 어려움이 발생할 수 있다.

django ORM을 활용하여 데이터를 다루는 것이 편할 수는 있지만, 데이터에 대해 이해하고 더 잘 다루기 위해서는 SQL 질의문이 어떤 식으로 데이터를 다루는지 확인하고 ORM을 사용하면 더 효과적으로 사용할 수 있다

 

출처

Django ORM - 인코덤, 생물정보 전문위키 (incodom.kr)