vixjv***
2023-06-23

장고 풀스택(Template은 bootstrap)을 조금 이나마 공부를 하긴 했지만, 이론적인 지식이 부족한 탓에
이번 책은 많은 도움이 되었다.
장고의 핵심적인 기능이었던 MTV(Model, Template, View)아키텍쳐는 확실히 편리하긴 하지만 , 현업에서는 프런트엔드와 백엔드가 나눠져서 분업하는 방식이 대부분이다. 자바스크립트가 전부 대체 가능해진 상황에서 Template의 역할이 점점 줄어들고 있기도 하고 장고 백엔드 주니어들을 위해 만들어진 책이라 그런지 템플릿 기능은 거의 나오지 않는다.
대신 이 책에선 실무에서 사용 빈도가 높은 모듈을 중점적으로 다루기에 오히려 나에겐 공부하기 좋은 책이었다.
1. 낮은 결합도(Loose coupling)
'결합도는 낮게, 응집도는 높게' -장고 프레임워크의 각 계층 모듈은 서로 모르게 설계 되어있다.
장고의 인증 모듈은 여러 방식이 있지만, 장고에서 처음 프로젝트를 생성하면 기본 인증 방식으로 cookie & session 인증 모듈을 제공한다.
하지만 이는 절대적이지 않다. 내가 원하는 인증 모듈이 있다면 그것을 직접 구현 할 수도 있지만,
이미 만들어진 인증 모듈을 제공하는 장고 라이브러리도 존재한다.
2. 암시적인 것보다 명시적인 것이 낫다.
장고는 개발자가 예상하지 못하는 마법과 같은 동작을 일으키지 않아야 한다. 암시적인 동작을 만들기 보다는 차라리 커스텀한
메소드를 새로 만드는 게 낫다는 것이 장고의 원칙이자 철학이다.
3. 장고의 시그널
암시적인 수행이 바람직하지 않다는 내용과는 별개로 save() 메서드를 오버라이딩해야 하는 상황이 불가피 하다면 장고의 시그널(django signals)을 사용하는 것이 좋다. post_save 시그널을 받아서 수행할 로직을 작성한다.
4. 모델 모듈이 도메인 로직을 캡슐화 하도록 작성한다.
장고에는 Fat Model 패턴이 있다. 특정 모델과 관련된 데이터 조작 메서드를 모델 내부에 구현하여 모델을 사용하는 외부 모듈이 가벼워지게 하는 방식이다.
5. 효울적인 SQL 수행
장고의 쿼리셋(QuerySet)은 내부적으로 최적화 된 SQL수행을 한다는 철학을 따르고 있다.
무언가를 배울 때 그 교육에 대한 철학이 있다는건 멋진 일이다. chapter1 에서는 이렇듯 장고에 대한 철학과 신입/주니어 개발자를 위한 이력서 작성하는 팁이 있어서 참조하면 유용할 것이다.
· 모델링과 마이그레이션
ER(Entity Relation) - 백엔드 개발 실무 프로젝트를 진행할 때 가장 먼저 하게 되는 작업이다. db관점에서는 테이블을 정의하고 테이블 간의 관계를
매핑하는 것이며, 장고에서는 이 테이블 간의 관계를 어떻게 모델로 가져올 것인지를 고민하는 작업을 의미한다. 뒤로 갈 수록 실습 위주의 코드와 분석한 내용을 쉽게 풀어서 써져 있다.
장고 모델링을 정말 라이트하게 사용해본 나로써는 이 부분을 책 한권으로 자세하게 배울 수 있다는 점이 크게 다가왔다.
모델링에 대한 어렴풋이 알았던 개념들을 또렷하게 정리 할 수 있었다.
각 파트의 마지막 장엔 전체적인 내용을 한페이지에 정리해주는 정리 부분이 있어서 굉장히 유용했다.
[ 마이그레이션 관련 명령어 ]
. makemigrations : 마이그레이션 생성
. sqlmigrate : 특정 마이그레이션 파일에서 수행되는 SQL(DDL) 조회
. migrate : 마이그레이션 파일을 데이터베이스에 반영
. showmigration : 지금까지의 마이그레이션 수행 이력 조회
. squashmigrations : N 개의 마이그레이션 파일을 1개로 통합
. makemigrations --empty : 커스텀 마이그레이션 파일 생성, 주로 데이터 마이그레이션에 사용한다.
· ORM과 쿼리셋
ORM이란
먼저 데이터베이스(관계 지향형)와 파이썬(객체 지향형)과 같은 언어 사이에 ORM(Object Relational Mapping)이라는 기술이 생겨난 이유는 관계 지향형 패러다임은 데이터를 중심으로 실세계를 바라보며 객체 지향형 패러다임은 객체를 기준으로 실세계를 바라본다.
· ORM의 장점
ORM은 객체 지향형과 관계 지향형 패러다임 간 차이 때문에 복잡해진 수 있는 로직을 객체 지향적인 코드로 작성할 수 있도록 보조해준다. 이렇게 OMR 으로 만들어진 로직은 더 직관적이며 개발자가 비즈니스 로직에만 집중할 수 있도록 도와준다.
· 직렬화
컴퓨터 과학에서 직렬화(Serializer)란 데이터의 구조와 상태를 해치지 않고 다른 컴퓨팅 환경에 저장하고 재구성이 가능한 포맷으로 변환하는 과정을 의미한다.
각 파트의 소스 예시들은 정말 저자에게 감사할 정도로 잘 나와있다. 솔직히 한 번 읽고 실습 해본다고 해서 저 모든 노하우들이 한번에 남진 않겠지만, 두고두고 헷갈리는게 있을 때마다 책을 참고하면 공부할때 유용할 것같다.