몰입공간

[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)

 

Comments