안녕하세요. 스쿨오브웹의 이상희입니다.

오래된 포스트를 모두 삭제하고 Django (이하 장고) 를 주제로 한 강좌를 시작하려고 했을때 어떤 소재를 선택 할지 많이 고민 했습니다. 파이썬 기반의 웹 프레임워크 로써 2003년에 Lawrence Journal-World newspaper에서 사용하기 위해 개발되어 13년이 넘도록 파이썬 유저들에게 사랑 받고 있는 장고는 튜토리얼 부터 시작하여 각종 매뉴얼에 이르기까지 방대한 양을 자랑하고 있습니다. 그 중에서도 djangoproject.com 에서 제공하고 있는 강좌와 매뉴얼은 초보자 부터 전문가에게 까지 필요한 각종 정보를 가지고 있는 장고 바이블이라고 할 수 있습니다. 하지만 한가지 아쉬운 점이 있다면 장고 걸스와 같은 한국어 버전이 없다는 점입니다. 그래서 장고 개발 환경 위한 서버 구축과 같은 중급 강좌보다 장고를 한번도 접해 보지 못 한 초보자들을 위해서 djangoproject.com 의 “Writing your first Django app”의 번역을 시작 하고자 결정 했습니다. 보다 더 빠른 이해를 위해 의역과 필자의 설명을 추가하도록 하겠습니다.

예제를 통해 장고를 배워 봅시다.

이 강좌에서는 간단한 투표 어플리케이션을 만들어 보도록 하겠습니다.

이 어플리케이션은 2개의 파트로 구성 됩니다:

  • 일반 유저가 투표 현황을 보며 투표를 할 수 있는 퍼블릭 사이트.
  • 어드민 유저가 투표 항목을 추가, 변경 또는 삭제 할 수 있는 어드민 사이트.

장고가 이미 설치 되어 있다는 가정하에 강좌를 시작하겠습니다. 만약 아직 설치가 되어 있지 않다면 Django 설치를 참고하여 주십시오. 다음 명령어로 설치된 장고 버전을 확인 할 수 있습니다.

$ python -c "import django; print(django.get_version())"

만약 장고가 설치 되어 있다면 설치된 버전이 출력 될 것 입니다. 만약 설치 되어 있지 않다면 “No module named django” 와 같은 메세지가 출력 됩니다.

이 강좌는 Django 1.10과 Python 3.4와 이후 버전을 기준으로 작성 되었습니다. 만약 사용하시는 장고 버전과 맞지 않다면 페이지 오른쪽 하단의 버전 버튼을 변경하거나 설치된 장고를 최신 버전으로 업데이트 하여 주십시오. 만약 아직 파이썬 2.7 을 사용하고 계시다면 설명에 맞게 예제 코드를 조금 수정할 필요가 있습니다.

장고 설치하기를 참조하여 오래된 버전을 삭제하고 새로운 버전을 설치하는 방법을 확인하여 주십시오.

도움을 받을 수 있는 곳:

이 강좌를 보면서 문제가 있거나 도움이 필요하시면 django-users 에게 메세지를 남기시거나 #django on irc.freenode.net 에서 도움을 줄 수 있는 다른 장고 유저와 채팅을 하여 주십시오.

프로젝트 만들기

만약 장고를 처음으로 사용하신다면, 먼저 약간의 초기 셋업을 해야 합니다. 초기 셋업이란 장고의 셋업 파일 자동 생성 기능을 사용하여 장고 인스턴스 설정 파일, 데이터베이스 구성 파일, 장고 어플리케이션 옵션 셋팅등의 코드를 생성하여 장고 프로젝트를 만드는 것 입니다.

터미널이나 커맨드 창을 열어 프로젝트 파일을 저장하고 싶은 디렉토리로 이동한 후, 다음 명령어를 실행하여 주십시오.

$ django-admin startproject mysite

이 명령어는 현재 디렉터리에 mysite 라는 이름의 디렉터리를 만듭니다. 만약 생성에 실패하였다면, django-admin 실행 문제를 참고하여 주십시오.

Note

프로젝트의 이름을 지을 때 파이썬이나 장고 컴포넌트의 이름은 피해 주십시오. 특히 django (장고 어플리케이션 이름) 나 test(디폴트 파이썬 패키지 이름) 등의 이름의 사용은 피해 주십시오.

이 코드는 어디에 저장 되어야 하는가?

만약 당신이 모던 프레임워크가 아닌 오래된 플래인 PHP를 사용한 경험밖에 없다면, /var/www 와 같은 아파치 웹서버의 document root 디렉터리에 코드를 저장 하였을 것 입니다. 장고는 그런 방법을 사용하지 않습니다. 웹서버의 루트 디렉터리에 파이썬 파일을 저장하는 것은 그다지 좋은 생각이 아닙니다. 다른 사람이 웹을 통해 모든 코드를 볼 수 있기 때문입니다. 이것은 보안상의 문제가 되기도 합니다.

모든 코드를 /home/mycode와 같이 웹서버의 루트 디렉터리 밖에 저장하는 것이 좋습니다.

startproject 가 만든 코드를 한번 살펴보죠:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

이 파일들은:

  • 최상 루트 디렉터리인 mysite/ 는 프로젝트 디렉터리를 담고 있는 단순한 컨테이너일 뿐 입니다. 이 디렉터리의 이름은 장고 어플리케이션에게는 아무 상관이 없으며 어떤 이름으로도 변경 가능 합니다.
  • manage.py: 장고 프로젝트와 다양한 방법으로 커뮤니케이션 할 수 있는 커맨드 라인 유틸리티 입니다. manage.py 에 대해서 조금 더 알고 싶으시면 django-admin and manage.py 을 참고 하여 주십시오.
  • 두번째 단의 mysite/ 디렉터리는 실제 프로젝트의 파이썬 패키지 입니다. 디렉터리의 이름이 파이썬 코드를 임포트할 때 사용할 실제 파이썬 패키지 이름 입니다 (e.g. mysite.urls).
  • mysite/__init__.py: 아무것도 들어 있지 않은 빈 파일이며 파이썬 에게 현재 디렉터리가 파이썬 패키지임을 알려 줍니다. 파이썬 초보자이시면 more about packages 을 참고 하여 주십시오.
  • mysite/settings.py: 장고 프로젝트의 셋팅과 설정이 포함된 파일 입니다. Django settings 에서 자세한 사용 방법을 알 수 있습니다.
  • mysite/urls.py: 장고 프로젝트 안의 URL을 선언하는 곳 입니다. 장고 사이트의 컨텐츠 목록입니다. URL dispatcher 에서 자세한 내용을 확인하여 주십시오.
  • mysite/wsgi.py: WSGI 프로토콜을 사용하는 웹서버가 프로젝트의 페이지를 보여주기 위하여 가장 먼저 사용하는 파일 입니다. 자세한 내용은 How to deploy with WSGI 을 참고 하여 주십시오.

개발용 서버 사용하기

그렇다면 장고 프로젝트가 잘 움직이는지 확인하도록 하죠. 현재 manage.py 가 있는 디렉터리에 있지 않다면 manage.py 가 있는 디렉터리로 이동하여 주십시오. 이동하였다면 다음의 명령어를 실행하여 주십시오.

$ python manage.py runserver

다음과 같은 메세지가 출력되는 것을 볼 수 있을 겁니다.

Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

August 19, 2016 - 15:50:53
Django version 1.10, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Note

“unapplied migrations” 경고 메세지는 잠깐 무시해 주십시오. 데이터베이스는 조금 뒤에 다루도록 하겠습니다.

지금 100% 파이썬으로만 만들어진 라이트 웨이트 장고 개발용 웹 서버를 처음으로 실행해 봤습니다. 이 웹 서버는 프로덕션으로 디플로이하기 전까지 아파치 서버와 같은 프로덕션 서버를 구축하지 않고도, 개발자가 빠른 개발에만 전념할 수 있도록 장고 프레임워크에 포함된 웹 서버 입니다.

이 서버는 개발자를 위한 개발용 서버이므로 프로덕션 환경에서 절대 사용하지 마십시오. (우리가 하는 일은 웹 프레임워크를 만드는 것이지 웹 서버를 만드는게 아닙니다.)

이제 서버가 실행되었으니 http://127.0.0.1:8000/ 주소를 웹 브라우져의 주소창에 입력하여 주십시오. 라이트 블루 파스텔 색의 “Welcome to Django” 페이지가 보일 것 입니다. 축하합니다. 성공하였습니다!

포트 바꾸기

runserver 명령어는 디폴트로 8000번 포트의 내부 IP (127.0.0.1) 에 웹 서버를 실행합니다.

만약 서버의 포트를 변경하고 싶으면 포트 번호를 파라메터로 명령어에 추가하여 주십시오. 예를 들면 다음의 명령어는 8080 포트에 서버를 실행합니다.

$ python manage.py runserver 8080

만약 서버의 IP를 변경하고 싶으면 포트 번호와 함께 파라메터로 입력하여 주십시오. 모든 퍼블릭 IP의 8000번 포트에서 서버를 실행하고자 하면 다음 명령어를 실행해 주십시오. 장고 사이트를 만든 후에 같은 네트워크상의 다른 사람들에게 자랑하고 싶을 때 사용하세요.

$ python manage.py runserver 0.0.0.0:8000

개발용 서버에 관한 모든 문서는 runserver 를 참조하여 주십시오.

runserver의 자동 리로딩 기능

개발용 서버는 필요할 때 마다 자동으로 파이썬 코드를 리로딩 합니다. 코드를 변경한 후에 변경된 내용을 적용하기 위해 서버를 재기동 하지 않아도 됩니다. 하지만 새로운 파일을 추가했을 때는 서버가 자동으로 재기동 하지 않습니다. 이런 경우에는 수동으로 재기동할 필요가 있습니다.