장고 프로젝트를 진행 중에 Two scoops of Django 라는 책을 접하게 되었는데
그 책에서 장고프로젝트를 시작하는 방법으로 cookie-cutter을 소개하는 것을 보아 기존의 프로젝트 생성 방법과는 어떤 점이 다른지를 한번 알아보고자 한다.
[기존의 방법]
기존에 우리는 가상 환경을 만들고, pip install Django 등을 설치해서 $django-admin startproject 같은 방법을 사용해 프로젝트를 생성하곤 한다.
첫 번째 방법 $django-admin startproject [projectname]
해당 방법을 통한 프로젝트 생성은
다음과 같이 생성이 되게 된다.
settings.py 와 같은 파일이 들어가 있는 폴더가 projectname과 같은 폴더로 생성되어 만들어지는 것을 볼 수 있다.
*app의 생성은 manage.py 와 같은 디렉터리 레벨에 생성된다.
두 번째 방법 $django-admin startproject [projectname] .
. 에 집중하면, 이 명령은 현재 폴더를 기준으로 생성하겠다는 의미를 가진다.
settings.py의 경로 등은 첫 번째와 달라진 바가 없지만, 내가 명령을 실행한 바로 그 폴더가 프로젝트의 시작 폴더가 된다는 점이 첫 번째 방법과 다르다.
세 번째 방법 $django-admin startproject config .
이 방법은 점프 투 장고에서도 소개하는 방법인데, 현재 폴더를 프로젝트 폴더로 하되 settings.py 와 같은 파일들은 config/ 폴더 이하에서 관리하겠다는 소리이다.
django-admin을 통한 방법은 요 세 가지 정도로 마무리하도록 하고..
[cookie-cutter 사용]
4번째 방법 cookiecutter
다음 방법은 cookie-cutter을 통한 방법을 소개하려고 한다.
https://github.com/cookiecutter/cookiecutter-django#cookiecutter-django
해당 사이트를 들어가야만 무언가를 할 수 있는 것은 아니지만, 사용하기 전에 한 번쯤 들어가 readme.md를 읽어보는 것을 추천한다.
사용방법은
$ pip install "cookiecutter>=1.7.0"
$ cookiecutter https://github.com/cookiecutter/cookiecutter-django
를 치게 되면 터미널 환경에 질문이 하나씩 나오게 된다.
해당 부분에서 project_slug라는 것을 물어보는데, https://github.com/audreyfeldroy/cookiecutter-pypackage/issues/487
이 분의 답변에 의하면 정규화된 프로젝트 이름 정도로 볼 수 있겠다. 해당 값은 프로젝트 폴더 이름으로 생성된다.
이 외에도
project_name [My Awesome Project]: projectname
project_slug [projectname]: projectslug
description [Behold My Awesome Project!]: dongd's project
author_name [Daniel Roy Greenfeld]: dongd
domain_name [example.com]: test.com
email [dongd@example.com]:
version [0.1.0]:
Select open_source_license:
1 - MIT
2 - BSD
3 - GPLv3
4 - Apache Software License 2.0
5 - Not open source
Choose from 1, 2, 3, 4, 5 [1]: 5
timezone [UTC]: UTC+9
windows [n]: n
use_pycharm [n]: y
use_docker [n]: n
Select postgresql_version:
1 - 14
2 - 13
3 - 12
4 - 11
5 - 10
Choose from 1, 2, 3, 4, 5 [1]: 1
Select cloud_provider:
1 - AWS
2 - GCP
3 - None
Choose from 1, 2, 3 [1]: 1
Select mail_service:
1 - Mailgun
2 - Amazon SES
3 - Mailjet
4 - Mandrill
5 - Postmark
6 - Sendgrid
7 - SendinBlue
8 - SparkPost
9 - Other SMTP
Choose from 1, 2, 3, 4, 5, 6, 7, 8, 9 [1]: 1
use_async [n]: n
use_drf [n]: n
Select frontend_pipeline:
1 - None
2 - Django Compressor
3 - Gulp
Choose from 1, 2, 3 [1]: 1
use_celery [n]: n
use_mailhog [n]: n
use_sentry [n]: n
use_whitenoise [n]: n
use_heroku [n]: n
Select ci_tool:
1 - None
2 - Travis
3 - Gitlab
4 - Github
Choose from 1, 2, 3, 4 [1]: 4
keep_local_envs_in_vcs [y]: y
debug [n]: y
이런 많은 것들을 물어보는데, 그만큼 폴더 생성 구조도 디테일하게 생성된다.
아래 접은 글 누르시면 전체 구조를 볼 수 있어요
폴더구조 전체보기
odroid@odroid:~/Django_space/project4$ tree -L 5
.
└── projectslug
├── CONTRIBUTORS.txt
├── LICENSE
├── README.md
├── config
│ ├── __init__.py
│ ├── settings
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── local.py
│ │ ├── production.py
│ │ └── test.py
│ ├── urls.py
│ └── wsgi.py
├── docs
│ ├── Makefile
│ ├── __init__.py
│ ├── conf.py
│ ├── howto.rst
│ ├── index.rst
│ ├── make.bat
│ ├── pycharm
│ │ ├── configuration.rst
│ │ └── images
│ │ ├── 1.png
│ │ ├── 2.png
│ │ ├── 3.png
│ │ ├── 4.png
│ │ ├── 7.png
│ │ ├── 8.png
│ │ ├── f1.png
│ │ ├── f2.png
│ │ ├── f3.png
│ │ ├── f4.png
│ │ ├── issue1.png
│ │ └── issue2.png
│ └── users.rst
├── locale
│ └── README.rst
├── manage.py
├── projectslug
│ ├── __init__.py
│ ├── conftest.py
│ ├── contrib
│ │ ├── __init__.py
│ │ └── sites
│ │ ├── __init__.py
│ │ └── migrations
│ ├── static
│ │ ├── css
│ │ │ └── project.css
│ │ ├── fonts
│ │ ├── images
│ │ │ └── favicons
│ │ └── js
│ │ └── project.js
│ ├── templates
│ │ ├── 403.html
│ │ ├── 404.html
│ │ ├── 500.html
│ │ ├── account
│ │ │ ├── account_inactive.html
│ │ │ ├── base.html
│ │ │ ├── email.html
│ │ │ ├── email_confirm.html
│ │ │ ├── login.html
│ │ │ ├── logout.html
│ │ │ ├── password_change.html
│ │ │ ├── password_reset.html
│ │ │ ├── password_reset_done.html
│ │ │ ├── password_reset_from_key.html
│ │ │ ├── password_reset_from_key_done.html
│ │ │ ├── password_set.html
│ │ │ ├── signup.html
│ │ │ ├── signup_closed.html
│ │ │ ├── verification_sent.html
│ │ │ └── verified_email_required.html
│ │ ├── base.html
│ │ ├── pages
│ │ │ ├── about.html
│ │ │ └── home.html
│ │ └── users
│ │ ├── user_detail.html
│ │ └── user_form.html
│ ├── users
│ │ ├── __init__.py
│ │ ├── adapters.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── context_processors.py
│ │ ├── forms.py
│ │ ├── migrations
│ │ │ ├── 0001_initial.py
│ │ │ └── __init__.py
│ │ ├── models.py
│ │ ├── tests
│ │ │ ├── __init__.py
│ │ │ ├── factories.py
│ │ │ ├── test_admin.py
│ │ │ ├── test_forms.py
│ │ │ ├── test_models.py
│ │ │ ├── test_urls.py
│ │ │ └── test_views.py
│ │ ├── urls.py
│ │ └── views.py
│ └── utils
│ ├── __init__.py
│ └── storages.py
├── pytest.ini
├── requirements
│ ├── base.txt
│ ├── local.txt
│ └── production.txt
├── setup.cfg
└── utility
├── install_os_dependencies.sh
├── install_python_dependencies.sh
├── requirements-bionic.apt
├── requirements-bullseye.apt
├── requirements-buster.apt
├── requirements-focal.apt
├── requirements-jessie.apt
├── requirements-stretch.apt
├── requirements-trusty.apt
└── requirements-xenial.apt
27 directories, 98 files
대단하지 않나요,, 좀 물어보는게 많아서 귀찮기는 해도 확실하게 만들어 주기는 합니다.
특히 배포용과 개발용 세팅등을 나누는 작업을 나중에 하기보다 cookiecutter은 자신이 알아서 나눠주니 때문에 나중에 오류가 생길일도 훨씬 적겠죠
이 때문에 확장하기에 나중에 들일 노력이 상당히 줄기는 할 것 같습니다.
하지만 그만큼 필요한 것과 필요없는 것을 알고 있어야 문제없이 사용할 수 있을 것 같네요.
'개발 이슈,해결법' 카테고리의 다른 글
[jupyter notebook] 화면 넓게 설정하는 법 (0) | 2022.06.10 |
---|---|
[Django] 장고 user 모델 접속 로그 구현 (0) | 2022.05.30 |
[GCP] 프리티어? 평생무료? 기존유저는 설정이 안되는건가 (1) | 2022.05.24 |
[POSTMAN] 403 Fobbiden error (0) | 2022.05.18 |
[git] 터미널에서 git push Error: connect ECONNREFUSED /run/user/1000/vscode-git-000000000.sock (1) | 2022.01.18 |