
해당 포스팅은 유투버 Bucky의 『Pro Django Tutorial』 1강의 내용을 바탕으로 작성 했습니다.
동영상 바로가기
동영상 속 깃헙 바로가기
django-admin startproejct project
mv project Core
'project'라는 이름으로 장고 프로젝트를 생성한 뒤,
실제 사용할 프로젝트 이름으로 디렉토리 이름을 변경해 준다.
이를 통해 로컬 환경에서는 개발자가 이해하는 프로젝트 이름을 사용하고
동시에 모든 conf 파일들 에서는 'project'라는 직관적인 이름을 사용할 수 있다.

괜히 git 연결 테스트 한다고 .gitignore 없이 푸시 한번 했다가
쓸데없는 폴더가 올라가서 지운다고 고생하기 전에
프로젝트 생성 직후에 생성해주는 것이 옳다.
다음은 장고 프로젝트에 적용하는 스탠다드 .gitignore 리스트 이다.
펼쳐서 확인# Backup files
*.bak
# Distribution / packaging
*.egg
*.egg-info/
*.manifest
*.spec
.Python build/
.eggs/
.installed.cfg
develop-eggs/
dist/
downloads/
eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
# Django
*.log
*.pot
*.pyc
/staticfiles
__pycache__
db.sqlite3
media
# Environments
.venv
/.env
/local
ENV/
env.bak/
env/
venv
venv.bak/
venv/
# IDEs
.DS_Store
.idea
.vscode
# Installer logs
pip-delete-this-directory.txt
pip-log.txt
# mypy
.mypy_cache
# pyenv
.python-version
# pytest
.pytest_cache
# Python
*$py.class
*.py[cod]
# Unit test / coverage reports
*.cover
.cache
.coverage
.coverage.*
.hypothesis/
.pytest_cache/
.tox/
coverage.xml
htmlcov/
nosetests.xml
.rst(reStrunctered Text) 형식으로 리드미 파일을 생성한다.
아직 프로젝트 시작 단계이니 생성만 해두고 내용은 나중에 작성하도록 한다.
0단계: Poetry란?
"Poetry is a tool for dependency management and packaging in Python. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you. Poetry offers a lockfile to ensure repeatable installs, and can build your project for distribution."
+) 말만 들으면 모르겠다. 활용 가치는 차차 알아가 보자.
1단계: 설치
vi ~/.bashrc 명령어를 통해 편집기를 켜고 export 환경변수명=환경변수값 형태로 입력해 준다. 즉, export PATH="/Users/사용자이름/.local/bin:$PATH"을 입력해 준다. source ~/.bashrc poetry --version을 통해 버전 확인1.5단계: 환경변수 설정 오류 해결
nano ~/.bash_profile 그리고 기존에 있던 아나콘다 설정 하위에 동일한 환경변수를 적고 source ~/.bash_profile로 변경사항 적용. 이제 어디에서 새로운 터미널을 열어도 poetry --version을 확인할 수 있다!2단계: poetry init
poetry init을 명령한 후 모든 디폴트 설정을 적용한다.
단, License는 MIT로, define dependencies 질문에는 모두 no를 적용.
이후 pyproject.toml 파일이 생성된다.
License=MIT란?
Poetry를 자유롭게 사용할 수 있다는 의미. 개인 및 상업적인 용도로 Poetry를 사용할 수 있으며, 수정 및 배포도 자유로움.
toml 파일이란? 프로젝트의 requirements와 dependencies를 관리하는 파일이다. (스프링 .yml 파일과 비슷해 보인다.)
"This file contains build system requirements and information, which are used by pip to build the package."

3단계: poetry add 필요한 패키지들 및 가상환경 활성화
poetry add Django psycopg2
위 명령어를 실행하면 다음 사항들이 실행된다;
poetry env info --path poetry가 생성한 가상환경 경로를 확인한다
(옵션) 3.5단계: 가상환경 명시적으로 설정하기
poetry 명령어를 실행하면 poetry가 자동으로 가상환경을 인식하고 그 안에서 패키지들을 관리하게 된다.
하지만 차후 poetry가 관리하는 가상환경이 늘어남에 따라 가상환경간의 전환에 오류가 생기는 경우가 있다고 한다.
따라서 개발자가 사용하는 IDE가 가상환경을 정확히 인지하게 하도록 하기 위해 다음과 같은 설정을 해보자;
poetry env remove $(poetry env list --full-path) 명령어를 통해 pyproject.toml에서 가상환경 '연결'을 제거하고 Poetry가 해당 환경을 더 이상 사용하지 않도록 한다.rm -rf /Users/(사용자 이름)/Library/Caches/pypoetry/virtualenvs/core-pAcdJB7s-py3.11 가상환경 폴더를 물리적으로 직접 삭제해준다. (rm -rf 명령어 실행시 휴지통 안 거치고 완전 삭제되니 항상 조심 또 조심..)poetry cache clear virtualenvs --all를 통해 Poetry가 캐시로 저장해놓은 모든 가상환경을 날려줄 수도 있다.poetry config virtualenvs.in-project true poetry가 관리하는 가상환경 폴더가 프로젝트 폴더 안에 생성되도록 기존의 전역설정을 바꿔준다.poetry install 명령어를 통해 다시 가상환경을 설치해 준다. 이제 프로젝트 디렉토리 내부에 가상환경 폴더 .venv가 생성되었음을 확인할 수 있다.poetry run python manage.py runserver
Poetry는 프로젝트의 일관성을 유지해준다.
+) 패키지 버전관리 목적 이외에 Poetry를 통해 프로젝트를 실행하는 구체적인 이유???
따라서 모든 명령어의 실행은 Poetry를 통해 이루어져야 한다.
앞으로 모든 실행 명령은 poetry run (명령어) 형태로 내려질 것이다.
또한 개발/운영 설정파일들을 나누다 보면 명령어의 옵션들이 길어질 수 있다.
따라서 명령어를 커스텀해주는 Makefile을 만들어보자
(사실 배우는 단계에서 커스텀한 단축 명령어를 사용하는 것은 옳지 않다고 생각한다. 리눅스 명령어를 귀신같이 사용하려면 손에 익어야 하기 때문에.. 그래도 일단 과정 안에 있으니 배워보자.)
⚠️ 오류: make (커스텀 명령어) 실행 위치
make는 현재 디렉토리의 Makefile을 기준으로 동작한다고 한다.
즉, 터미널에서 반드시 Makefile이 있는 디렉토리로 이동한 상태여야 한다.
최상위 디렉토리에 기존 프로젝트명(Core)을 소문자로 한 이름의 디렉토리(core)를 생성한다.
core 디렉토리 하위에 manage.py 와 project 디렉토리를 옮겨준다.
이는 비지니스 로직이 담긴 소스코드를 한 곳에 모아 보관하며,
설정파일 등을 비롯한 기타 폴더 및 파일들과 분리하기 위함이다.
프로트를 실행할 소스코드가 담긴 파일이 옮겨졌음으로 다음과 같은 변경사항을 적용한다;
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.project.settings")로 변경BASE_DIR = Path(__file__).resolve().parent.parent.parentROOT_URLCONF = "core.project.urls"WSGI_APPLICATION = "core.project.wsgi.application"위와 같은 변경사항은 서버를 실행시키는 명령어를 커스텀한 Makefile에도 적용되어야 한다.
기존에는 run-server라는 커스텀 명령어로 poetry run python manage.py runserver를 실행 했었다. 하지만 manage.py의 위치를 변경했기 때문에 -m 옵션을 사용하여 core 디렉렉토리 하위에 있는 manage 모듈을 실행하라는 의미인 -m core.manage로 변경해 준다.
.PHONY: install # 타겟이 실행될 때 타겟명을 파일로 간주하고 찾게됨 // 파일이 아님을 명시하여 생산성 증대 + 동일한 파일명 있어도 여기서 찾도록
install:
poetry install
.PHONY: migrate
migrate:
poetry run python -m core.manage migrate
.PHONY: migrations
migrations:
poetry run python -m core.manage makemigrations
.PHONY: run-server
run-server:
poetry run python -m core.manage runserver
.PHONY: superuser
superuser:
poetry run python -m core.manage createsuperuser
.PHONY: update
update: install migrate ;
이외 커스텀 명령어들이 대거 추가 되었다.
+) .PHONY가 뭘까?
poetry add django-split-settings PyYAML
Poetry를 통해 패키지를 설치해 준다.
⚠️ 패키지 설치 중 파이썬 버전 오류 해결
django-split-settings(1.3.2) 패키지는 Python 4.0 미만에서만 사용할 수 있다고 한다.

하지만 myproject.toml 파일에 명시된 Python 버전에 상한선 설정이 없어 오류가 났다. 따라서 .toml 파일에서 requires-python = ">=3.11,<4.0"과 같이 상한선을 추가해 주었다.
+) poetry.lock은 pyproject.toml의 설정을 기반으로 Poetry가 자동으로 생성하는 파일이다. lock 파일을 개발자가 직접 수정한 경우 추후 poetry install이나 poetry update 명령 실행시 이것이 다시 덮어써씌이거나, 예기치 않은 충돌/에러가 발생할 수 있으니 유의한다.
이후 poetry lock --update 를 해 주었다. +) 근데 파이썬 버전 상한선이 명시되지 않았다. 왤까?
project/settings 디렉토리 생성.
이후 project/settings/templates 디렉토리를 생성.
이후 project/settings/templates/settings.dev.py 파일 생성.
⚠️ VSCode가 settings.dev.py를 파이썬 파일로 인식하지 못하는 경우
VSCode는 파일 이름에 마침표가 여러 개 있으면, 때때로 확장자를 제대로 인식하지 못한다. 따라서 settings.json 파일을 열어 다음 코드를 추가해 준다.
"files.associations": {
"*.dev.py": "python"
}
이후 project/settings.py의 이름을 base.py로 변경한 후, project/settings/base.py 처럼 이동한다.
split-setting 관련하여 내용이 많아 다음 포스팅에서 자세히 다뤄보겠다..!
끝!