장고 프레임워크를 사용하여 웹 개발을 하다 보면, 프로젝트와 애플리케이션이란 용어가 많이 나옵니다.
장고에서는 이 두 가지 용어에 대해 일반적인 의미와는 조금 다르게, 용어의 개념을 웹 서버 개발 측면에서 좀 더 구체화하여 사용하고 있습니다.
프로젝트란, 개발 대상이 되는 전체 프로그램을 의미하며, 프로젝트를 몇 개의 기능 그룹으로 나누었을 때, 프로젝트 하위의 서브 프로그램을 애플리케이션이라고 말합니다.
즉 서브 프로그램인 애플리케이션을 개발하고, 이들을 모아서 프로젝트 개발을 완성하게 되는 것입니다. 이런 개념으로 프로젝트 디렉토리와 애플리케이션 디렉토리를 구분하고,
코딩하는 파일도 프로젝트 파일인지 애플리케이션 파일인지 구분하여 적절한 위치에 저장해야 합니다.
이런 개념에서 장고가 중요한 점은 하나의 애플리케이션이 여러 개의 프로젝트에 포함될 수 있기 때문에, 애플리케이션을 한 번만 개발하고 이를 다른 프로젝트에
재사용하여 개발의 생산성을 높일 수 있다는 것입니다. 또한 애플리케이션 단위로 이들을 모아 프로젝트로 만들고, 프로젝트를 모아 더 큰 프로젝트를 만드는 방식으로,
계층적인 웹 프로그램 개발이 가능하는 장점이 있습니다.
1. Django 프로젝트의 뼈대 디렉토리
< 프로젝트 뼈대의 최종 디렉토리 모습>
위 그림에서 소개한 디렉토리 및 파일은 뼈대에 해당하는 것으로, 이외에도 프로젝트가 완성된 후에는 templates, static, logs 등의 디렉토리가 더 필요합니다. 또한 개발자가 필요하다고 판단되면 프로젝트 개발을 진행하면서 임의로 추가해도 무방합니다. 각 디렉토리 및 파일의 용도는 다음과 같습니다.
항목 |
설명 |
ch3 |
프로젝트 관련 디렉토리 및 파일을 모아주는 최상위 디렉토리입니다. 보통 settings.py 파일의 BASE_DIR 항목으로 지정됩니다. |
db.sqlite3 |
SQLite3 데이터베이스 파일입니다. db 디렉토리를 만들고 그 하위에 두기도 합니다. |
manage.py |
장고의 명령어를 처리하는 파일입니다. |
mysite |
프로젝트명으로 만들어진 디렉토리입니다. 프로젝트 관련 파일들이 들어있습니다. |
__init__.py |
디렉토리에 이 파일이 있으면 파이썬 패키지로 인식합니다. |
settings.py |
프로젝트 설정 파일입니다. |
urls.py |
프로젝트 레벨의 URL 패턴을 정의하는 최상위 URLconf입니다. 보통은 하위 애플리케이션 디렉토리마다 urls.py파일이 또 있습니다. |
wsgi.py |
Apache와 같은 상용 웹 서버와 WSGI 규격으로 연동하기 위한 파일입니다. |
polls |
애플리케이션명으로 만들어진 디렉토리입니다. 해당 애플리케이션 관련 파일들이 들어 있습니다. |
admin.py | Admin 사이트에 모델 클래스를 등록해주는 파일입니다. |
migration | 데이터베이스 변경사항을 관리하기 위한 디렉토리입니다. 데이터베이스에 추가, 삭제, 변경 등이 발생하면 변경 내역을 기록한 파일들이 위치합니다. |
models.py | 데이터베이스 모델 클래스를 정의하는 파일입니다. |
tests.py | 단위 테스트용 파일입니다. |
views.py | 뷰 함수를 정의하는 파일입니다. 함수형 뷰 및 클래스형 뷰 모두 이 파일에 정의합니다. |
2. Django 프로젝트 생성
Step 1. 가장 먼저 아래의 명령으로 mysite라는 프로젝트를 만들도록 하겠습니다.
$ django-admin.py startproject mysite
mysite라는 프로젝트를 생성하고 현재 디렉토리를 확인해보면 mysite라는 디렉토리가 생겼음을 확인할 수 있습니다. 또한, mysite라는 프로젝트 안에 또다른 mysite 디렉토리가 있음을 알 수 있습니다. 하위 mysite 디렉토리는 프로젝트 디렉토리이고, 상위 mysite 디렉토리는 프로젝트 관련 디렉토리 / 파일을 모으는 역할만 하는 디렉토리입니다. 상위 mysite 디렉토리는 특별한 의미를 가지고 있지 않기 때문에 이름을 변경해도 무방합니다. 하위의 프로젝트 디렉토리 이름과 동일해서 혼동할 수 있으므로, 이름을 변경해보도록 하겠습니다.
Step 2. 디렉토리 이름 혼동 방지를 위해 디렉토리 이름을 변경해줍니다.
$ mv mysite ch3
Step 3. Application 생성하기
polls라는 애플리케이션을 만드는 명령을 실행합니다. 아래의 명령을 입력하면 장고가 polls라는 애플리케이션 디렉토리와 그 하위에 필요한 파일들을 생성해줍니다. 생성된 파일들의 이름을 눈여겨 보도록 합니다.
$ cd ch3/
$ python manage.py startapp polls
모든 애플리케이션 개발에 필요한 파일들을 장고가 생성해주고, 개발자들은 그 내용을 채워넣기만 하면 됩니다. 즉, 개발자들이 어떤 파일들을 만들어야 할지 고민할 필요가 없어졌습니다. 어느 파일에 어떤 내용을 채워야 할지는 이름만 봐도 짐작이 가겠지만, 나중에 자세히 설명하도록 하겠습니다.
Step 4. 데이터베이스 변경사항 반영하기
데이터베이스에 변경사항이 있을 때 이를 반영해주는 명령입니다. 데이터베이스는 디폴트로 SQLite3 데이터베이스 엔진을 사용하는 것으로 지정합니다. 물론 다른 데이터베이스 엔진으로 변경할 수도 있습니다.
그런데, 아직 데이터베이스 테이블을 만들지도 않았는데, 왜 이 명령이 필요할까요? 장고는 웹 프로젝트 개발 시 반드시 사용자와 사용자의 그룹 테이블이 필요하다고 가정하고 설계되었습니다. 그래서 우리가 테이블을 만들지 않았더라도, 사용자 그룹 테이블을 만들어주기 위해서 프로젝트 개발 시작 시점에 이 명령을 실행하는 것입니다. 명령을 실행하면 migrate 명령에 대한 로그가 보이고, 실행 결과로 SQLite3 데이터베이스 파일인 db.sqlite3 파일이 생성된 것을 확인할 수 있습니다.
$ cd ch3/
$ python manage.py migrate
위의 명령을 실행하면 ch3 디렉토리에 db.sqlite3 파일이 생성된 것을 확인할 수 있습니다.
Step 5. 현재까지의 작업 확인하기
지금까지 프로젝트의 뼈대에 해당하는 프로젝트 디렉토리, 애플리케이션 디렉토리를 비롯해 관련 파일들 그리고 사용자 및 사용자 그룹 테이블을 만들었습니다. 이러한 작업만으로도 장고가 제공해주는 웹 페이지와 테이블을 확인할 수 있습니다.
확인을 위해서 웹 서버를 실행하고, 그 웹 서버에 접속해보겠습니다. 장고에서는 개발 과정 도중에 현재 상태를 확인해볼 수 있도록 runserver라고 하는 간단한 테스트용 웹 서버를 제공해줍니다. 웹 서버를 실행하기 위해서 다음 명령을 입력합니다.
$ cd ch3/
$ python manage.py runserver 127.0.0.1:8000
runserver가 정상적으로 실행되었다면, 이제 웹 브라우저를 열고 주소창에 다음과 같이 입력합니다.
http://127.0.0.1:8000
다음 화면처럼 장고의 환영 메시지가 나타나면 정상적으로 실행된 것입니다.
References
'Django로 배우는 쉽고 빠른 웹 개발', 김석훈, 한빛미디어'나의 첫 번째 Django 프로젝트'