Categories
컴퓨터

파이썬 Django 맛보기를 위한 책

1. 들어가며 인공지능(AI) 이야기가 나오면 항상 빠지지 않고 나오는 언어 중 하나가 파이썬(Python)이다. 파이썬(Python)이 인기를 끄는 이유는 생산성(productivity) 때문이다. 생산성이 높다는 말은 배우기 쉽고 코드 몇 줄로 많은 일을 할 수 있다는 말이다. 실제로 이 글을 쓰는 본인도 Selenium Web Driver를 통해 간단한 웹 자동화(automation) 도구를 만들 때 파이썬(Python)을 사용했는데 자바(Java)보다 훨씬 편하게 프로그래밍할 수 […]

1. 들어가며

인공지능(AI) 이야기가 나오면 항상 빠지지 않고 나오는 언어 중 하나가 파이썬(Python)이다. 파이썬(Python)이 인기를 끄는 이유는 생산성(productivity) 때문이다. 생산성이 높다는 말은 배우기 쉽고 코드 몇 줄로 많은 일을 할 수 있다는 말이다.

실제로 이 글을 쓰는 본인도 Selenium Web Driver를 통해 간단한 웹 자동화(automation) 도구를 만들 때 파이썬(Python)을 사용했는데 자바(Java)보다 훨씬 편하게 프로그래밍할 수 있었다. 그러나, 사실 나는 파이썬(Python)이 이름 때문에 싫다. 나는 뱀이 싫다.

파이썬(Python)은 ‘피톤’이라는 이름으로 알려진, 고대 그리스 신화에 나오는 거대한 뱀의 이름이다. ‘피톤’은 Python을 고대 그리스어로 읽은 것이며, 영어를 그대로 읽으면 ‘파이썬’이 된다

이번에 리뷰하는 책은 한빛미디어에서 출간한 <Django(장고)로 배우는 쉽고 빠른 웹개발, 파이썬 웹 프로그래밍(김석훈 지음)>이다. 파이썬 웹 프레임워크인 장고(Django)는 제목 그대로 쉽고 빠르며 안전한 웹 서비스를 구축할 수 있도록 프로그래머를 돕는다.

프로그램을 만들기 위해서는 컴퓨터와 대화를 해야 한다. 그리고 대화를 하기 위한 언어를 프로그래밍 언어라고 한다. 이러한 프로그래밍 언어에는 파이썬(Python), 자바(Java), C, C++, C#, Node.js, JavaScript 등이 있다. 각 언어는 기본적으로 OS에서 제공하는 기능을 사용하기 위한 라이브러리, 수많은 학자들이 연구했던 자료구조와 알고리즘 등을 구현한 라이브러리 등을 제공한다. 그리고 이러한 라이브러리를 활용해서 어떤 특정한 목적에 맞는 종합선물세트를 만드는데 이러한 것을 프레임워크(Framework)라고 부른다. 파이썬의 장고(Django)웹 사이트를 빠르게 만들 수 있는 프레임워크(Framework)로 인스타그램(Instagram), 스포티파이(Spotify), 드랍박스(Dropbox) 등에서 이를 활용하고 있다.

2. 구성 및 특징

이 책은 아래와 같은 구성을 갖는다.

  • 웹 프로그래밍 소개
  • 파이썬 웹 표준 라이브러리 소개
  • Django 웹 프레임워크 개론
  • Django 웹 프레임워크 심화
  • 웹 애플리케이션 배포

웹 프로그래밍을 하다보면 HTTP, 웹 서버, WAS, 웹 클라이언트, CGI 등 생소한 용어가 갑자기 튀어나오기 마련인데 이러한 용어를 굉장히 쉽게 설명한다. 이 책에서 가장 잘 쓰여진 부분이라고 생각하기 때문에 웹 프로그래밍에 대한 이해를 얻고자 한다면 이 책의 앞 부분을 읽어보기 바란다.

3. 기억하고 싶은 글귀

웹 프레임워크는 사용자 프로그램과 저수준의 http.server 라이브러리 중간에 위치하여 웹 서버의 애플리케이션 개발을 좀 더 편리하게 해주면서, 표준 라이브러리의 기능을 확장해주는 역할을 하고 있습니다. 물론 웹 프레임워크는 파이썬의 표준 라이브러리를 사용하여 개발되었습니다. 만일 여러분이 웹 프레임워크에 관심이 있어, 소스를 분석해보면 이를 확인할 수 있을 것입니다. 웹 프레임워크를 직접 개발하는 고급 프로그래머라면 http.server 모듈에서 제공하는 API를 다루겠지만, 보통의 경우라면 웹 프레임워크에서 제공하는 API를 이용하여 웹 서버 애플리케이션을 개발하는 것이 대부분입니다. – 47쪽

#

파이썬에서는 WSGI(Web Server Gateway Interface) 규격이 정의되어 있습니다. 파이썬 애플리케이션을 실행하고자 하는 웹 서버는 이 규격을 준수해야 합니다. WSGI는 웹 서버와 웹 애플리케이션을 연결해주는 규격으로, 장고(Django)와 같은 파이썬 웹 프레임워크를 개발하거나, 이런 웹 프레임워크를 아파치(Apache)와 같은 웹 서버와 연동할 때 사용합니다. – 76쪽

#

장고(Django)는 현재 가장 많이 사용되는 파이썬 웹 프레임워크입니다. 2003년 로렌스 저널-월드신문(Lawrence Journal-World Newspaper)을 만들던 웹 개발팀의 내부 프로젝트로 시작됐으며, 2005년 오픈소스 프로젝트로 공개되었습니다. 그리고 구글의 웹 앤진에서 장고를 사용하면서 많은 사람들이 사용하게 되었고, 현재는 파이썬의 대표적인 웹 프레임워크로 자리매김하고 있습니다. – 85쪽

#

웹 사이트를 설계할 때 가장 먼저 해야 할 일은 프로그램이 해야 할 일을 적당한 크기로 나누어서 모듈화하는 것입니다. 이 경우, 웹 사이트의 전체 프로그램 또는 모듈화된 단위 프로그램을 애플리케이션이라고 합니다. 즉, 프로그램으로 코딩할 대상을 애플리케이션이라고 부르는 것입니다.

그러나 장고에서는 용어를 사용할 때, 애플리케이션의 개념을 웹 서버 개발 측면에서 좀 더 구체화하고 있습니다. 웹 사이트에 대한 전체 프로그램을 프로젝트(Project)라 하고, 모듈화된 단위 프로그램을 애플리케이션(Application)이라 부르고 있습니다. 즉, 애플리케이션 프로그램들이 모여서 프로젝트를 개발하는 개념입니다. – 94쪽

#

웹 프로그램 개발 시 일반적으로 언급되는 MVC(Model-View-Controller) 패턴이란 데이터(Model), 사용자 인터페이스(View), 데이터를 처리하는 로직(Controller)을 구분해서 한 요소가 다른 요소들에 영향을 주지 않도록 설계하는 방식입니다. 이런 방식으로 개발을 진행하면 UI 디자이너는 데이터 관리나 애플리케이션 로직에 신경 쓰지 않고도 화면 UI를 설계할 수 있고, 로직이나 데이터를 설계하는 개발자도 화면 디자인은 디자이너에게 맡기고 자신의 설계 및 개발 업무에만 집중할 수 있게 됩니다. 파이썬도 이러한 MVC 개념을 그대로 받아들였는데, 용어는 다르게 사용하고 있습니다.

장고 프레임워크에서는 View를 Template, Controller는 View라고 표현하며, MVC를 MVT(Model-View-Template) 패턴이라고 합니다. 모델(Model)은 데이터베이스에 저장되는 데이터를 의미하는 것이고, 템플릿(Template)은 사용자에게 보여지는 UI 부분을, 뷰(View)는 실질적으로 프로그램 로직이 동작하여 데이터를 가져오고 적절하게 처리한 결과를 템플릿에 전달하는 역할을 수행합니다.

예를 들면, 모델은 블로그의 내용을 데이터베이스로부터 가지고 오거나 저장, 수정하는 기능을, 뷰는 버튼을 눌렀을 때 어떤 함수를 호출하며 데이터를 어떻게 가공할 것인지 결정하는 역할을, 템플릿은 화면 출력을 위해 디자인과 테마를 적용해서 보여지는 페이지를 어떻게 연결되는지를 보여주고 있습니다. – 95쪽

#

ORM(Object-Relational-Mapping)은 쉽게 표현하면 객체와 관계형 데이터베이스를 연결해주는 역할을 합니다. 기존의 웹 프로그래밍에서 데이터베이스에 접근하려면 직접 SQL 언어를 사용해 데이터를 요청해야 했고, 개발자는 SQL 및 데이터베이스에 접근하기 위한 드라이버 API 등에 대해 잘 알고 있어야 했습니다. 하지만 ORM에서는 데이터베이스 대신에 객체(클래스)를 사용해 데이터를 처리할 수 있습니다. 객체를 대상으로 필요한 작업을 실행하면, ORM이 적절한 SQL 구문이나 데이터베이스 API를 호출해서 처리해주기 때문입니다. 물론 원한다면 직접 SQL을 사용해 데이터베이스의 데이터를 얻어올 수도 있습니다. – 96쪽

#

장고에서는 URL 패턴으로부터 파라미터를 추출하고 그 파라미터로 데이터베이스를 검색하여 해당 데이터를 템플릿 시스템에서 랜더링하는 기능처럼, 웹 프로그램 개발 시 공통적으로 사용할 수 있는 로직을 이미 개발해 놓고 기본 클래스로 제공하고 있기 때문에 이를 상속받아 사용하면 됩니다. 장고에서는 이렇게 공통된 로직을 미리 개발해 놓고 제공하는 뷰를 제네릭 뷰(generic view)라고 부릅니다. – 206쪽

또한 개념을 쉽게 이해할 수 있는 도표가 적절히 포함되어 학습에 큰 도움이 되었다.

기술의 발전에 따른 웹 서버 기술의 변화
파이썬 웹 표준 라이브러리 구성
파이썬 Web Server Gateway Interface(WSGI) 처리 순서
장고(Django)의 WSGI 인터페이스
장고의 MVT(Model, View, Template) 패턴

4. 아쉬웠던 점

장고(Django)를 처음 접하는 사람으로서 평을 하자면 이 책은 감탄으로 시작해서 아쉬움으로 끝나는데 여기에는 몇 가지 이유가 있다.

첫째, 뒤로 갈수록 불친절하다. 예를 들어, 애플리케이션을 Nginx에 배포하는 317쪽을 살펴보면 include /home/shkim/pyBook/ch9/www_dir/uwsgi_params 라는 항목이 나오는데 책에서는 이 파일에 대한 설명이 없다. 물론, 예제 소스에 포함된 코드라고 항변할 수 있겠으나 독자의 집중력을 흐트러뜨리기 때문에 바람직한 구성은 아니다. 결국 구글링을 통해 아래 파일을 직접 추가해야 했다. 본인은 https://django.ryanami.com 에 책의 실습 예제를 성공적으로 배포 했지만, 설명이 매끄럽지 않기 때문에 이 부분에서 좌절한 독자들이 있을 것 같다.

Nginx 환경변수와 uWSGI 환경변수를 연결하기 위한 설정파일

둘째, 편집에 아쉬움이 있다. 부록 D의 PyCharm 무료 버전 사용하기의 스크린샷은 너무 어두워서 읽을 수가 없다. 통합환경(Integrated Development Environment, IDE)의 테마를 White 계열로 변경해서 포함했어야 한다. 아래 이미지에서 보듯이 읽기 어렵다.

사진 화질이 나쁜 게 아니라 인쇄 상태가 좋지 않다

그리고 아래 사진을 보면 알 수 있듯이 어떤 목적을 달성하기 위해 필요한 작업을 순서대로 나열하는데 단순히 ‘>’ 로 표현할 게 아니라 순서를 의미하는 숫자 등으로 표시 했다면 더 좋았을 것 같다. ‘>’ 는 커맨드 창의 Prompt를 보여주기 위한 것 같다. 그런데 그게 큰 의미가 있을까? 일반 유저를 나타내는 $, 루트를 의미하는 # 라면 모를까.

순서가 있다면 앞에 순서를 명시해주면 좋지 않았을까?

셋째, 책을 읽은 독자가 앞으로 어떻게 학습해야 할지 알려주지 않는다. 한 권의 책으로 어떤 지식을 제대로 습득 하기에는 어려움이 있다. 장고(Django)에 대해 전문가인 저자의 경험을 기반으로 앞으로 어떻게 학습하면 좋을지 로드맵을 제시했으면 어땠을까? 예를 들어, 참고할 웹사이트나 도서를 추천한다면 장고(Django) 걸음마 수준의 본인 같은 독자에게 큰 도움이 되었을 것이다. 물론, 할 사람은 알아서 다 한다. 그래도 알려주면 더 좋지 않나?

끝으로 책의 실습 예제를 따라한 후 얻게 되는 결과물이 아쉽다. 좀 더 예쁜 UI에 실용적인 결과물을 만드는 걸 목표로 했다면 책을 모두 읽은 후 얻게 되는 뿌듯함이 훨씬 더 많았을 것 같다. 참고로 책의 예제는 Django 공식 사이트에서도 확인이 가능하다. 개인적으로는 개인 블로그를 만드는 장고걸스 튜토리얼이 훨씬 좋았다.

5. 어색한 문장 또는 오탈자

지금까지 리뷰했던 책 중 어색한 문장이나 오탈자가 가장 적은 책이었다. 아래는 의미 전달은 되나 일부 어색한 내용이 있어 아래와 같이 수정해봤다.

(242쪽 표 5-6) Author 테이블 데이터에 Publication Date 라는 컬럼이 존재하는데 실제로는 존재하지 않으므로 제거되어야 한다.

#

(268쪽 마지막 문단 – 원문) application 객체는 아파치와 같은 운영 웹 서버뿐만 아니라, 장고의 개발용 웹 서버인 runserver에서도 같이 사용하는 객체입니다. 다만 다른 점은 application 객체의 위치를 지정하는 방식입니다. 아파치나 NGINX/uWSGI는 설정 파일에서 지정하고, 즉 httpd.conf 설정 파일의 WSGIScriptAlias 지시자 또는 uwsgi.ini 설정 파일의 module 항목으로 지정하고, 개발용 runserver에서는 settings 모듈(mysite/settings.py)의 WSGI_APPLICATION 변수로 지정합니다.

(268쪽 마지막 문단 – 제안) application 객체는 아파치와 같은 운영 웹 서버뿐만 아니라, 장고의 개발용 웹 서버인 runserver에서도 같이 사용하는 객체입니다. 지금까지 예제에서 사용한 runserver의 경우에는 application 객체를 settings 모듈(mysite/settings.py)의 WSGI_APPLICATION 변수로 지정했습니다. 그러나 아파치나 NGINX 같은 웹 서버는 application 객체의 위치를 설정 파일에서 지정합니다. 예를 들어, 아파치의 경우에는 설정 파일(httpd.conf)에서 WSGIScriptAlias 지시자로 설정하고, Nginx의 경우에는 웹 서버의 설정 파일이 아니라 파이썬 코드를 실행하는 Web Application Server(WAS)인 uWSGI 서버의 uwsgi.ini 설정 파일에서 지정합니다.

6. 총평

국내 유일의 장고(Django) 책인 것으로 보인다. 한국어로 쓰여진 책이고 저자와 출판사가 꼼꼼히 검수를 해서 문장이 잘 읽히고 깔끔하다. 물론, 다소 설명이 장황한(verbose) 부분도 있는 게 사실이지만 개인적으로는 설명이 딱딱하지 않고 저자와 대화하는 듯한 느낌이 들어서 더 좋았다.

인터넷으로 정말 대부분의 정보를 찾을 수 있지만 그럼에도 불구하고 사람들이 책을 사는 이유는 체계화되고 검증된 자료를 편하게 읽고 싶어서다. <Django(장고)로 배우는 쉽고 빠른 웹개발, 파이썬 웹 프로그래밍(김석훈 지음)>은 여기서 말한 구매 이유에 충분히 만족하는 책이다.

만약 당신이 장고(Django)를 처음 접한다면 이 책은 훌륭한 출발점이 될 것이다. 나는 이 책을 통해 장고(Django)를 처음 접했는데 저자가 쉽게 여러 가지 개념을 설명해서 빠르게 개념을 읽힐 수 있었다. 장고를 배우고 싶다면 이 책을 읽어볼 것으로 추천한다.

Hits: 131

By 라이언양

라이언양 연구실 주인

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다