장고는 파이썬 웹 프레임워크이자 풀스택 프레임워크이다. 하지만 대부분의 웹 서비스는 프런트엔드와 백엔드를 분리해서 개발한다. 더욱이 리액트나 뷰 같은 훌륭한 프런트엔드 SPA 도구가 등장했고 DRF라는 강력한 장고 라이브러리가 있기 때문에 장고를 백엔드 개발 도구로 사용하는 것이 더 효과적이다. 이 책은 파이썬 백엔드 개발을 위한 장고의 핵심 개념을 다루고 있다. 실제 주니어 개발자가 궁금해하던 내용을 포함하여 백엔드 개발을 하기 위해 알아야 하는 CS 지식과 장고 코어 모듈을 입문자가 쉽게 이해할 수 있도록 설명한다. 또한 장고의 동작 원리와 구조를 정확하게 이해하는 데 도움을 주는 다양한 그림과 실무에서 활용할 수 있는 실습 코드를 수록했다.
저자소개
저자
김성렬
장고 컨트리뷰터이며 PYCON KOREA 2020에서 ‘장고 ORM(쿼리셋) 구조와 원리 그리고 최적화 전략’이라는 주제로 강연을 했다. 배달 음식 주문 플랫폼 요기요에서 사장님 도메인 관련 시스템을 개발했고 현재는 네이버 Biz CIC에 재직 중이다.
목차
1장. 장고에 대하여
1.1 웹 프로그래밍과 백엔드 프로그래밍
1.2 장고 MTV 아키텍처: 템플릿의 한계
1.3 장고란 무엇인가
1.4 이 책에서 사용하는 라이브러리
1.5 프로젝트 환경 설정
1.6 이 책의 토이 프로젝트
Tip1 신입 또는 주니어 개발자에게 필요한 이력서
2장. 모델링과 마이그레이션
2.1 ER 모델링
2.2 장고의 모델
2.3 장고의 필드
2.4 마이그레이션
Tip2 신입, 주니어 개발자를 위한 기술 면접 팁
3장. ORM과 쿼리셋
3.1 ORM
3.2 쿼리셋
3.3 쿼리셋 활용하기
3.4 지연 로딩과 즉시 로딩
3.5 트랜잭션 관리
3.6 매니저
3.7 관계 매니저
3.8 DB 라우터: 멀티 데이터베이스 관리
4장 직렬화
4.1 직렬화
4.2 DRF Serializer
4.3 DRF Serializer 사용 시 권장 사항
4.4 DRF Serializer를 활용하는 방법
4.5 DRF Serializer와 Pydantic 비교
5장 뷰
5.1 웹 프레임워크 직접 구현해보기
5.2 URL dispatcher
5.3 함수 기반 뷰(FBV)와 클래스 기반 뷰(CBV)
5.4 DRF 뷰
5.6 DRF 예외 처리
5.7 drf-spectacular: DRF API 문서 자동화
부록 배포: Uvicorn, Gunicorn
1. 용어 정리
2. 배포 시 사용하는 기술들
출판사리뷰
주니어 개발자를 위한 장고 백엔드 개발 온보딩 가이드
이 책은 주니어 개발자 또는 입문자를 대상으로 하며 장고를 사용한 백엔드 프로그래밍을 학습할 수 있도록 꾸며져 있다.
★ 이 책에서 다루는 주요 내용
- 장고 모델과 마이그레이션 모듈 사용 매뉴얼
- 장고 ORM(쿼리셋)의 내부 동작 원리
- DRF Serializer 모듈 내부 동작과 활용 예시
- DRF ViewSet을 활용한 RESTful API 설계
- DRF OpenAPI 3.0 기반 문서(스웨거) 구현 및 작성법
★ 이 책의 구성
1장 장고에 대하여
- 장고의 개념/장고와 함께 사용하는 기술 스택
장고가 무엇인지 그리고 장고를 왜 배워야 하는지 설명한다. 또한 장고와 같이 쓰는 도구를 살펴본다.
2장 모델링과 마이그레이션
- ER 모델링/장고 모델 옵션
- 장고 필드/커스텀 필드
- DB 마이그레이션 명령어
- 커스텀 마이그레이션 파일 작성
장고가 어떻게 데이터 테이블과 파이썬 클래스를 매핑하는지 그리고 어떻게 추가되는 모델링 이력을 관리하고 다루는지 설명한다.
3장 ORM과 쿼리셋
- ORM의 개념과 필요성
- 쿼리셋의 특징과 활용법
- 지연 로딩과 즉시 로딩
- 쿼리셋 구조/트랜잭션 관리
- 매니저의 역할과 관계 매니저
- DB 라우터
ORM의 개념을 익히고 장고 모델을 SQL 문으로 만들어주는 장고 ORM인 쿼리셋에 대해 살펴본다.
이 책을 보기를 추천하는 분
: 파이썬 윕 프레임워크이 자 풀스택 프레임워크인 장고를 백엔드 개발 도구로 사용하고자 하는 분, DRF 입문자
레고 블록처럼 동작하는 프레임워크인 DRF에 대해 더 잘 알고싶어져서 본 책을 선택하였습니다. "백엔드 개발을 위한 핸즈온 장고" 책은 DRF를 적절하게 사용해서 쉽고 빠르게 서비스 구현을 하도록 도와줍니다.
https://m.blog.naver.com/applej424/223142232302
백엔드는 웹 애플리케이션에서 서버 혹은 데이터베이스를 관리하는 기술로써 프론트엔드가 우리 눈에 보이는 화면의 인터페이스를 다루는 일이라면, 백엔드는 프론트엔드에 있는 사용자들의 행동을 처리하는 것입니다.
파이썬은 다양한 라이브러리를 통해 개발을 할 수 있다는 장점이 잇습니다. 또한 파이썬 웹 프레임워크 중 Full stack인 장고를 사용한다면, 웹 개발을 빠르게 구축할 수 있습니다. 풀스택 개발자란 GUI 프론트엔드부터 데이터베이스 백엔드에 이르는 모든 소프트웨어 스택을 이해하는 개발자입니다.
"백엔드 개발을 위한 핸즈온 장고"는 장고의 설계 철학과 동작 원리들을 쉽게 설명하고 있어, 이해 하는데 어려움은 없었습니다.
장고라는 것이 매우 높게 느껴지는 장벽이라 생각을 하였는데, 이 책을 읽고 그 벽이 많이 허물어지는 것 같았고, 웹 프로그래밍도 매우 생산적으로 운영을 할 수 있다고 느껴졌습니다.
각 파트에서 예시가 있어 개념들을 이해하기 쉬웠습니다. 두고두고 꺼내보면서 복습을 하면 정말 좋은 책이라 생각합니다.
파이썬의 장점이라면 빠른 생산성과 함께 정말 다양한 라이브러리들을 통해 빠르게 개발할 수 있다는 것이 큰 장점입니다. 또한 파이썬 웹 프레임워크 중 유일한 풀스택 프레임워크인 장고를 사용한다면 풀 스택 웹 개발을 빠르게 구축할 수 있습니다. 게다가 장고의 막강한 기능중 하나인 admin 기능을 이용한다면 쉽게 관리기능 또한 구축할 수 있습니다.
또한 장고 프로젝트로 이루어진 훌륭한 기술 생태계가 있어 장고라는 이름을 단 모듈들은 서로 장고 아키텍처를 공유하고 호환 될 있도록 만들어져 있습니다. 따라서 필요한 모듈들을 이용한 손 쉽게 이용하여 개발을 할 수 있습니다.
"백엔드 개발을 위한 핸즈온 장고"는 단순히 개발 도구로서 장고를 다루는 것이 아닌 장고의 설계 철학과 동작 원리부터 살펴보고 새로운 기능을 확장하는 장고 모듈이 어떻게 개발되었는지를 설명하고 있습니다.
단순히 따라 하기 보다는 동작 원리와 프레임워크 아키텍처를 이해함으로써 이른바 나무가 아닌 숲(전체적인 개발 구조 및 과정)을 볼수 있는 능력을 향상 시켜 줄 것입니다.
이 책의 구성
1 장 _ 장고 에 대하여
• 장고 의 개념 / 장고 와 함께 사용 하는 기술 스택 장고 가 무엇 인지 그리고 장고 를 왜 배워야 하는지 설명 한다
또한 장고 와 같이 쓰는 도구 를 살펴 본다
2 장 모델링 과 마이그레이션
• ER 모델링 / 장고 모델 옵션
• 장고 필드 / 커스텀 필드
• DB 마이그레이션 명령어
• 커스텀 마이그레이션 파일 작성
장고 가 어떻게 데이터 테이블 과 파이썬 클래스 를 매핑 하고 어떻게 추가 되는 모델링 이력 을 관리 하고 다루는 지 설명 한다
3 장 _ORM 과 쿼리 셋
• ORM 의 개념 과 필요성
• 쿼리 셋 의 특징 과 활용법
• 지연 로딩 과 즉시 로딩
• 쿼리 셋 의 구조 / 트랜잭션 관리
• 매니저 의 역할 과 관계 매니저
• DB 라우터
ORM 의 개념 을 익히고 장고 모델 을 SQL 문 으로 만들어 주는 장고 ORM 인 쿼리 셋 에 대해 살펴 본다
4 장 _ 직렬화
• 직렬화 개념
• DRF Serializer 사용법
• DRF Serializer Pydantic 비교
직렬화 가 무엇 인지 살펴 보고 DRF 에서 제공 하는 직렬화 모듈 을 어떻게 다루는 지 알아 본다
옛날에는 SSI를 만들기 위해서, ASP, PHP, JSP의 세가지 방법 중에서 하나를 골라야 했더라면, 지금은
JSP - Spring / Spring Boot
NodeJS - Express
Python - Flaks / Django
이런 식으로 대충 구분되는 것 같습니다.
저는 옛날에 PHP를 사용했었는데, 요즘, php 관련 책을 찾는 것은 별로 쉽지 않은 것 같네요.
아무튼, 자바나 자바스크립트를 사용한다면, 쓸 수 있는 프레임워크는 정해진 것이지만, 파이썬을 사용하는 경우, Flask와 Django 둘 중에 하나를 고를 수 있습니다.
개인적으로는 Flask를 선호하는데, 다른 것들 신경 안쓰고, 만들려고 하는 기능만 만들어서 돌리기에는 flask 만한 것이 없기 때문이었는데, 최근, 다른 기능들을 만들어야 하는 경우가 생기게 되었고, Flask를 기반으로 계속 하나씩 만들 것인지, 아니면, Django를 쓸 것인지를 고민하는 와중에 우연히 이 책을 접할 수 있는 기회가 생겼습니다.
이런 식의 프레임워크 입문서의 경우, 몇개의 패턴이 존재합니다.
1) "Do it! 장고+부트스트랩 파이썬 웹 개발의 정석" 같이 사이트 하나를 책에서 제시하는 방법으로 따라하면서, 만들어볼 수 있는 책이 있고,
2) "파이썬 웹 프로그래밍: 장고로 배우는 쉽고 빠른 웹 개발" 처럼 개별 기능에 대한 설명을 하는 책이 있습니다.
이 책은, 이러한 두 입문서들의 패턴을 적절하게 조합한 형태를 갖고 있습니다.
기능에 대한 설명과 함께, 그 기능을 활용해서, 어떻게 구현 및 활용을 할 수 있을지를 보여주고 있습니다.
분량상, 모든 기능에 대한 설명을 하지는 못하지만, (어차피 그런 "바이블 시리즈" 레퍼런스가 필요하다면, 이런 책을 봐야 하는 단계는 아니라고 해야 겠지요), 기본으로 알아야 하는 기능들에 대한 설명과 활용법이 같이 나와있다는 점에서는, 입문서로서 가장 좋은 형태가 아닐까 싶긴 했습니다.
기존에 이런 저런 책으로 장고를 배워보려고 하다가, 포기하고, "아 그냥 쓰던 Flask나 계속 써야지.." 하고, 다시 Flask로 되돌아갔었지만, 이 책으로는, Flask 말고 , 진짜 장고를 대안으로서 활용해 볼 수 있을 것 같다는 생각이 들었습니다.
처음 python 기반의 웹 프레임워크로 장고를 사용하는 사람 뿐만 아니라, Flask에 익숙해져서 Django로 넘어가기 힘들어했던 사람들에게도 그 시작점으로 좋은 책이었습니다.
오랜만에 파이썬의 백엔드 개발과 관련된 책을 리뷰하게 되었습니다. 저는 파이썬을 이용해서 백엔드 개발을 해 본 적이 많이 없기도 하고, 하더라도 주로 가벼운 기능들을 개발해봤었기 때문에 장고보다는 플라스크를 많이 이용했었습니다. 자바의 스프링 프레임워크에 대응하는 파이썬의 웹 프레임워크가 장고라고 생각하니 굳이 이렇게 무거운 프레임워크를 써야하나 싶은 생각이 들 정도였기 때문이죠. 그렇지만 이 책을 보고 다시 장고가 더 많이 궁금해지게 되었어요.
제목 『백엔드 개발을 위한 핸즈온 장고』 에서 보시다시피 이 책은 백엔드 프로그래밍에 집중해서 서술되어 있습니다. 책 전반에서 이용되는 토이 프로젝트는 프론트엔드도 포함하고 있는데, 이 부분은 이미 개발된 소스코드를 가져와서 사용할 수 있습니다. 책에 첨부된 깃허브 주소로 가시면 바로 사용할 수 있어요.
처음 프로그래밍을 배울 때는 잘 신경쓰지 못했었던 부분 중 하나가 바로 프로그래밍 언어 그리고 프레임워크의 설계 철학입니다. 어서 코드를 작성해보고 싶은 마음에 대충 술술 읽고 넘어가다보면 나중에, 꽤 나중에 내 프로젝트가 얼마나 산으로 가고 있는지를 느끼게 되는 시점이 꼭 왔어요. 그렇지만 처음 코딩을 배우는 꼬꼬마 단계에선 여전히 공감하기 힘든 부분이라고 생각합니다. 봐도 잘 이해도 안되고.
토이 프로젝트를 진행하거나 새로운 개념을 배우게 될 때는 이해하기 쉽도록 다이어그램을 첨부해서 설명하고 있습니다. 아무래도 코드와 글만 보고 이해하는 것보다 그림을 함께 보는 것이 훨씬 학습하기가 편하고 쉽습니다. 직접 따라 개발해가면서 공부하면 더 좋겠지만 이미 파이썬에 익숙하거나 사용한 경험이 있는 사람이라면 그냥 눈으로 혹은 손코딩을 하면서 따라가도 재미있게 책을 읽을 수 있었습니다.
토이프로젝트를 따라가면서 이렇게 구조를 잡는 방법을 배우고 직접 API 를 설계하고 구현하면 정말 많은 것을 배울 수 있게 됩니다. 그리고 조금만 응용하면 꽤나 그럴듯한 자신만의 프로젝트도 개발할 수 있어요. 수 년 전에 학부생 때 자바 스프링 프레임워크를 처음 배웠을 때가 생각나네요. 요즘은 이렇게 좋은 책들이 많이 나와서 조금은 쉽고 재밌게 배울 수 있게 된 것 같아서 정말 좋습니다. 이젠 정말 의지만 장착하면 되겠어요.
새로운 언어, 프레임워크를 배우는 것은 항상 재밌네요. 다른 것을 공부하다보면 기존의 하는 일에도 의외의 포인트에서 많은 아이디어를 제공받는 것 같습니다. 재밌는 아이디어가 생각나면 장고를 한 번 꼭 써봐야겠습니다.
장고는 자체 ORM을 가지는 몇 안되는 파이썬 웹 프레임워크로 필수 모듈 중 하나인 django REST framework를 붙이면 풀스택 웹 프레임워크로 손색이 없으며 복잡한 시스템을 분리하는 아키텍처를 제공하기 때문에 개발자는 별다른 고민 없이 장고가 제공하는 패턴을 지키면서 개발할 수 있고 다른 프레임워크보다 접근성이 좋을 뿐만 아니라 기술적인 성숙도도 가장 높습니다. 또한 구현하는 서비스가 복잡하여 비즈니스 로직에 대응하는 API 개수가 많을 때 그리고 비즈니스 로직을 구현하기 위해 다양한 종류의 인프라를 사용해야 할 때에 장고를 사용하면 적절하게 대처할 수 있을것입니다.
제가 이 책을 선택한 이유는 이 책이 시중에 널리 퍼져있는 장고 템플릿에 대한 내용 대신에 URL-Resolver, DRF-라우터, 쿼리셋, 미들웨어, Request/Response, DRF-Serializer 등과 같이 실무에서 사용 빈도가 높은 모듈에 대한 내용을 중점적으로 다루기 때문입니다.
이 책의 특성은 장고의 넓은 활용성과 깊이 있는 내용을 쉽게 설명하고 저자가 DRF 기반의 마이크로 서비스로 대규모 시스템 내부 서비스를 구현해본 경험이 있기 때문에 DRF 입문자가 실무에서 맞드릴 다양한 문제를 해결하는 데 많은 도움이 된다는 점입니다.
구성
Chapter 1: 장고에 대하여
Chapter 2: 모델링과 마이그레이션
Chapter 3: ORM과 쿼리셋
Chapter 4: 직렬화
Chapter 5: 뷰
Appendix: [부록] 배포: Uvicorn, Gunicorn
파트별로 나누어 봤을때 1장은 장고가 무엇인지 그리고 장고를 왜 배워야 하는지와 장고와 같이 쓰는 도구에 대해 설명하고 있고, 2장은 장고가 어떻게 데이터 테이블과 파이썬 클래스를 매핑하고 어떻게 추가되는 모델링 이력을 관리하고 다루는지에 대해, 3장은 ORM의 개념을 익히고 장고 모델을 SQL문으로 만들어 주는 장고ORM인 쿼리셋에 대해, 4장은 직렬화가 무엇인지 살펴보고 DRF에서 제공하는 직렬화 모듈을 어떻게 다루는지에 대해, 5장은 뷰와 URL dispatcher 모듈에 대해 설명하고 있습니다.
개인적인 생각으로 학습은 주니어 개발자 또는 장고를 사용하여 프로그래밍을 하시려는 분들께서는 1장부터 시작하시면 좋을 것 같고 어느정도 경험이 있으신 분들(2년차~)부터는 1장까지는 쭉 훓으시면서 장고에 대한 내용과 같이 쓰는 도구에 대해 파악한다는 방식으로 보시고 2장부터 학습하시는 것이 좋을것 같습니다.
개인적으로 약간의 단점이 어쩌면 욕심일수도 있는게 좀더 많은 실습 예제 및 비즈니스 케이스가 담겨있으면 더 좋았지 않았을까라는 아쉬움이 있습니다.
저의 리뷰를 읽어주셔서 감사합니다. 다음에는 좀더 유용하고 좋은 책으로 더 나은 리뷰를 통해 여러분께 책을 소개시켜드릴 수 있도록 더 노력하겠습니다.
이 책은 장고에 대한 설명과 함께 활용법과 응용법까지 자세히 설명한 온보딩 가이드가 가장 적절하다.
대상 독자는 주니어 개발자나 프로그래밍 경험이 있는 장고 입문자로 백엔드에 경험이 있으면 쉽게 이해할 수 있다.
본인은 간단한 Flask(플라스크) 경험만 있었고, 장고와 FastAPI에 대해서는 경험이 전혀 없었지만, 장고의 개념을 알 수 있었으며, 장고와 함께 사용하는 기술 스택과 도구도 알 수 있어서 확실히 지식이 업그레이드된 느낌이다.
특히, 장고의 진화와 함께 백엔드 프로그래밍의 발전 방향도 자세히 설명한다.
MTV(Model, Template, View), DRF(Django REST Framework)를 설명하면서 SPA(Single Page Application), REST API에 대한 추가 설명(원칙, 관습)도 덧붙인다.
ORM을 설명할 때는 하이버네이트를 언급하는데, 자바 진형의 스프링부트, JPA와도 통하는 면이 있어 내용이 더욱 쉽게 다가왔다.
책은 400페이지 분량으로 5개의 장으로 구분하고 있는데, 한 장의 페이지 수가 많지만, 적절하게 나눈 것 같다.
장별로 설명하면 아래와 같다.
CHAPTER 1에서는 백엔드 프로그래밍의 동향와 장고(풀스택 프레임워크) 소개, 장고의 특징과 한계점을 설명하고, 함께 설치하면 효과적인 라이브러리 설치법과 함께 개발 환경 설정까지 진행한다.
CHAPTER 2는 장고의 모델과 필드 소개, 마이그레이션 활용법을 설명한다.
CHAPTER 3은 먼저 ORM과 쿼리셋을 설명하고, 쿼리셋 활용법과 지연 로딩 및 즉시 로딩, 트랜잭션 관리 방법, 멀티 데이터베이스 관리 방법을 주제로 설명한다.
CHAPTER 4는 장고의 직렬화 방법과 DRF에서의 직렬화 방법과 권장 사항, 직렬화 활용법, Pydantic(파이단틱)과의 차이점을 비교 설명하고
CHAPTER 5는 파이썬 기반으로 웹 서버를 직접 구현하고, 장고와의 차이점을 설명한다. 또한, 장고 DRF에서의 클래스 기반 뷰와 장고 닌자의 함수 기반 뷰를 비교 설명한다. 클래스 기반 뷰와 함수 기반 뷰의 장단점을 설명하고, 예외 처리 방법에 관해서 설명한다. 마지막으로 DRF API 문서 자동화(스웨거)까지 설명한다.
끝의 부록에는 WSGI(위스기), ASGI(아스기) 설명과 배포 시 사용하는 Uvicorn, Gunicorn 라이브러리에 대한 장단점, 설치 방법과 주의점으로 마무리한다.
각 장은 장고의 해당 주제를 설명하기 전에 설명하는 주제에 관한 일반적인 프로그래밍 지식을 먼저 다룬다. 운영체제, 네트워크, 데이터베이스, 인터넷, REST API, DOCS, 라이브러리, 유틸리티 등등 장르를 가리지 않고 필요하다고 판단되면 일반적인 지식을 먼저 설명하고 이어서 장고의 해당 부문을 설명한다. 그래서 서두의 '온보딩 가이드'가 적절하다고 한 것이다. 장의 설명 방식은 각 장의 주제를 가장 잘 설명하는 방향으로 되어 있다. 공통되는 규칙이 따로 있는 것이 아니고 해당 주제를 잘 설명하는 방식으로 자유롭다.
이 책은 기본적으로 장고에 대해서 다루지만, 프로그래밍에 대한 저자의 경험과 노하우를 많이 담고 있어, 더욱 흥미롭다. 프레임워크의 동작 원리와 장고의 세세한 설정뿐만 아니라 일반적인 책과 공식 문서에는 없는 프로그래밍에서 발생할 수 있는 저자의 여러 가지 고민과 관습적인 처리 방법 등을 고스란히 담고 있다. 진심으로 개발을 좋아하는 것은 확신하는데, 수다쟁이가 아닐까? ㅎㅎ
1장, 2장 후반부에는 부록처럼 신입 또는 주니어 개발자에게 필요한 이력서와 기술 면접에 대한 저자의 솔직한 생각을 전하는 부분이 있는데, 지면의 제약이 있었겠지만 3장~5장에도 추가해 줬으면 어떨까? 하는 아쉬움이 있다.
책 중간마다 NOTE와 전구설명에서는 생소할 수 있는 IT 용어에 대한 자세한 설명과 본문에 대한 추가 보충 설명이나 관용적인 사례를 설명하기 때문에 꼭 읽도록 한다.
그리고 중간마다 책 한 페이지씩을 차지하는 그림은 이해하기 쉽도록 구성되어 있어 자세히 챙겨 보자. 특히, 말풍선으로 설명하는 부분은 재미뿐만 아니라 지문으로 설명하는 것보다 더욱 쉽게 이해가 되었다.
책 커버는 영화 '장고'를 형상화하였는데, 영화감독과 장고 개발자 모두 좋아하는 기타리스트 '장고 라인하르트'에서 명칭을 가져왔다고 한다. ('D'가 묵음인 건 모두 알고 있죠? ^^)
핸즈온 도서답게 코드 블록이 매우 많다. 따라 하거나 읽기에 부담이 없고, 잘 읽힌다. 다만 1장의 개발 환경 설정에서는 설명의 순서를 조정하면 좋을 것 같다. 에러에 관한 내용이 뒤에 나오는 바람에 괜한 구글링을 하였다. 나만 그런가? ㅎㅎ
저자가 많이 사용하는 문구 중에서 개인적으로 공감하는 '인간 친화적인'이란 표현이 있다. 마지막은 그중 한 부분을 인용하며 마무리하고자 한다.
개발자는 유지 보수가 가능한 코드를 작성해야 한다. 인간 친화적인 표현을 코드에 녹이는 것은 유지 보수가 가능한 코드를 만드는 첫 시작과도 같다.
클라이언트 개발을 하기 위해 대부분의 노력을 쏟는 생활을 하다보니, 그에 앞서 대부분 필요한 서버 개발에도 요즘은 눈을 돌리고 있다. 필요한 RESTful API 서버 개발을 하기 위해 대중적인 스프링도 공부해보고, 파이썬을 이용해 하려다보면 lightweight의 대표격인 플라스크를 보게 되기도 한다. 하지만 어쩐지 django는 손이 쉽게 가지는 않는다. 아무래도 알아야 할 사전 지식이 많기 때문이라고 생각한다. 그래서 실제 업무에서 부딪히기 전까지는 쉽게 접하지 못하는 프레임워크라고 생각한다.
이 책을 보기 시작한 것은 그런 마음이었다고 생각한다. 그래도 사전지식을 좀 더 쌓아볼 수 있다면 좋겠다는 생각과, 이 프레임워크는 절대 다루지 못할 것이 아니라는 생각을 갖기 위함이다. 과연 이 책은 그 생각을 전환시켜줄 수 있을까.
> 책에 대한 간단한 정보
장고는 역시 총잡이가 어울리지. 넷플릭스로 나온 장고까지 생각보다 많은 시리즈가 있지만, 역시 떠올릴 수 있는 이미지는 서부의 총잡이 이미지이다. 프레임워크 장고도 그걸 노리고 네이밍을 하지 않았을까 싶은데, 이런 책 표지를 수록한 책이 없었기 때문에 좋았다고 생각한다. 내가 해결하고싶은 문제를 바로 타게팅하고, 잡아버리는 그런 노련함이 있는 프레임워크의 이미지를 가져갈 수 있지 않을까 하는.
> 인상깊은 부분들
이 책은 초급을 대상으로 하고 있다고 이야기 한다. 하지만 정확하게 어떤 기본 지식이 필요한지 나타내고 있지 않아서 그건 아쉬웠다. 그래도 주니어개발자를 대상으로 하는만큼 그리 어려운 내용만을 다루지 않을 것이라는 기대가 있었고, 실제로 어느정도는 충족했다고 생각한다.(전부는 아니라고 생각한다.)
목차 구성 초반을 보면 알겠지만, 놀랍게도 파이썬에 대한 직접적인 언급은 없다. 모델링과 마이그레이션, ORM과 쿼리셋이다. 물론 이 뒤에도 별반 차이는 없었다. 즉 저자가 중요하게 생각하는 부분이 어떤 것인지 짐작할 수 있다.
이 책을 통해 프로젝트를 빌드하기 위해 거치는 과정 순서대로 담고 싶었다는 것으로 보인다. 그리고 파이썬에 대한 문법과 기본적인 프레임워크 구조를 습득하고, 웹과 서버의 기본을 알려주는 것에 집중하고 있지는 않는 것으로 보아, 어느정도는 그에대한 기본지식이 필요하다고 말하고 있는 것으로 보인다. 실제로 그런 부분이 없는 경우 이 책을 보면 당황스러울 수 있다고 생각한다.
Python을 이용한 백엔드 개발 프레임워크로 유명한 FastAPI 및 Flask에 비해 django가 갖는 불편한 인식에 대해 말하고 있다. 이에 대한 이유를 말해주고 있다. django는 풀스택 웹 프레임워크이며, 이는 마이크로 프레임워크인 FastAPI, Flask와는 다르다. 풀스택 프레임워크는 높은 복잡도를 가지는 프로젝트의 각 도메인과 모듈 간 계층이 높은 응집도와 낮은 결합도를 가질 수 있도록 시스템 아키텍처를 분리할 수 있는가에 대한 것이다. 장고는 장고 앱이라는 단위의 분리 방식으로 적용할 것을 제안하고 있다고 답하고 있다.
중간 설명이 더 필요하지만, 결론은 비싸고 좋은 도구(여기는서는 django를 의미)가 이것을 해결해 주지는 않는다는 사실이다. 결국 개발자의 역량이 중요하며, 단지 동일한 수준의 이해도를 가지고 있다면 풀스택 프레임워크가 마이크로 프레임워크에 비해 상대적으로 코드의 복잡도가 덜 증가한다는 것을 의미한다고 한다.
가끔 효과적인 설명을 위해서는 가로로 길게 표현하는 편이 나을 때가 있는데, 이 책은 그런 내용에 대해 90도로 돌려서 표현했다. 의외로 이런 방법은 참신하게 다가왔는데, 어떻게든 세로로된 한 페이지에 표시할 수 있도록 노력하려 대부분의 책에서는 그렇게 하였으나, 이 책은 그냥 돌려서 보도록 하였다는 사실이다. 사실 모니터로 보는 것도 아니고, 조금 돌려서 보는 편이 더 잘 설명할 수 있다면, 그렇게 보면 되기 때문에 이 부분은 좋았다고 생각한다. 괜히 linebreak를 발생시키면 우리가 갖고있는 사고의 흐름도 끊기는 편이라고 생각하기 때문이다.
이 책의 특징으로는 뜬금없이 면접관이 등장한다는 사실이다. 갑자가 면접을 본다면 이렇게 하라는 부분과, 면접에서는 이렇게 나올 수 있다는 등의 의문을 할 경우가 있다. 이 부분도 동일한데, 프로토콜에 대한 이해를 하고있는지 설명하기 위해 도입한 내용이다. 주니어 개발자라도 요즘은 많이들 이해하고 있을 수 는 있지만, 별 생각없이 보고 있었다면 제대로 이해하지 못하고 있을지도 모른다. OSI 7계층까지 굳이 들어가지 않더라도, 우리가 개발할 때 HTTP는 어떤 목적에서 사용하며, TCP는 어떤 목적에서 사용하는지 안다면 당연히 각 프로토콜의 단계가 다르다는 것을 알 것이고, 그렇다면 저 질문은 바보같은 질문이라는 사실을 알게된다는 것이다. 그래도 확실히 주니어를 목표로 잘 알려주려 했다는 사실을 알 수 있는 부분이었기에 좋았다.
장고에 대한 모든 것을 알려주는 느낌을 주는 책의 뒷표지는 아니다. 그래서 다른 책의 참고가 반드시 필요할 것을 알려주는 듯 하지만, 대신 DRF의 데이터 중심 처리를 하는 방법과 ORM 등에 대해 집중적으로 알려준다고 표현하고 있다.
> 괜찮은 부분
1. 실습에 갚서 갖춰야 할 기본지식을 잘 알려주고 있다.
실습에 들어가기 전 웹 개발과 백엔드 지식 전반, 파이썬 환경구성을 위한 설명이 충분하다고 생각한다. 다만 완전 컴퓨터 지식이 전무한 사람을 대상으로 하는 것이 아니기 때문에 그정도의 지식을 가진 사람이라면 만족할 것으로 보였다. 특히 모델링으로부터 시작하는 독특한 순서를 가지고 있기 때문에 데이터를 모델링하는 방법도 지식으로 제공한다. 이렇듯 이 책으로 모든 것을 알려주지 않음을 확실히 함과 동시에 알려주기로 한 부분에 대해서는 반드시 제대로 알 수 있도록 노력한다.
2. 풀스택 프레임워크인 장고를 사용하고 있지만, 책의 제목과 같이 백엔드 개발에 충실하고 있다.
장고 및 플라스크를 비롯한 스프링까지 많은 책들은 하나 혹은 둘 이상의 프로젝트를 만들어가면서 각 요소를 설명하는 방식을 취하고 있다. 그렇게 하다보니 자연스레 백엔드의 영역을 다루긴 하지만, 프론트엔드의 영역도 적지않은 분량을 차지하게 된다. 그래서 일부 리소스는 저자가 관리하는 곳에서 가져오면서 프론트엔드에 대한 지식도 같이 쌓는다. 물론 이것이 나쁘지는 않지만, 백엔드 개발을 위한 목적으로 공부를 하고 있고, 그 도구로서 장고를 선택했다면, 이렇게 선택과 집중을 하는 편이 낫다고 생각한다. 이 책은 그것을 잘 지키도록 도와준다.
3. 대상자인 주니어를 위한 배려가 담긴 책이다.
기술면접에 대한 부분 등 주니어를 위한 지면이 많이 할당되어 있다. 주니어를 위한 것을 강조하기 때문에 그에 걸맞는 내용으로 구성하려고 애쓴 흔적이 보인다. 이것이 책이 친절하다는 것을 의미하지는 않지만, 최소한 주니어에게 설명한다는 느낌은 지속적으로 주고있다는 것은 확실하다. 그래서 한편으로는 굳이 왜 이런 내용이 여기에 있을까 하는 생각이 들기도 하지만, 이렇게까지 주니어에게 집중하고 있다고 생각한다면 이해가 간다.
> 아쉬운 부분
1. 실습 순서가 순차적이지 않아서 어렵다.
가령 pyenv 설치시 설치에 대한 부분이 없어서 따로 인터넷을 활용하여 방법을 찾아서 설치했는데, 몇 장 뒤에 이에대한 설치를 알려주고 있는 것을 발견했다. 왜 이렇게 배치했을까 아쉬웠다. 이 책만의 특징이 선택과 집중으로 보이지만, 그 순서는 일반적인 편이 나았을 것 같다. 독자의 시간을 조금 아껴주길 원한다면 말이다.
2. 일반적으로 실습하며 따라하기에 좋은 책은 아니다.
이 책은 실습을 작성하며 결과를 확인하고, 그것을 이어가며 프로젝트를 완성하기 좋은 책이 아니다. 관점을 달리하여, 하나의 프로젝트를 시작해야 하는데, 장고라는 프레임워크를 이용해서 구성하려는 중이고, 그 과정을 알려주는 책에 가깝다. 그래서 데이터를 구성하는 부분부터 시작해서 프로젝트를 진행한다. 또한 실습 예제가 나오는데, 그 예제를 어느 파일로 생성해서 작성해야 하는지도 알기가 쉽지 않다. 깃헙에 올라온 자료를 비교해가며 보아야 하는데 이 또한 쉽지는 않다. 그래서 그냥 책을 읽는 편이 오히려 낫다고 생각되기도 한다.
> 추천 독자
- 파이썬에 대해 알고 있으며, 백엔드 개발에 대해 배우고 싶은 개발자
- 아직 백엔드 개발이 익숙하지 않은 주니어 개발자
> 개인적인 평점
- 가격: 7 / 10
- 내용: 7 / 10
- 디자인: 8 / 10
- 구성: 5 / 10
독특한 구성이 개인적으로 임팩트가 있었다. 하지만 익숙하지는 않았고, 그 점이 이 책을 다소 난해하게 만들었다고 생각한다.
일반적으로 엔터프라이즈급 백엔드 개발 프레임워크는 Java 언어를 이용한 Spring 또는 Spring Boot를 많이 사용한다. 아직 한국에서 엔터프라이즈급 프로젝트에 .NET을 그다지 많이 사용하지 않기 때문에 거의 Java는 독보적인 것 같다. 포스트 Java에 여러 언어들이 후보로 생각할 수 있는데, 요새 가장 많이 관심이 가는 언어가 바로 Python일 것이다. 데이터분석 혹은 인공지능 분야의 발전에 Python 언어가 많이 사용하게 되는데, 그에 발맞춰 일반 웹개발에도 Python이 많이 사용하게 된 것 같다. Python언어로 백엔드 개발에 많이 사용하는 프레임워크가 바로 Django이기 때문에 이 책을 보면서 새로운 시각으로 접근하고 싶었다.
Java Spring은 MVC 아키텍처를 사용한다. Model은 데이터를 View는 프론트엔드단을 마지막으로 Controller는 이 두가지를 연결하는 컨트롤러 역할을 맡는다. Django는 특별히 MVC 아키텍처를 MTV 아키텍처를 사용하는데, 이 두가지 아케텍처는 매우 유사하다. 동일하게 Model은 데이터를, Template은 프론트에 데이터를 렌더링하는 역할을 하며, 마지막으로 View는 컨트롤러처럼 데이터와 템플릿을 연결하는 역할을 하게 된다. 또한 Django는 DRM 모델을 사용하여 데이터처리를 보다 아키텍처적으로 처리한다. 다시 말해 Django를 학습하는데 MTV와 DRM은 모르면 Django가 아닌 것이다. 이 2가지 핵심 아키텍처를 얼마나 책에서 자세히 잘 설명하느냐가 중요한데, 이 책은 이 2 가지를 잘 다루고 있다. 아무래도 저자가 Django 컨트리뷰터이기 때문에 초급 Django 개발자가 중급이상으로 점프하기 위해 반드시 아키텍처를 이해하고 잘 다룰 수 있어야 하는데, 가장 적합한 저자가 아닌가 싶다. 따라서 이 책은 Django를 처음 접하는 비기너보다는 적어도 주니어개발자라면 더 맞을 듯 한 이유이다. 이 책을 통해 보다 심도있는 MTV와 ORM의 세계에 빠져보자.
장고는 Python을 기반으로 널리 사용되는 웹 프레임워크이다. 다양한 기능과 강력한 생태계를 갖추고 있어 전세계적으로 많이 사용되고 있다.
장고는 개발자들이 웹 애플리케이션을 빠르게 개발할 수 있는 강력한 도구와 기능을 제공한다. 장고는 ORM, 보안, 데이터베이스 관리, URL 라우팅, 세션 관리 등의 기본 기능을 내장하고 있어 개발자가 이를 일일이 구현할 필요가 없다. 또한 재사용 가능한 컴포넌트와 다양한 라이브러리를 활용하여 개발 시간과 노력을 절약할 수 있다. 또한 장고는 활발하고 열린 커뮤니티를 가지고 있으며, 다양한 문서와 튜토리얼이 제공된다. 이를 통해 문제 해결을 위한 리소스를 쉽게 얻을 수 있다.
이러한 이유로 이 책을 통해 Python 장고 프레임워크에 입문하는 것은 효율적이고 생산적인 웹 애플리케이션 개발을 위한 좋은 시작이다.
[1장 장고에 대하여]
장고 프레임워크를 이용하면 웹 애플리케이션을 빠르고 효율적으로 개발할 수 있다. 1장에서는 장고를 왜 배워야 하는지와 장고와 함께 사용되는 도구와 기초적인 환경 설정에 대해서 살펴본다.
[2장 모델링과 마이그레이션]
2장은 장고의 DB에 대한 내용이다. ER 모델링, 필드, 마이그레이션 순서로 장고에서 제공하는 다양한 DB 관련 기능에 대해 설명한다. DB 마이그레이션 명령어는 데이터베이스 스키마를 변경할 때 사용되는 명령어다. 마이그레이션 명령어를 사용하면 새로운 모델이나 필드를 추가하거나 변경된 내용을 데이터베이스에 적용할 수 있다. 이 장에서는 장고에서 데이터 테이블과 파이썬 클래스를 매핑하는 방법과 모델링 이력을 관리하는 방법을 설명하고 있다.
[3장 ORM과 쿼리셋]
ORM은 객체와 데이터베이스 간의 상호작용을 관리하는 개념이다. 장고의 쿼리셋은 데이터베이스로부터 데이터를 조회하고 조작하는데 사용된다. 따라서 실무 개발에서 가장 많이 사용하게 되는 객체이다. 3장에서는 쿼리셋의 특징과 활용법, 데이터 로딩 방식, 트랜잭션 관리, 매니저와 관계 매니저의 역할, 그리고 데이터베이스 라우팅에 대해서 배운다.
[4장 직렬화]
직렬화는 객체를 다른 형식으로 변환하는 과정을 말한다. 장고 REST Framework에서 제공하는 Serializer를 사용하여 데이터를 직렬화하는 방법을 학습한다. 또한 DRF Serializer와 Pydantic의 특징과 차이점에 대해 비교하여 각 상황에서 어떻게 사용하는지 이해할 수 있다.
[5장 뷰]
뷰는 클라이언트 요청에 대한 응답을 생성하는 로직을 담당한다. 이 장에서는 웹 프레임워크를 직접 구현하면서 뷰의 역할과 동작 방식을 이해한다. 또한 URL dispatcher 모듈을 사용하여 URL과 뷰를 매핑하는 방법을 학습한다. 함수 기반 뷰와 클래스 기반 뷰의 차이점과 각각의 장단점, 사용 방법에 대해 비교한다. DRF를 활용하여 RESTful API를 작성하는 방법과 예외 처리에 대해 알아본다.
[결론]
프레임워크는 재사용 가능한 모듈의 집합이며, 개발자는 프레임워크에 많은 부분을 맡기므로 비즈니스 로직 구현에 더 많은 시간을 확보할 수 있다. 장고는 풀스택 웹 프레임워크로, 데이터 테이블과 파이썬 클래스의 매핑 방법과 아키텍처를 편리하게 제어한다. 『벡엔드 개발을 위한 핸즈온 장고』는 장고의 원리와 활용법을 다루는 책으로, 단순한 초급 수준의 결과물이 아닌 복잡한 시스템을 개발하려는 경우에도 큰 도움이 될 것이다. 장고의 활용성과 깊이 있는 내용을 쉽게 설명하며, 입문자부터 시니어 개발자까지 많은 인사이트를 제공하는 책이다.
이 책은 파이썬 백엔드 개발로 Django를 다루고 있다. 책 표지부터 취향저격수 처럼 예쁘게 잘 되어있는데 요즘은 진짜 책 표지 잘 뽑는것 같다.
아무튼 내가 요즘 많은 책들을 보면서 중요시 생각되는 것들이 몇 가지 있는데, 이 책은 그런 요소들을 정말 잘 모아서 제작되었다는 생각이 들었다.
첫째는 한국 저자의 책이라는 것이다. 앞서 테라폼 책의 리뷰에서도 적긴했는데 한국 저자의 책은 아무래도 읽기가 편안하다.
그리고 한국 개발자들이 궁금해하는 부분이나 팁들에 대해서 공감대 형성이 좋다. 그래서 한국 저자의 책이라는 것 자체가 요즘은 하나의 무기가 되는 것 같다. 책의 중간 중간 있는 팁부터 흔히 하는 착각이나 실수하는 사례들을 꼼꼼히 설명해주고 있다.
두번째는 주니어를 위한 장고 책이다. 책 표지에도 적혀있지만 타겟으로 한 독자를 명확하게 이해하고 설명해준다고 생각한다. 나도 파이썬은 알고 있지만 Django에 대해서는 들어만 보았다. 그런데도 읽는데 전혀 무리가 없었다. 그림도 너무 친절하게 설명되어 있고, 아래 설명도 매우 자세했다. 그리고 이 책의 범위를 너무 벗어나는 내용에 대해서는 언급만 하고 복잡하게 다루지 않았다. (주니어에게는 이게 훨씬 도움이 되는 선택과 집중을 했다고 본다)
또한 주니어 대상이기 때문에 가끔 주는 팁 중에서 취업에 대한 팁이나 취업 후 개발자로써의 팁들도 많이 들어있다.
뿐만 아니라 앞으로 발전가능한 시각을 위해서 단순히 주니어가 실수할 수 있는 부분에 대해 보충해야할 부분도 명확하게 알려준다.
세번째는 그림으로 배우는 장고라고 해도 될 정도로 그림이 많다. 그림이라고 오히려 날로 먹는거 아니냐는 오해가 없었으면 좋겠는데, 보통 개발을 하게 되면 추상화되는 개념들이 많은데 이것을 도식화하기가 어렵다. (개발을 많이 해본 사람들이야 별 대수롭지 않겠지만, 개발이 익숙하지 않은 사람들에게는 상당히 힘들다.) 그리고 하다보면 자연스러워지겠지만 그림이 있어 이해도가 확 올라가는 점은 누구든 부정할 수 없을 것이다.
이런 특징들만 나열해도 충분히 구매해서 책장에 두고두고 여러번 읽을 가치가 있는 책이라는 생각이 들었다. 만약에 장고를 사용한 백엔드 개발자 혹은 개발자를 준비하는 사람들은 이 책을 꼭 읽어보길 추천한다. 책이 강의식처럼 잘되어있고, 읽기 편하게 되어있기 때문에 강의를 보지 않아도 이 책만 여러번 읽어도 충분하다고 생각이든다.
그저 코드를 쓰고 설명하는 책이 아닌, 장고가 어떻게 동작하는지 학습시켜주는 알짜배기 내용을 꾹꾹 눌러담은 책.
- 대상 독자
장고를 활용하고자 하는 주니어 개발자 및 입문자
- 책의 내용 및 구성
1. 5개의 챕터, 412p로 구성
2. 활용되는 파이썬 버전은 3.11로 명시되어 있으나 3.10 이상이면 책에서 설명하는 예시를 보는 데 문제가 없다고 함
3. 장고는 4.2 버전을 사용
4. 백엔드 프로그래밍에 집중하고 있기 때문에 장고를 중점적으로 설명하며 프런트엔드 부분에 대한 언급은 최소화 했다고 함, 책에서 사용 될 토이 프로젝트에서는 이미 완성된 프런트엔드 개발 결과물을 제공
5. 신입 또는 주니어 개발자를 대상 독자로 하고 있기 때문인지 Tip이라는 별도의 공간을 마련해 개발자에게 필요한 이력서나 기술 면접 팁과 같은 가벼운 쉬어가기 페이지가 존재
- 책에서 눈에 띄는 점
1. '이 책의 실습 예시를 따라 하고 이해하기 어려운 부분만 다시 찾아보는 방식으로도 백엔드 개발에 대해 배울 수 있을 것이다. 하지만 나는 순서대로 한 장 한 장씩 확실히 이해하며 학습하는 것을 추천한다.' 라는 저자의 말에서 알 수 있듯이 프로젝트 결과물을 위한 코드 나열이 아닌 어째서, 왜 이렇게 동작하는지를 설명
2. 난이도를 낮게 설정한 만큼, 독자가 궁금할만한 내용이나 글로는 충분하게 이해하지 못할 내용들은 이미지화를 통해 이해를 돕고 있음
3. 'a 보단 b,c 를 쓰는 것이 더 좋다. 그 이유는~' 이런식으로 그저 더 좋은 기술을 쓰라고 궁금증을 남기는 말이 아닌, 어째서 다른 기술보다 이 기술을 써야 하는가에 대해 설명하고, 현재 사용하려고 하는 기술은 왜 사용하는지를 설명해주면서 기술을 어떻게 사용해야 하는지 감을 잡도록 도와주고 어떤 결과를 얻게 될 것인지 알려줌.
- 총평
웹 쪽 개발을 좀 해왔던(3~4년 이상) 사람들에게, '파이썬 프레임워크!' 라고 하면 반사적으로 '쟝고!' 하고 말할 것 이다. 왜냐면 내가 그랬기 때문이다.
새로운 기술들이 등장하면서 기존 것 보다 빠르고, 더 좋은 기능이 많다고 홍보하지만 자바 하면 스프링이라고 생각하듯이 파이썬 하면 장고가 가장 먼저 떠오른다. 다른 기술들을 무시하는 것이 아니라 가장 대표되는 기술이자 대명사라는 인식이 강하기 때문일 것 같다.
예전 학교에서 안드로이드를 배우며 교수님이 해주셨던 말 중에 가장 기억에 남는 것은 '라이프 사이클을 알아야 기술을 제대로 써먹을 수 있다' 는 것 이었다. 유명하거나 많이 쓰이는 기술들은 분명 단점을 상쇄하거나 뛰어넘는 장점들이 존재 하기 때문이고, 그것은 그 기술을 지탱하는 토대, 즉 '어떻게 동작하는가'에서 시작하는 것이기 때문이다.
이 책이 그런 느낌을 준다. 교수님의 강의처럼 딱딱한 느낌이 아닌 성적 좋은 선배가 이론적으로, 예를 잘 들어가면서 설명해주는 느낌과 함께 왜 이 기술을 써야 하는지, 어째서 다른 기술보다 이 기술을 선택해야 하는지 등을 알려준다.
대부분의 it 서적이 그러하듯이 간단한 토이 프로젝트와 함께 진행하지만 요즘 트렌드에 맞는 '친절함'과 '쉬움'을 포인트로 잡고 어린양들을 끌어준다. 독자는 그 손을 잘 잡고 따라가기만 하면 된다.
장고를 써 본지도 꽤나 오래되었다. 학생 때와 사회생활 초창기에 토이 프로젝트를 한다고 사용했었는데, 그 때마다 간단하게 구현되지만 쉽다고는 생각되지 않았었는데, 이 책을 읽고 다시 차근차근 배워본다면 그때보단 조금이나마 쉽다는 생각이 들지 않을까 싶다(연차도 어느정도 쌓였으니?).
장고 풀스택(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)란 데이터의 구조와 상태를 해치지 않고 다른 컴퓨팅 환경에 저장하고 재구성이 가능한 포맷으로 변환하는 과정을 의미한다.
각 파트의 소스 예시들은 정말 저자에게 감사할 정도로 잘 나와있다. 솔직히 한 번 읽고 실습 해본다고 해서 저 모든 노하우들이 한번에 남진 않겠지만, 두고두고 헷갈리는게 있을 때마다 책을 참고하면 공부할때 유용할 것같다.
장고는 비교적 쉽게 접근할 수 있는 파이썬을 기반으로 하고 있는 풀스택 프레임워크이지만 백핸드 개발에 많이 사용된다. 프레임워크란 재사용이 가능한 모듈의 집합체로 S/W 엔지니어가 구현하고자 하는 것을 프레임 워크에 맡김으로써 개발 시간을 절약할 수 있다. 반대로 간단하게 만들어낼 수 있기 때문에 내부 동작에 신경 쓰지 않게 된다. 하지만 제대로 사용하기 위해서는 이를 알아둘 필요가 있는데 이 책은 그런 면에서 도움이 된다.
프레임워크는 개발자를 보조해 두는 하나의 도구일 뿐이다. 그래서 프레임워크의 선택은 각자의 상황과 취향에 의해 선택된다. 플라스크나 FastAPI처럼 빠르게 동작하는 마이크로 프레임워크가 인기를 얻어가고 있다. 하지만 입문자나 아직 초급 개발자라면 장고를 배우는 것은 괜찮은 선택이다. 왜냐하면 접근성이 좋을 뿐 아니라 기술적인 성숙도도 가장 높기 때문이다. 마이크로 프레임워크들이 기능 추가에 소극적인 이유도 기능을 탑재할수록 자신들만의 강점이 사라지고 장고와 비슷해질 뿐이기 때문이다. 같은 것이라면 성숙도가 높은 것을 선택할 건 뻔하다.
책은 장고를 사용하기 위한 여러 OS 환경에서의 설치부터 시작하여 여러 가지 기능을 설명하고 있다. 장고가 가지고 있는 여러 기능과 그것을 효과적으로 사용하는 방법을 자세하게 설명하고 있다. 여러 기능들에 대해 꼼꼼한 예시를 보여주며 입문자들도 쉽게 따라올 수 있도록 구성하고 있다. 어떤 면이 실무적으로 유용한지 설명하기도 하고 단점과 더 나은 대안을 제시하기도 했다.
책과 함께 진행한 토이 프로젝트는 따라 하며 익힐 수 있게 해 주었다. 프로젝트를 따라가다 보면 자연스레 필요한 기능과 사용법을 익히게 된다. 기능을 배우는 과정에서 따라 할 수 있다는 점은 꽤 큰 장점이다. 장고를 처음 접하는 나로서도 어렵지 않게 따라가고 있다. (아직은 그저 따라 해 보는 수준이지만)
재밌는 것은 IT업계에 이력서를 제안하는 방법이 담겨 있었다. 분명 독자는 IT업계로 진출하려는 신입 개발자가 많다고 판단했기 때문일 것 같다. 나는 오히려 어떻게 이력서를 살펴야 하는지 알게 되었다. 기술 수준은 크게 다르지 않다. 열정을 표현하는 것이 중요하다. 그 점은 나도 동의하는 부분이었다.
백엔드 개발자는 아니지만 이 책을 통해서 말로만 듣던 백엔드의 맛을 느낄 수 있어 좋았다.
백엔드 개발을 위한 핸즈온 장고는 장고를 처음 배우는 사람이 아니라 이미 장고로 개발을 해 본 경험이 있지만 자세히는 알지 못하는 초보 백엔드 개발자를 위한 책입니다. 장고를 한번도 사용해 본 적이 없는 사람이라면 책을 읽어도 이해하기 어려우니 미리 Django라는 프레임워크를 미리 학습해서 간단한 웹사이트라도 만들어 본 후 이 책을 읽으면 좋습니다.
2. 1:1 과외를 받는 것 같은 친절하고 자세한 내용
저는 데이터 분석가로 일을 하면서 교육을 하고 있어서 웹 개발은 기본적인 내용만 알고 있습니다. 그래서 백엔드 개발을 위한 핸즈온 장고는 사실 제게 아주 낮설고 어려운 책이었습니다. 그런데 책을 천천히 읽어보면서 알게된 사실은 정말 내용이 친절하고 자세하다는 점이었습니다.
예를 들어 장고에서 model과 field를 사용하는 부분을 설명할 때 그냥 어떻게 사용하면 된다라고 기술하는 것이 아니라 왜 그것을 사용해야 하는지 그리고 그것을 사용하면 얼마나 작업이 쉬워지는지를 상세하게 설명해 줍니다.
기본적으로 백엔드 개발을 위한 핸즈온 장고의 내용은
1. 각 챕터 시작에서 장고의 기능에 대한 간단한 개념 설명을 하고
2. 왜?(why) 그것을 사용해야 하는지 알려줍니다.
3. 그리고 그 기능을 사용하지 않았을 때와 사용했을 때 어떻게 달라지는지 보여주고
4. 그 기능을 이용해 구현할 때 주의 할 점에 대해서 알려줍니다.
그리고 그 설명 하나하나에 실무에서 터득한 노우하우가 가득 담긴 백엔드 개발 팁이 듬뿍 담겨있습니다.
그래서 백엔드 개발에 대해서 잘 모르는 제가 읽어도 백엔드 개발자가 이 책을 읽는 다면 정말 많이 배우겠구나 하는 생각을 했습니다. 그리고 데이터 분석을 강의하는 사람으로서 강의 할 때 이렇게 알려주면 더 좋겠구나 하며 많이 배웠습니다.
4. 백엔드 개발을 위한 핸즈온 장고의 내용 구성
백엔드 개발을 위한 핸즈온 장고의 내용은 크게 6파트로 구성되어 있습니다.
1장. 장고에 대하여
1장은 웹프로그래밍과 백엔드 프로그래밍의 차이, 장고 프레임워크에 대한 설명, 책에서 사용하는 라이브러리, 그리고 환경 설정에 대해서 설명하고 있습니다.
특히, 기존 책들이 장고의 탬플릿 위주로 설명하고 있는 것에 반해 이 책에서는 최근 웹 개발 트랜드에 맞게 프론트 엔드와 백엔드가 분리된 환경에서 백엔드 개발에 집중하면서 장고를 활용하는 방법을 소개합니다.
그리고 2장부터 설명할 내용에 필요한 파이썬 환경 설정, 그리고 추가 패키지 설치법에 대해서 설명하고 있습니다.
2장. 모델링과 마이그레이션
2장에서는 데이터베이스 설계와 데이터 마이그레이션에 대해서 자세히 설명합니다.
장고의 module과 field를 이용해서 데이터베이스를 어떻게 설계할 수 있는지 그리고 파이썬과 SQL을 이용하는 방법과 비교해 어떤 장점이 있는지 상세하게 설명합니다.
마이그레이션 부분에서는 장고를 이용해 DDL을 만들어 마이그레이션 할 때 주의 해야 하는 점에 대해서 상세하게 설명하고 있습니다. 그리고 여러가지 개발시 마주칠 수 있는 문제를 제시하고 그것을 어떻게 해결해야 하는지도 아주 자세히 설명해 줍니다.
3장. ORM과 쿼리셋
3장에서는 ORM(Object Relational Mapping)이라는 기술이 왜 생겨났는지를 설명하고 ORM의 장점을 일반 SQL문법으로 작업할 때와 ORM을 이용해 작업할 때의 차이점을 보여주며 자세히 설명 합니다.
그리고 쿼리셋을 SQL 문장과 1:1 매칭하며 어떤 기능을 구현한 것인지 알려주고 있습니다.
4장 직렬화
4장에서는 데이터 직렬화에 대한 개념설명, 그리고 DRF 라이브러리를 사용한 직렬화 방법을 자세히 소개합니다.
5장 뷰
5장에서는 클래스 기반 뷰를 구현하는 DRF 라이브러리를 자세히 소개합니다. 특히 DRF를 활용해 RESTful API를 설계하는 방법에 대해 중점적으로 설명하고 있습니다.
부록: 배포 Uvicorn, Gunicorn
부록에서는 배포시 사용하게 되는 Uvicon과 Gunicorn을 설명하면서 그 둘을 함께 사용할 때 얼마만큼의 성능 향상이 이루어지는지 보여줍니다.
5. 마무리
1) 백엔드 개발을 위한 핸즈온 장고는 장고를 처음 배우는 사람이 아니라 이미 장고로 개발을 해 본 경험이 있지만 자세히는 알지 못하는 초보 백엔드 개발자를 위한 책입니다.
2) 1:1 과외를 받는 것 같은 친절하고 자세한 내용과 취업 준비시 또는 실무에서 활용할 수 있는 생생한 팁과 노하우가 가득 담겨 있습니다.
3) 단순히 장고라는 웹 프레임워크를 어떻게 사용하는지를 설명하는 책이 아니라 왜 장고가 그렇게 개발되었는지, 그리고 실무에서 장고의 기능을 어떻게 활용해 구현해야 하는지 원리와 차이를 자세히 설명하고 있는 책입니다.
4) 장고를 이용해 백엔드 개발을 하려고 하는 초급 백엔드 개발자라면 책 속에 담긴 자세한 설명과 노우하우로 많은 성장을 할 수 있을 것 같습니다.