Python

[Django Tutorial] 3. 프로젝트 및 App 생성, settings.py수정(DB연동, Migration), Runserver

Posted 2015. 09. 18 Updated 2017. 06. 14 Views 12116 Replies 0
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

이 글에서는 본격적으로 Django프로젝트와 모듈을 생성하고 최고 관리자 계정을 추가한 뒤, 테스트 서버 데몬을 돌려서 브라우저를 통해 관리자 페이지에 접속하기까지의 과정을 다루도록 하겠습니다.

구체적으로는 django-admin명령으로 뼈대 구조를 생성한 뒤, settings.py에 전역 설정 정보를 입력하고 manage.py의 migration명령을 통해 DB Table을 자동으로 생성하는 방법을 포함합니다.

본문에서 언급하는 manage.py의 사용법에 유의하면서 실습해 보세요!

 

프로젝트 및 App생성

django-admin명령을 사용해서 프로젝트의 뼈대와 필수 요소들을 자동으로 생성할 수 있습니다. 다음 명령들은 이전 글에서 생성한 'myproject'디렉토리 내에서 실행하도록 합니다.

 

프로젝트 생성

이전 글에서 미리 설명 드렸듯이, 앞에 붙어 있는 '(venv)$'는 VirtualEnv를 통해 생성한 샌드박스 내에서 작업중이라는 것을 나타냅니다. 이 표시가 나타나지 않는 경우, 'source ./venv/bin/activate'를 먼저 실행해 주도록 합니다.

'sitebase'는 생성하는 Django프로젝트 이름이며, 임의로 지정해도 됩니다. 단, 이는 실질적인 기능을 수행하는 사이트의 모듈이 아니라 사이트의 공통적인 요소들을 모아놓은 일종의 '플랫폼'의 개념이므로 이에 유의해서 작명을 하도록 합니다. 일반적으로 생각하는 프로젝트의 이름은 뒤에서 진행할 모듈(App)에 사용하는 편이 좋습니다. (Django 디렉토리 구조상 프로젝트와 모듈의 이름이 같아서는 안 됩니다.)

django-admin startproject sitebase

위 명령을 실행하면 현재 디렉토리에 sitebase라는 이름의 디렉토리가 생성될 것입니다.

현재 디렉토리를 프로젝트 루트 디렉토리로 사용할 것이므로 sitebase디렉토리의 내용물을 모두 현재 디렉토리로 옮기고 sitebase디렉토리는 삭제하도록 합니다.

Django를 샌드박스 내에 설치하기 위해 프로젝트 디렉토리를 미리 생성했으므로 귀찮더라도 이 과정을 거쳐야 합니다. (이게 뭐하는건지 잘 이해가 되지 않는 경우, 지난번 글을 참고해 주세요.)

mv sitebase sitebase_tmp
mv sitebase_tmp/* ./
rmdir sitebase_tmp

 

모듈(App) 생성

App은 Django프로젝트(여기서는 sitebase)에 설치되어 특정 기능을 수행하는 사이트의 모듈입니다. 이 모듈의 뼈대도 역시 django-admin명령으로 생성할 수 있습니다.

다음 명령을 통해 'myapp'이라는 이름의 모듈을 생성합니다.

django-admin startapp myapp

 

여기까지 과정을 진행하면 프로젝트 디렉토리는 다음과 같이 구성됩니다. 각 구성요소의 역할을 간단히 설명하면 다음과 같습니다. (일부 구성요소는 생략하였습니다. 실제로는 __init__.py등 추가적인 파일들이 더 존재합니다.)

[myproject]         : 프로젝트 루트 디렉토리
 +- [myapp]         : 모듈(App) 디렉토리
 |   +- admin.py    : 모듈을 Admin모듈과 연동하기 위한 설정
 |   +- models.py   : 모듈에서 사용할 DB Model을 정의
 |   +- views.py    : 모듈의 실질적인 동작을 정의
 +- [sitebase]      : 사이트 공통 플랫폼 디렉토리
 |   +- settings.py : 사이트 전역 설정
 |   +- urls.py     : URL 라우팅 규칙을 정의
 +   +- wsgi.py     : 실제 운용시 웹 서버와 연동하기 위한 WSGI 포트
 +- manage.py       : 사이트 관리를 위한 백엔드 콘솔

 

사이트 전역 설정 (settings.py)

sitebase/settings.py 파일은 사이트 전역에 적용되는 설정 정보를 저장하는 파일입니다.

DB연결 정보, 설치한 모듈의 등록, 언어 및 시간대 설정, Debug/Release스위치 등과 같은 설정을 이 파일에서 일괄적으로 관리합니다.

 

MySQL DB연동 정보 입력

우선, 기본으로 설치되어있는 MySQLDB어댑터가 Django1.8버전에서 제대로 동작하지 않기 때문에 대신 PyMySQL어댑터를 사용하기 위해 상단에 다음 import구문을 추가해 줍니다.

import pymysql
pymysql.install_as_MySQLdb()

파일 하단에 보면 다음과 같이 DATABASES항목이 있습니다. 여기에 다음과 같이 DB커넥션 정보를 입력해 주도록 합니다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '{Database}',
        'USER': '{Username}',
        'PASSWORD': '{Password}',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

 

생성한 모듈(App) 등록

상단의 INSTALLED_APPS에 위에서 생성한 모듈인 'myapp'을 추가해 줍니다.

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    ...
    'django.contrib.staticfiles',
    'myapp',
)

사이트에 새로 모듈을 생성했거나 외부에서 가져와 설치한 경우, 반드시 여기에 등록해 줘야 모듈이 인식되어 사용할 수 있습니다.

 

언어 및 시간대 설정

하단에 보면 LANGUAGE_CODETIME_ZONE항목을 찾을 수 있습니다. 여기에 사용할 언어와 시간대를 지정해 줍니다. 한국어와 서울 시간대를 사용하려면 다음과 같이 입력하도록 합니다.

LANGUAGE_CODE = 'ko-kr'
TIME_ZONE = 'Asia/Seoul'

 

DB Table 생성 (Migration)

앞서 설명 했듯이, manage.py파일은 사이트 관리를 위한 백엔드 콘솔 기능을 지원하는 스크립트입니다. 여기에 다음과 같이 migrate명령을 입력하면 Admin모듈과 설치된 모듈에서 사용하는 Table들을 DB에 자동으로 생성해 줍니다.

./manage.py migrate

아무 이상이 없다면 다음과 같이 Table이 모두 잘 생성되었다는 메시지가 출력됩니다.

migrate.png

반면, 위와 같은 깔끔한 결과화면이 아닌 지저분한 오류메시지가 출력됬다면, Django에서 DB에 접속하는 데 문제가 발생한 경우이므로 settings.pyDATABASES항목에 입력한 정보가 올바른지 다시 한 번 확인하도록 합니다.

 

[TIP]

(이해가 잘 되지 않으면 우선 건너뛰어도 됩니다. 관련 내용은 다음 글에서 다시 자세히 설명합니다.)

DB Table을 생성하는 명령 중에 makemigration도 있는데, 이는 사이트 모듈별로 Model의 변경사항을 반영한 Migration을 생성해 주는 명령입니다.

migrate명령을 실행할 때 모듈에 생성되어 있는 Migration이 없는 경우 자동으로 각 모듈별로 Migration을 생성해 주지만, 이후 모듈의 Model을 수정한 경우 다음 명령을 통해 수동으로 Migration을 생성한 뒤 다시 migrate를 통해 최종적으로 DB에 Table의 변경사항을 반영해야 합니다.

./manage.py makemigration myapp

지금은 이 명령을 실행하면 "No changes detected in app 'myapp'"이라는 메시지가 출력되면서 아무 일도 일어나지 않을 것입니다. 이는 최초 migrate실행시 이미 myapp의 Model에 대한 Migration을 생성했고, 실제 DB의 Table 구조와 일치하기 때문에 반영할 변경사항이 없기 때문입니다.

 

최고 관리자 (Superuser) 등록

createsuperuser명령으로 관리자 페이지에 로그인할 때 사용할 최고 관리자 계정을 생성해줍니다. 이는 브라우저를 통해 관리자 페이지에 접속할 때 로그인할 계정입니다.

./manage.py createsuperuser

 

개발용 서버 데몬 구동

Django에서는 개발 과정에서 편리하게 사용할 수 있도록 간단한 서버 데몬을 지원합니다. 역시 manage.py를 통해 다음과 같이 runserver 명령을 입력해서 데몬을 실행할 수 있습니다.

./manage.py runserver

기본적으로 8000번 포트를 통해 동작하며, 다른 포트를 지정하려는 경우 다음과 같이 파라미터로 지정해 주면 됩니다.

./manage.py runserver 4567

'192.168.0.100:4567'와 같이 IP주소를 함께 명시해 줄 수도 있습니다. 특히, Localhost가 아닌 외부에서 데몬에 접속할 수 있도록 하려면 다음과 같이 IP주소로 0.0.0.0을 지정해 줘야 합니다. LAN영역의 다른 Host로부터 접속하여 동작을 시험하려면 반드시 이렇게 지정해 줘야 합니다. (스마트폰 등에서 접속해서 UI등이 올바르게 동작하는지 여부를 확인해야 할 경우 요긴하게 사용할 수 있습니다.)

./manage.py runserver 0.0.0.0:8000

데몬을 구동하면 다음과 같이 접속 주소가 출력됩니다.

runserver.png

이 개발용 서버 데몬은 프로젝트에 포함된 파일들을 지속적으로 모니터링하고 있다가, 변경사항이 감지되면 자동으로 데몬을 재시작해 줍니다. 잦은 변경과 테스트가 수반되는 개발과정에서 개발자를 한결 편하게 해 주는 기능이라고 할 수 있습니다.^^

서버 데몬을 띄운 상태에서 http://localhost:8000 으로 접속하면 다음과 같이 기본 메인 페이지를 볼 수 있습니다.

main page.png

http://localhost:8000/admin 으로 접속하면 관리자 페이지 로그인창이 나타나며, 여기에 위에서 생성한 Superuser계정으로 로그인하면 다음과 같이 관리자 페이지를 볼 수 있습니다.

admin page.png

아직 아무것도 추가하지 않아서 위와 같이 Admin모듈에 포함되어 있는 테이블들만 관리자 페이지에 나타날 것입니다.

서버 데몬을 종료하려면 [Ctrl]+[C]키를 누르도록 합니다.

 

지금까지 Django프로젝트와 App을 생성하고 세팅한 뒤, 서버 데몬을 구동하는 방법에 대해 실습해 보았습니다. 실제 코딩은 아무 것도 하지 않았지만 메인 페이지와 관리자 페이지가 뙇! 하고 생성되는 현상을 직접 목격하셨을 것입니다.

하지만 내가 원하는 사이트의 기능은 하나도 들어가 있지 않으니, 이제부터 본격적으로 그 기능들을 구현해 나가야겠죠?ㅎㅎ

아쉽지만 이번 글은 여기에서 마치고, 이어지는 다음 글에서부터 본격적으로 URL Router를 구성하고 View와 연동하는 방법, DB Model을 설계하고 백엔드 및 프론트엔드와 연동하는 방법 등에 대해 하나씩 천천히 다루도록 하겠습니다.

 


Articles

1 2 3 4 5 6 7