이 글은 Django 공식 문서의 Getting Started를 참고하여 정리한 글입니다. ( 링크 )



1. Django 훑어보기

Django는 Python Web Framework이며, 또한 그 자체로 웹 서버 역할을 할 수 있습니다.

그런데 Django는 웹 서버 역할을 할 목적으로 설계된 것이 아니기 때문에 Django 앞에 웹 서버를 두는 것이 바람직하다고 합니다.


Django의 특징을 간단하게 살펴보면 다음과 같습니다.

1) ORM 내장 ( default DB : sqlite3 )

Django는 ORM이 내장되어 있기 때문에 테이블을 객체로서 관리할 수 있습니다.

또한 SQL 쿼리를 직접 작성하지 않고, 메서드 호출만으로 데이터 조작이 가능합니다.

기본적으로 sqlite3를 사용하지만, 얼마든지 다른 DB로 바꿀 수 있습니다.


2) DB 관리를 위한 admin 페이지 제공

브라우저에 상에서 " Django Server IP/admin "경로에 접근하면 GUI로 테이블 생성 및 데이터 조작이 가능합니다.

이를 admin 페이지라고 하는데, admin 페이지는 커스터마이징이 가능합니다.


3) MTV 모델 ( Model - DB / Template - HTML / View - Controller )

Django는 많은 프레임워크에서 사용하는 MVC 모델과 이름이 다릅니다.

그런데 이름만 다를 뿐이지, 결국은 MVC 모델입니다.


4) 우아한 URL

제가 느끼기에 Django는 개발자가 우아한 URL 작성을 하도록 유도하는 것 같습니다.

그만큼 매력적이라는 뜻인데, URL을 정규식으로 작성할 수도 있고, 동적으로 변하는 path variable을 깔끔하게 작성할 수 있습니다.

(ex)  path('articles/<int:year>/<int:month>/', views.month_archive)

(ex)  url(r'^admin/', admin.site.urls),


5) Template 시스템

HTML 문서에 View로 부터 받은 Python 변수, if문, for문 등을 작성할 수 있도록 Template 시스템을 제공합니다.

그런데 Template 시스템에서 제공하는 문법은 Python 문법과 다른 것이기 때문에 별도의 학습이 필요합니다.






이상으로 공식문서에서 소개된 Django의 특징을 간단하게 정리해보았습니다.




2. Django 설치

Django 설치는 아래의 명령어를 입력하여 매우 간단하게 설치할 수 있습니다.

$ pip install django


그런데 Django가 지원하는 Python이 다르기 때문에 이를 참고해서 Django 버전을 설치해야 합니다.

공식 문서에 따르면, Python2.7을 지원하는 마지막 버전은 Django1.11 이고 최신 버전의 Python이 기능도 많고 빠르기 때문에 최신 버전의 Python을 사용하는 것이 좋다고 합니다.





3. Django 프로젝트 및 애플리케이션 생성

Django에서는 프로젝트와 애플리케이션 구분을 명확히 해야 합니다.

애플리케이션은 특정한 기능을 수행하는 웹 어플리케이션을 말하며, 프로젝트는 이런 특정 웹 사이트를 위한 애플리케이션들과 각각의 설정들을 한데 묶어놓은 것 입니다.

즉, 프로젝트는 다수의 app 을 포함할 수 있습니다.



1) 프로젝트 생성

먼저 Django 프로젝트를 생성할 디렉터리로 이동한 후, mysite라는 이름의 프로젝트를 생성하겠습니다.

$ django-admin startproject mysite

django-admin은 Django에서 제공하는 command-line 유틸리티입니다.

처음 프로젝트를 생성할 때만 사용할 것이며, 이후로는 프로젝트를 생성할 때 같이 생성된 manage.py를 통해 명령어를 작성할 것입니다.


이제 생성된 프로젝트를 확인해보고, 각각이 어떤 파일인지 알아보겠습니다.


(1) mysite

가장 바깥에 있는 디렉터리는 단순히 프로젝트를 담는 역할을 합니다.

하위에 있는 mysite 디렉터리와 이름이 겹치므로, 헷갈리지 않도록 이름을 바꾸는 것이 좋습니다.


(2) mysite/mysite

내부에 있는 mysite 디렉터리는 프로젝트 설정파일들을 모아놓은 디렉터리입니다.


(3) mysite/mysite/settings.py

루트 디렉터리를 포함한 각종 디렉터리 위치, 로그 형식, 프로젝트에 포함된 애플리케이션 등에 관한 프로젝트 전반적인 설정 파일입니다.


(4) mysite/mysite/urls.py

프로젝트의 URL을 선언합니다.

각 애플리케이션 마다 urls.py 파일을 생성하는 것이 좋기 때문에, mysite/mysite/urls.py 파일에는 애플리케이션의 url이 선언된 파일들의 경로를 작성하는 것이 좋습니다.

( 나중에 URL 매핑할 때 자세히 알아보겠습니다. )


(5) mysite/mysite/wsgi.py

프로젝트를 서비스 하기 위한 WSGI 호환 웹 서버의 진입점을 정의한 파일입니다.

즉 웹 서버와 Django 프로젝트를 연동할 때 사용되는 파일인데, Nginx와 Django를 연동하는 방법에 대해서는 여기를 참고해주세요 !


(6) mysite/manage.py

manage.py는 Django 프로젝트를 생성할 때 사용했던 유틸리티 django-admin.py와 관련이 있습니다.

앞으로 Django와 상호작용 하기 위해서는 이 파일을 이용할 것입니다. 




2) 설문조사 애플리케이션 생성

이제 프로젝트 내에 설문조사 애플리케이션을 생성하겠습니다.

$ cd mysite

$ python manage.py startapp polls


polls라는 애플리케이션을 생성했더니, Django가 여러 파일들을 제공합니다.

즉, " 애플리케이션 개발에 필요한 기본적인 파일들을 제공해줄테니, 파일들을 채워 넣어서 빠르게 개발을 하라 "는 Django의 철학입니다.


(1) polls/migrations 

migration은 Django가 모델의 변경사항을 저장하는 방법으로서, 디스크 상의 파일로 존재합니다.

polls/migrations 패키지는 이러한 파일들을 저장하는 디렉터리 입니다.

( 자세한 사항은 DB 테이블을 생성하면서 알아보겠습니다. )


(2) admin.py

Django는 테이블을 GUI 환경에서 관리하는 것이 가능합니다.

그런데 자동으로 모든 테이블이 admin페이지에서 관리할 수 있는 것이 아니고, admin 페이지에 테이블을 반영하기 위해서는 admin.py 파일에 admin 페이지에서 관리 할 모델을 작성해야 합니다.


(3) apps.py

애플리케이션의 설정 내용을 작성하는 파일입니다.

저는 Django가 실행될 때 어떤 파일이 실행되기를 바랐던 적이 있습니다.

그 때 apps.py 파일에 ready() 함수를 작성해서 해결했던 적이 있는데, apps.py 파일의 여러 기능에 대해서는 여기를 참고해주세요 !


(4) models.py

테이블 모델을 작성하는 파일입니다.

( 설문조사 애플리케이션을 구현할 때 사용하므로 그 때 자세히 알아보겠습니다. )


(5) tests.py

테스트 코드를 작성하는 파일입니다.


(6) views.py

Controller에 해당하는 View를 작성하는 파일입니다.





4. Django 서버 실행

지금까지 mysite 프로젝트와 polls 애플리케이션을 생성했습니다.

특별한 내용은 아무것도 작성하지 않았는데, 우선 서버가 잘 실행되는지 확인해보겠습니다.

$ python manage.py runserver




출력되는 URL( http:/127.0.0.1:8000/ )로 브라우저에서 접속해보면 Django의 기본 페이지가 출력됩니다.

Django 기본 포트 번호로 8000을 사용합니다.



** 참고

서버를 실행할 때 --norealod 옵션을 주면, 서버가 실행 중인 상태에서 파일을 변경해도 반영이 되지 않습니다.





5. Admin 페이지

서버를 실행한 상태에서 브라우저에서 http://127.0.0.1:8000/admin 경로로 요청하면, Admin 페이지를 볼 수 있습니다.

그러면 로그인을 해야 하는데, 아직 관리자 계정이 없으므로 계정을 생성해야 합니다.

$ python manage.py migrate

$ python manage.py createsuperuser

관리자 계정을 생성하기 위해서는 먼저, migrate를 해야 합니다.

migrate 명령은 mysite/settings.py 파일의 DATABASE 설정과 애플리케이션 생성할 때 제공되는 migrations에 따라 필요한 테이블을 생성합니다.

migrate를 하면 Users와 Groups 테이블을 Django가 자동으로 생성해주는데, 이는 mysite/settings.py 파일에 django.contrib.auth 애플리케이션이 등록되어 있기 때문입니다.



createsuperuser 명령어를 실행하면, admin 페이지에 로그인 하기 위한 정보들을 입력합니다.




정보들을 입력한 후, 생성한 계정으로 admin 페이지에 로그인을 하면 위와 같이 Groups와 Users 테이블이 생성되어 있는 것을 확인할 수 있습니다.

앞서 말씀드린 것처럼 admin페이지를 통해 GUI환경에서 테이블을 관리할 수 있습니다.





이상으로 프로젝트와 애플리케이션을 생성하여, 각 파일의 역할을 알아보았고, 서버를 실행하는 방법과 Admin 페이지를 로그인하는 방법도 알아보았습니다.

다음 글에서는 Model을 다루는 방법에 대해 알아보겠습니다.


[ 참고 ]

https://docs.djangoproject.com/ko/2.0/intro/