지난주에 비해 갑자기 진도도 많이 나가고 여러모로 벅찼지만 뿌듯한 한 주였다.
배운 것들
- 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 스터디와 자바스크립트 스터디도 내용이 정말 많아서 공부할 때는 너무 버거웠지만 해놓고 나니 뿌듯했다.