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)
'TTL > 9주차 ~ 12주차 TIL (10.24 ~ 11.18)' 카테고리의 다른 글
2022-11-18 TIL (쿠키, 세션, 캐시, 로컬스토리지) (0) | 2022.11.20 |
---|---|
2022-11-17 TIL (django orm) (0) | 2022.11.17 |
2022-11-14 TIL (django 테스트코드 작성하기) (0) | 2022.11.14 |
2022-11-11 TIL(도커 volume, Dockerfile, entrypoint, 포트포워딩) (0) | 2022.11.13 |
2022-11-10 TIL (도커 Docker 공부) (0) | 2022.11.10 |