[Two Scoops of Django] 3장. 어떻게 장고 프로젝트를 구성할 것인가

guava·2021년 9월 2일
0

Two Scoops of Django

목록 보기
3/12
post-thumbnail

Two Scoops of Django 3.x를 읽고 정리한 글입니다.

프로젝트 레이아웃은 코어 개발자 사이에서도 의견이 분분하다. 본 장에서는 가장 일반적으로 사용하는 방식을 소개한다.

3.1. 기본 프로젝트 레이아웃 (Django 3's)

다음은 기본적으로 제공되는 프로젝트 구성 방법이다.

django-admin startproject mysite
cd mysite
django-admin startapp my_app
mysite/
├── manage.py
├── my_app
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
└── mysite
   ├── __init__.py
   ├── asgi.py
   ├── settings.py
   ├── urls.py
   └── wsgi.py

3.2. 우리가 선호하는 프로젝트 레이아웃

=> (저자가 추천하는 프로젝트 레이아웃)

<repository_root>/  # Top level: 프로젝트 최상위의 절대 루트로서 <configuration_root>, <django_project_root>외에도 README.md, manage.py, .gitignore, requirments등이 포함되어있다. 또한 배포 및 실행에 필요한 파일들이 위치한다.
├── <configuration_root>/ # Second level: settings모듈과 base URLConf(urls.py)가 존재한다. `django-admin startproject`명령어를 사용할 경우에는 프로젝트 루트 내부에 존재하므로 이를 Repository Root로 이동해야 한다.
├── <django_project_root>/ # Second level: 실제 프로젝트 루트를 의미한다. `django-admin startproject`명령을 통해 프로젝트를 구성할 경우 <repository_root>에서 이 명령을 실행하면 된다.

3.3. Sample Project Layout

다음은 다양한 브랜드의 아이스크림의 맛을 평가하기 위한 아이스크림 평가 프로젝트이다.

icecreamratings_project
├── config/ # 프로젝트 전반의 settings파일, urls.py, wsgi.py모듈이 존재한다.
│   ├── settings/
│   ├── __init__.py
│   ├── asgi.py
│   ├── urls.py
│   └── wsgi.py
├── docs/ # 개발자를 위한 프로젝트 문서 (25장 참조)
├── icecreamratings/ # 프로젝트의 <django_project_root>
│   ├── media/  # Development only!, 개발용 미디어 디렉토리 (사용자가 올리는 사진 등)
│   ├── products/ # 아이스크림 브랜드 관리하고 보여주는 앱
│   ├── profiles/ # 이용자 프로필을 관리하고 보여주는 앱
│   ├── ratings/ # 이용자가 매긴 점수를 관리하는 앱
│   ├── static/ # CSS, 자바스크립트 등의 정적파일 위치
│   └── templates/ # 시스템 통합 템플릿 파일 저장
├── .gitignore # 깃이 처리하지 않을 파일과 디렉터리
├── Makefile # 배포작업 및 매크로가 포함된 파일
├── README.md # 개발자를 위한 프로젝트 문서 (25장 참조)
├── manage.py # 내용 수정하지 말기 (5장 참조)
└── requirements.txt # django 3.x를 포함한 프로젝트에 필요한 python패키지 목록.

3.4. virtualenv는?

  • virtualenv환경은 독립된 다른 공간에 관리한다. (pyenv아나콘다를 사용하면 별도의 공간에서 관리된다.)
~/proejcts/icecreamratings_project/ # project 경로
~/.env/icecreamratings/ # env 경로

주의: 내가 경험없는 코더라는 것을 알리기 싫다면, python의 venv나 node_modules등을 git에 추가하지 말자. (.gitignore등을 활용해서 제외해주자)

3.5. startproject를 넘어

  • django의 startproject명령어를 이용하면 간단히 프로젝트 템플릿을 만들고 사용할 수 있다.
  • 그러나 프론트엔드나 배포 도구 등이 복잡해짐에 따라 startproject가 아닌 더 강력한 템플릿 도구(Cookiecutter 등)가 필요할 수 있다.

3.5.1. 쿠키커터를 이용한 프로젝트 구성

쿠키커터의 동작 방법

  1. project_name값 등의 일련의 값을 입력받는다.
  2. 입력된 값에 따라 프로젝트 구성에 필요한 파일을 만든다.

다음은 쿠키커터를 실행하는 방법이다.

# pyenv가 설치된 환경에서 진행하였다.
# django 3.x
$ pip install cookiecutter
$ cookiecutter https://github.com/pydanny/cookiecutter-django
You've downloaded /home/quique/.cookiecutters/cookiecutter-django
􏱊→ before.Isitokaytodeleteandre-downloadit?[yes]:no Do you want to re-use the existing version? [yes]: yes project_name [My Awesome Project]: icecreamratings project_slug [icecreamratings]:
description [Behold My Awesome Project!]: Support your Ice Cream 􏱊→ Flavour!
author_name [Daniel Roy Greenfeld]:
<snip for brevity>
$ cd icecreamratings
$ pyenv local icecreamratings
$ pyenv versions
$ pip install -r requirements/local.txt
$ git init .
$ pycharm .

위와같이 설정하면 쿠키커터를 실행한 디렉터리에 프로젝트가 생성된다.
구조를 보면 3.2, 3.3절에서 제안한 레이아웃 샘플과 유사하며 설정, 요구사항, 시작문서, 시작 테스트 모음 등이 포함된다.

3.6. 또다른 startproject의 대안

  • 프로젝트 레이아웃은 무조건 올바른 방식이란 것이 없다.
  • 본 장에서 제안한 구성과 다르더라도 프로젝트의 구성요소(docs, templates, apps, settings)가 문서화가 되어있다면 문제없다.
  • 이 외에도 cookiecutter-django-vue-graphql-aws등을 살펴보자. 우리가 좋아하는 기술을 결합해준다.

3.7. 요약

  • 프로젝트 구성은 개발자 또는 개발자 그룹마다 다른 이용 모습을 보이기도 한다.
  • 작은 팀에서효과를 내던 구성이라도 분산된 자원을 공유하는 큰 팀에서는 적용되지 않을 수 있다.
  • 핵심은 어떤 구성을 택하더라도 명확히 문서로 남겨야 한다는 것이다.

0개의 댓글