두숟갈 스터디 - 5
무엇을 공부했나요?
Two scoops of Django 7장은 Django의 쿼리 및 데이터베이스 레이어에 대해 공부하였습니다. 현주님께서 7장의 자료를 요약 및 설명해주셨고, 호성님께서 관련 심화 자료를 준비해 발표해주셨습니다.
스터디중 다루었던 이야기들은 아래와 같습니다.
7장 쿼리와 데이터베이스 레이어
- 장고에서는 여러 종류의 데이터를 데이터베이스 종류와는 독립적인 형태로 객체화 한다(ORM). 그리고 생성된 객체에는 상호 작용할 수 있는 메서드 세트를 제공한다(Model Manager).
- 상세 페이지 view에서는 get() 대신에 get_object_or_404()를 이용하자
- 단, get_object_or_404()는 뷰에서만 사용하자!
- 예외를 일으킬 수 있는 쿼리는 try-except문을 통해
- ObjectDoesNotExist 또는 DoesNotExist
- MultipleObjectsReturned
- 쿼리를 좀 더 명확하게 하기 위해 지연 연산 이용하기 - 데이터가 정말로 필요하기 전 까지는 장고가 SQL을 호출하지 않는 특징을 활용하여, 한 줄에 길게 쓰는 대신에 여러줄에 나눠서 쓰면 가독성을 엄청나게 향상시키며, 유지보수를 쉽게 해준다.
- 고급 쿼리 도구 이용하기 - 쿼리 표현식: 프로젝트의 안전성과 성능을 향상 Query Expressions (공식문서) - 데이터베이스 함수들: 쉽고 간결하며 성능이 향상 Database Functions (공식문서)
- 필수 불가결한 상황이 아니라면 로우 SQL은 지양하자
- 필요에 따라 인덱스를 이용하자
- 트랜젝션 (Transactions)
- 각각의 HTTP 요청을 트랜잭션으로 처리하라
- 명시적인 트랜잭션 선언
- django.http.StreamingHttpResponse와 트랜잭션
- 해당 뷰를 django.db.transaction.non_atomic_requests 데코레이터로 감싸기
심화학습
- ObjectDoesNotExist vs DoesNotExist - 특정 모델이 없을때를 except로 처리 할지 아닐지
- iterator() vs all() - caching 의 여부, client side cusor or server side cusor
- db index의 원리
- Explain 을 활용한 쿼리 예상시간 및 수행시간
- Transaction ACID
ipython notebook과 Django ORM을 통해 값 검증 및 데이터 추출 등을 자주하고 있어 낯설지는 않은 부분이었습니다. 막연하게 알고 있었던 db_index나 Transaction ACID 부분을 정확하게 짚고 넘어 갈 수 있어서 좋았습니다.
어땠나요?
지난 1년 8개월동안 아무것도 모르는 상태에서 개발을 공부해가면서 서비스에 기여해 왔습니다. 초기에는 업무만 하면서도 저의 지식이 늘고 있음을 느낄수 있었습니다. 하지만 시간이 흐를수록 저의 성장속도보다 회사의 성장속도가 더 빨라졌습니다. 점점 회사에 기여할수 있는 부분이 적어졌고, 고객분들에게 그리고 동료분들에게 가치를 제공하면서 받는 즐거움도 작아지고 있었습니다. 이번 스터디를 통해 저의 성장곡선의 기울기를 증가시키는 계기로 삼으려고 합니다.