몰입공간
[Django] 장고 모델 디자인 주의할 점 (Django model design principle) 본문
Programming/Django
[Django] 장고 모델 디자인 주의할 점 (Django model design principle)
sahayana 2022. 5. 23. 15:35
#1. 정규화
데이터베이스 정규화(DB normalization)에 익숙해질 것.
정규화에 관한 자세한 설명은 여기
충분한 시간을 가지고 이미 모델에 포함된 데이터들이 다른 모델에 중복되어 포함되지 않도록 하기.
#2. 캐시와 비정규화
적절한 위치에서 캐시를 세팅하기
- redis 등의 캐시서버 활용하기
- 캐시 관련 서드 파티 모듈 활용하기
#3. null and blank
보통 null값은 대부분의 필드에서 사용을 지양한다.
(relation 필드나 숫자를 다루는 필드에서 사용은 가능하다.)
blank는 대부분 사용가능하나 null 설정과 같이 설정해야하는 필드도 존재한다.
#4. Binary 필드
Binary 필드는 다음의 상황에서 쓰일 수 있다.
- 메시지팩 형식의 콘텐츠
- 원본 센서 데이터
- 압축데이터
DB 병목현상의 주요 원인이 될 수 있다.
Binary 필드로부터 파일을 직접 서비스하는 것은 무모한 짓이다.
#5. GenericForeignKey는 지양할 것
다음과 같은 이유로 GenericForeignKey는 사용하지 말자
- 데이터베이스 모델 디자인을 해친다.
- 참조무결성이 깨진다.
- 애초에 성능이 나빠진다.
#6. 거대 모델
만약 view에서 처리하는 데이터 관련 비즈니스 로직을 모델의 하위 메서드, 쿼리셋 매니저 메서드 혹은 프로퍼티로 캡슐화 한다면 모델은 엄청나게 방대해진다. 이 경우 다음과 같은 문제점이 생긴다.
- 모델 코드의 가독성이 떨어지고, 직관적인 이해가 힘들다.
- 단위 테스트가 힘들어 진다.
- 모델 설정은 보다 큰 제약과 자원소모를 전제하기 때문에 유지보수 면에서 효율적이지 못하다.
따라서 모델의 하위 메서드나 프로퍼티를 생성할 경우 최소한의 기능을 전제로하고, 이에 대한 행위 로직은 따로
빼서 관리하는 것이 좋다.
#7. 참고
- 모범 사례로 배우는 django (two scoops of django)
- Django에서 generic foreignkey를 권장하지 않는 이유(https://tech.ashe.kr/8)
'Programming > Django' 카테고리의 다른 글
Comments