2. 장고 시작하기 - 1

2019. 5. 22. 18:10파이썬 웹프로그래밍

개발환경 셋팅

장고를 이용해 웹 프로그래밍을 하려면 파이썬 개발 환경이 필수입니다. 지금부터 파이썬 설치와 파이참을 설치해 개발 환경을 만들어 보겠습니다.

 

2.1. 파이썬 설치

파이썬이라는 언어로 프로그래밍을 하려면 파이썬 해석기인 인터프리터를 설치해야합니다. 이제 설치할 파이썬 프로그램은 이 인터프리터를 설치하는 과정입니다. 위도우, 맥, 리눅스 컴퓨터 모두에 설치가 필요합니다. 자신의 컴퓨터 OS에 맞는 설치 프로그램으로 설치하시면 됩니다.

- www.python.org 페이지에 접속해 Downloads -> Python version 버튼을 클릭합니다.

- 다운로드 완료된 python-version.exe 설치 프로그램을 실행합니다.

-Install launcher for all users (recommended)와 Add_Python version to PATH를 체크하고 Install Now를 클릭합니다.

- 설치가 완료되면 Close 버튼을 클릭합니다.

- 시작 메뉴에서 파이썬 관련 프로그램들을 확인할 수 있습니다.

- 시작 메튜에서 IDLE을 실행합니다. IDLE에서 Python x.x.x 버전 명을 확인 할 수 있으면 설치가 잘 된 것입니다.

2.2 파이참 설치

파이썬을 설치했으니 이제 파이참을 설치해보겠습니다. 파이참은 파이썬으로 프로그래밍을 할 때 사용되는 소프트웨어 중 대표적입니다. 파이썬 전용이고 유료, 무료 버전을 제공하고 있습니다. 무료 버전을 사용해도 개발하는데 전혀 지장이 없으므로 무료 버전으로 설치해 보겠습니다.

- https://www.jetbrains.com/pycharm/download/ 페이지에 접속해 무료인 Community 버전의 검정색 DOWNLOAD 버튼을 클릭합니다.

- 설치 파일 다운로드가 시작되면 안내 페이지에서 메일링을 신청할 수 있습니다. 파이참 제작사의 메일링을 받고 싶다면 등록하시면 됩니다.

- 다운로드 완료된 python-versionpycharm-community-2019.1.2.exe 설치 프로그램을 실행합니다.

- 환영 화면이 나타나면 Next 버튼을 클릭합니다.

- 설치될 경로를 설정하고 Next 버튼을 클릭합니다.

- .py를 체크하고 Next 버튼을 클릭합니다.

- 시작 메뉴 폴더 구성을 선택하고 Install 버튼을 클릭합니다.

- 설치가 완료되면 Run PyCharm Community Edition을 체크하고 Finish 버튼을 클릭합니다.

- 이전 설정 불러오기 창이 나타납니다. Do not import settings를 선택하고 OK 버튼을 클릭합니다.

- I confirm that I have read and accept the terms of this User Afreement를 체크하고 Continue 버튼을 클릭합니다.

- Skip Remaining and Set Defaults 버튼을 클릭합니다.

- 파이참 로딩이 끝나면 Welcome to PyCharm 창이 나타납니다. 이 화면을 보고 있다면 설치가 잘 끝난 것입니다.

파이썬과 파이참을 설치해 봤습니다. 이제 환경 구성이 끝났으니 실제 장고 프로젝트를 만들어 보면서 장고를 살펴봅시다.

 

2.3. 기본 프로젝트 만들기

- Create New Project 버튼을 클릭합니다.

- 프로젝트 만들기 창이 나타납니다. 이 창에서 Location 부분에 선택되어 있는 untitled에 원하는 프로젝트명으로 변경한 후 가상 환경 설정을 살펴보겠습니다.

- 가상 환경을 보기 위해 Project Interpreter를 클릭합니다. 가상 환경은 다양한 파이썬 버전과 모듈 버전을 사용하고 싶을 때 각각의 버전별 환경을 분리해서 사용하는 것을 의미합니다. 이 책에서도 앞으로 프로젝트마다 별개의 가상 환경을 설정해두고 사용할 것입니다. New environment using를 선택하고 설정들을 확인 합니다. Location은 프로젝트 폴더 밑에 venv 폴더로 설정하고 Base interpreter는 파이썬 3.7 버전으로 선택하면 됩니다. 보통은 기본값으로 두고 바꾸지 않아도 됩니다. 설정을 다 확인 했으면 Create 버튼을 클릭합니다.

- 파이썬 프로젝트를 생성하면 프로젝트 이름과 같은 이름으로 폴더가 생기고 그 안에 veav라는 가상 환경 폴더가 생깁니다. 이제 여기에 프로젝트를 만들어 보겠습니다.

- 파이참 아래쪽에 있는 Terminal 버튼을 클릭하면 가상환경이 활성화 되어있는 터미널이 켜집니다. 여기에 장고 명령들을 입력할 것입니다.

- 터미널에 다음 명령을 입력합니다. '$'는 입력하지 않습니다. 명령창이라는 의미입니다.

$ pip install django

장고 설치는 금방 완료됩니다. 다만 프로젝트를 만들 때마다 장고를 설치할 것입니다.

- 장고를 설치했으면 프로젝트를 만들어야 합니다.

$ django-admin startproject config .

위의 명령을 입력할 때 주의 할 점은 config 다음에 한칸을 띄우고 .(점)이 있다는 것입니다. 이 점은 '현재 폴더에 파일들을 만들겠다'라는 의미입니다. 장고 프로젝트를 만들면 config 폴더가 생기고 manage.py 라는 파일이 만들어 집니다.

- 장고로 프로젝트를 생성했기 때문에 우리는 당장이라도 웹 사이트를 사용할 수 있는 상태입니다. 하지만 아직 할 일이 남아 있습니다. 바로 DB를 생성하는 일입니다.

python manage.py migrate

위의 명령을 입력해 DB를 초기화 하면서 DB 파일을 생성합니다. 아래의 화면처럼 장고가 여러가지 일을 처리하면서 DB를 만들고 초기화 합니다.

초기화 작업이 끝나고 프로젝트 탐색창을 보면 db.sqlite3 파일이 생겨있습니다. 이 파일에 우리가 웹 프로그래밍에서 다루는 회원 정보가 글 정보들이 저장됩니다. 파일 내용을 자세히 살펴보고 싶다면 sqplite viewer를 검색해 원하는 프로그램을 다운 받아 확인 할 수 있습니다.

 

 

2.4. 프로젝트 구조 살펴보기

프로젝트를 생성했으니 구조를 살펴보겠습니다. 아래 그림처럼 여러 가지 폴더와 파일들이 있습니다. 여기에 추가적으로 촐더와 파일들을 생성해가면서 웹 서비스를 완성할 것입니다.

1. comfig 폴더 : 프로젝트 설정 파일과 웹 서비스 실행을 위한 파일이 들어 있습니다. 이 폴더 이름은 django-admin startproject 명령을 사용해 프로젝트를 만들 때 정해진 것이며 꼭 config라는 이름을 사용할 필요는 없습니다. 프로젝트 생성 후에 변경하려면 매우 귀찮기 때문에 생성할 때 잘 결정하는 것이 좋습니다.

- __init__.py : 파이썬 2.x대 버전과의 호환을 위해 만들어진 비어있는 파일입니다. 파이썬 3.x 대에서는 불필요하지만 계속 생성됩니다. 지워져도 프로젝트를 진행하는데는 지장이 없습니다. 다른 촐더에서도 계속 보일 것입니다.

- settings.py : 프로젝트 설정에 관한 다양한 내용이 들어 있습니다. 다음 단계에서 자세히 살쳐보겠습니다.

- urls.py : 특정 기능을 수행하기 위해 접속하는 주소를 url이라고 하고 이를 설정해 주는데 그 설정을 이 파일에 기록합니다. 한 프로젝트 안에 여러개의 urls 파일을 만들 것입니다. config 폴더 안에 있는 urls 파일이 최초로 탐색되는 기준 url 파일입니다. 기준 url 파일은 settings.py에서 변경할 수 있습니다.

2. venv 폴더 : 프로젝트 구동에 필요한 가상환경이 들어있는 폴더입니다. 되도록 수정이나 삭제는 하지 않는 것이 좋습니다.
3. db.sqlite3 : SQLite3 DB 파일입니다. SQLite DB를 사용할 경우 임의로 삭제하거나 위취를 이용하면 안됩니다. 다만 다른 DB로 변경할 경우 필요 없는 파일입니다.
4. manage.py : 장고의 다양한 명령어를 실행하기 위한 파일입니다. 이때 앱에 관련된 폴더와 파일도 추가적으로 설정하겠습니다.

이후의 과정에서는 기능 추가를 위해 [앱]을 만들 것 입니다. 이때 앱에 관련된 폴더와 파일도 추가적으로 설정하겠습니다.

2.5. settings.py

settings.py는 프로젝트에 관련된 다양한 설정이 모두 들어있습니다. 물론 파일에 기록되어 있지 않는 내용들이 있지만 그 내용들은 장고 기본 값으로 사용하게 됩니다. 해당 기본 값들은 django/conf/global_settings.py 파일에 담겨 있습니다.

settings.py 파일의 내용을 보면서 어떤 값들인지 살펴 봅시다.

BASE_DIR : 프로젝트 루트 폴더, 설정 파일이나 py파일 등에서 프로젝트의 루트 폴더를 찾아 그 하위를 탐색한다거나 하는 일들을 빈번하게 수행합니다. 이 때문에 변수로 미리 준비해 두는 값.
SECRET_KEY : 다양한 보안을 위해 사용됩니다. 세션값의 보호나 비밀번호 변경시 사용되는 보안 URL을 만드는 등의 일에 주로 사용합니다. 임의로 변경할 수 있으나 변경하면 로그인이 풀리는 등의 부작용이 있습니다. 또 정해진 값은 외부에 노출되어서는 안됩니다.
DEBUG : 디버그 모드를 설정합니다. True일 경우 다양한 오류 메시지를 즉시 확인할 수 있습니다. 실제로 배포할 때는 False로 바꾸며, 이 때는 다른 설정값을 이용해 관리자가 오류 메시지를 받아 보게 설정할 수 있습니다.
ALLOWED__HOSTS : 현재 서비스의 호스트를 설정합니다. 개발시에는 비어두고 사용하나 배포시에는 '*'이나 실제 도메인을 기록합니다. '*'은 위럼하기 때문에 실제 도메인을 기록하길 권장하고 있습니다. 이는 DNS Revinding을 막기위한 조치입니다. 장고 1.10.3 버전이 업데이트 되는 시점부터 Debug 모드가 False일 때 ALLOWED_HOSTS값이 비어있으면 서비스를 시작할 수 없습니다.
INSTALLED_APPS : 장고 웹 서비스는 다양한 앱의 결합으로 만들어집니다. 현재 프로젝트에서 사용하는 앱의 목록을 지록하고 관리합니다. 나중에 직접 만들 앱들도 여기에 다 기록할 것입니다.
MIDDLEWARE : 장고의 모든 요청/응답 메시지 사이에 실행되는 특수한 프레임워크들입니다. 주로 보안에 관한 내용들이 많습니다.
ROOT_URLCONF : 기준이 되는 urls.py 파일의 경로를 설정합니다.
TEMPLATES : 장고에서 사용하는 템플릿 시스템에 관한 설정들입니다. 템플릿 해석 엔진과 템플릿 폴더의 경로 등을 변경하는데 쓰입니다.
WSGI_APPLICATION : 실행을 위한 wsgi 어플리케이션을 설정합니다.
DATABASES : DB 관련 설정입니다.
AUTH_PASSWORD_VALIDATORS : 비밀번호 검증을 위한 설정입니다. 기본적으로 들어 있는 검증 규칙은 사용자 정보와 유사한지, 숫자로만 만들었는지, 너무 짧은지, 평범한 비밀번호인지 검증하도록 되어 있습니다.
LANGUAGE_CODE 등 : 이하 내용은 다국어에 관한 설정들입니다. 장고는 손쉽게 다국어 서비스를 만들 수 있는 기능을 갖고 있습니다.

다국어 설정에 관한 부분 외에는 추가적으로 사용할 설정 등을 그 아랫부분에 설정해 사용합니다. 앞으로 settings.py 파일을 변경할텐데 그 때마다 해당 값의 내용을 살쳐보겠습니다.

2.6. wsgi.py

wsgi.py 파일은 wsgi 어플리케이션 구동을 위해 사용되는 파일입니다. 실제로는 웹 서버와 장고 애플리케이션 사이에 통신 역할을 담당하는 것이 wsgi입니다.

우선 WSGI가 무엇인지 살펴 봅시다. WSGI는 Web Server Gateway Interface의 약어입니다. 웹서버는 Nginx나 Apache 같은 서버 컴퓨터에서 사용자(웹브라우저)의 요청을 받아서 처리해주는 말하자면 만화 배트맨에 나오는 알프레드 같은 집사의 역할을 하는 프로그램입니다. 웹 서버가 사용자의 역할을 적절하게 해석하여 장고로 구동되고 있는 웹 서비스에 전달을 해줘야 하는데, 이 때는 중간 역할을 하는 무엇인가가 필요합니다. 왜냐하면 그런 중간 역할자 없이는 효율적으로 요청을 전달할 수가 없고, 특정 언어로만 제작되지 않는 웹 서비스의 특성상 웹 서버는 여러가지 언어로 된 프로그램들과 통신을 하여야 하기 때문입니다.

웹 초장기 때는 CGI(Common Gateway Interface)라는 것이 그 중간자 역할을 했습니다. 그러나 이 CGI는 구조상 속도가 느린편이었고 리소스도 많이 필요했습니다. 이후에 Fast CGI 같은 방식으로 발전을 거듭했고, 각 언어별로 mod_php, mod_python 같은 아파치 모듈 형태의 프로그램들도 등장했습니다. 하지만 mod_python은 구종중에 종료되거나 하는 불안정한 프로그램이었기 때문에 WSGI가 등장합니다.

동작 방식의 이전의 것들과 비슷하지만 리눅스 서버에서 리소스를 잡아 먹는 주범이었던 포크(Fork) 방식을 사용하지 않고 다양한 방식으로 빠르게 동작하고 적은 리소스를 사용하도록 만들어졌습니다.

웹 서버 프로그램과 장고 웹 애플리케이션 사이에서 미들웨어 처럼 동작하면서 웹 서버는 요청이 있을 경우 정보와 콜백함수를 WSGI에 전달합니다. 그럼 이 정보를 해석하여 장고 웹 어플리케이션에 전달합니다. 그럼 장고 웹 어플리케이션은 파이썬 스크립트를 이용해 정보를 처리하고 끝낸 결과를 WSGI에 다시 전달합니다. 그럼 이 정보를 콜백함수를 이용해 웹 서버에 다시 전달하는 방식으로 서버, WSGI, 장고 웹 어플리케이션이 상호작용하며 동작합니다.

이를 위해 wsgi.py 파일을 이용해 어플리케이션을 구동합니다.