728x90

6. 장고에서 모델 이용하기

- 모델은 장고 프로젝트에서 토대가 되는 부분이다. 성급하게 모델을 작성하게 되면 어느 순간 프로젝트가 내생각과 다르게 흘러가는 경험을 하게 될것이다.

- 그렇기 때문에 모델은 신중히 미래를 고려하여 설계해야만 한다.

 

6-1. 앱을 분리하자

- 모델이 너무 많으면 앱을 나눠야 한다. 하나의 앱에 모델이 20개 이상있으면 너무 많은 일을 한다는것을 반증하는 것이다. 책에서는 모델 5개가 넘지 않길 권장한다.

6-2. 모델 상속에 주의하자

모델의 상속 스타일 장점  단점
상속을 이용하지 않는 경우: 모델들 사이에 공통 필드가 존재할 경우, 두 모델에 전부 해당 필드를 만들어 준다. 테이블에 어떤 식으로 매필되는지 상관 없이 장고 모델을 한 눈에 이해하기 쉽다. 모델들 사이에 서로 중복되는 테이블이 많을 경우 이를 지속적으로 관리하는 데 어려움이 따른다.
추상화 기초 클래스: 오직 상속받아 생성된 모델들의 테이블만 생성된다. 추상화된 클래스에 공통적인 부분을 추려 놓음으로써 한 번만 타이핑을 하면 된다. 
추가테이블이 생성되지 않고 여러 테이블에 걸쳐 조인을 함으로써 발생하는 성능 저하도 없다.
부모 클래스를 독립적으로 이용할 수 없다.
멀티테이블 상속: 부모와 자식 모델에 대해서도 모두 테이블이 생성된다. onetoonefield는 부모와 자식간 적용된다. 각 모델에 대해 매칭되는 테이블이 생성된다. 따라서 부모 또는 자식 모델 어디로든지 쿼리를 할 수 있다. 부모 객체로부터 자식 객체를 호출 하는 것이 가능하다: parent.child 자식 테이블에 대한 각 쿼리에 대해 부모 테이블로의 조인이 필요하므로 이에 따른 상당한 부하가 발생한다.
프록시 모델: 원래 모델에 대해서만 테이블이 생성된다.  각기 다른 파이썬 작용을 하는 모델들의 별칭을 가질 수 있다.  모델의 필드를 변경할 수 없다.

6-3. 장고 모델 디자인

- 정규화 하기 -> 데이터베이스 자체의 정규화에 대한 지식습득이 먼저다! 이 원칙에 맞춰 디자인을 해야만 한다.

- 캐시와 비정규화

    -적절한 위치에서 캐시를 세팅하는 것은 모델을 비정규화 할 때 발생하는 문제점들을 상당부분 해결해준다.

- 반드시 꼭 필요할때만 비정규화를 하도록한다.

-언제 널을 쓰고 언제 공백을 쓸것인가?

필드 타입  null=True blank=true
charfield, textfield, slugfield, emailfield, uuidfield, filefield, imagefield 이용하지 않는다. 이용한다.
booleanfield 이용하지 않는다. 이용하지 않는다.
integerfield, floatfield, decimalfield 해당값이 null로 들어가도 문제가 없다면 이용한다. 해당값이 빈값을 받아도 문제가 없다면 이용한다.
datetimefield, datefield null값으로 설정 가능하다면 이용한다. null=true와 같이 이용한다.
foreignkey, manytomanyfield, onetoonefield null값으로 설정 가능하다면 이용한다. 이용한다.

 

-정리

이외에도 모델에 관한 부분은 수많이 있으며 또한 two scoops of django에도 굉장히 자세히 다루고 있다. 제필요성에 의해서 필요한 부분만 적어둔거기 때문에 따로 웹서핑이든 도서를 통해 계속해서 학습을 해야하는 파트라고 생각됩니다!

728x90

+ Recent posts