20210529 장고 CBV 뿌수기 열아홉번째 주

지난주에 비해 갑자기 진도도 많이 나가고 여러모로 벅찼지만 뿌듯한 한 주였다.

배운 것들

  • URL 기준으로 app을 나누고, 기능 기준으로 파일 나누기
  • Service Layers에 DB를 조회하는 모든 비즈니스 로직을 넣어 views와 분리하는 방

CBV(Class Based View)

  • 재사용성이 높아지고, 코드 중복이 줄어든다. 각각의 변수를 따로 관리하지 않아 실수의 여지를 줄인다. 배보다 배꼽이 더 커지는 경우, class 정의하는 것이 더 비효율적일 수도 있다.
  • CBV(Class Based View)와 FBV(Function Based View): 어느 하나가 더 낫다거나 서로 대립하는 것이 아니므로 상황에 맞게 조합하여 사용하자
  • FBV는 상황에 따라 CBV 보다 좋은 가독성을 제공할 수 있다. 간단한 로직의 경우 CBV보다 효율적이다.
  • 호출 순서: as_view() -> setup() -> dispatch()
    • as_view()는 class형으로 작성한 view를 인스턴스화하여 url에서 함수를 리턴
    • setup()은 어트리뷰트를 세팅한 후 dispatch()를 호출
    • dispatch()는 views에 정의한 함수에서 HTTP 메서드에 맞는 함수를 찾아 호출
  • 데코레이터: 장고에서 만들어진 유용한 데코레이터들을 통해 함수 실행 전후의 시점에서 동작하는 추가 기능을 넣어줄 수 있다.
  • DTO(Data Transfer Object): views.py에서 받은 요청의 데이터는 service layer에 넘겨줄 때 포맷에 맞게 가공하여 전달한다. dataclass 데코레이터로 감싼 class로 데이터를 정의하여 만든 dto를 넘겨준다.
  • 장고 내장 뷰 활용하기
    • IndexTemplateView: 인덱스 페이지
    • ListView: 해당 모델의 모든 객체를 템플릿에 전달
    • DetailView: 해당 모델의 pk에 해당하는 한 객체를 템플릿에 전달

실습한 것들

학생조회 페이지 내의 앱과 폴더 나누어 import하기

  • 학생 관련 페이지와 관계 관련 폐이지로 나누어 앱을 관리
  • views를 폴더로 만들어 그 안에서 또 각각의 views 담당 파일을 생성
  • dto와 utils 파일을 별도로 생성하여 관리

CBV로 Service Layer 만들기

  • dto와 UserService, ClassService 등의 메서드로 로직 처리하기
  • IndexTemplateView 상속한 클래스로 Index 페이지 만들기
  • View 상속하여 signup, login 페이지 만들기
  • 장고에 내장된 뷰 ListView와 DetailView 만들기
    • get_context_data로 템플릿에 던져줄 데이터 추가하기
  • LoginRequiredMixin으로 특정 페이지 접근 시 권한 체크

스터디 / 인강

  • JavaScript 스터디에서 이벤트, 타이머, 비동기와 Ajax 마스터: 브라우저의 이벤트루프와 콜스택, 태스크큐 등에 대해 잘 알 수 있었다.
  • CS50 인강과 알고리즘 인강을 통해 고급정렬인 퀵정렬과 병합정렬을 배웠다.
  • CS 스터디에서 프락시와 캐시를 공부해서 발표했다. 다른 사람들의 발표를 통해 소켓과 REST API, 쿠키와 세션 등을 배울 수 있었다.

느낀 점

  • 수업을 세번이나 들었더니 뇌용량이 꽉차서 인강을 많이 못들었다. 그래도 배운게 많아서 유익한 시간이었고 복습을 빡시게 해야겠다.
  • CS 스터디와 자바스크립트 스터디도 내용이 정말 많아서 공부할 때는 너무 버거웠지만 해놓고 나니 뿌듯했다.