개발/PYTHON-DJANGO

파이썬 장고 & PostgreSQL & Git 셋팅 1

Aireee 2026. 1. 26. 03:01
반응형

1. 파이썬 설치 후 작업폴더를 생성하고 작업폴더로 이동합니다. 

2. 가상환경을 생성합니다.

project>python -m venv venv

3. 가상환경을 실행합니다.

# 윈도우의 경우
project> venv\Scripts\activate

# 맥의 경우
(base) -> project  source venv/bin/activate

4. PIP 업그레이드 후 장고를 설치합니다.

pip install --upgrade pip
pip install django

5. 의존성관리를 설치합니다.

pip freeze > requirements.txt

6. 장고 프로젝트를 생성 후 초기 마이그레이션을 진행합니다. 

django-admin startproject config .
python manage.py migrate

7. .gitignore 파일을 생성합니다. (이 파일에 기록된 파일 또는 폴더는 git 에 업로드 되지 않습니다

# Python 
__pycache__/
*.py[cod]
*.pyc
*.log

# Virtual Environment
venv/

# Django
db.sqlite3
staticfiles/
media/

# Environment variables
.env
.env.*

# OS
.DS_Store
Thumbs.db

#IDE
.vscode/
.idea/

8. GIT을 설치하고 설정합니다. (윈도우는 사이트 접속 다운로드 설치)

# 맥의 경우 
brew update
brew install git
git init
git add .
git commit -m "setup"
git branch -M main
git checkout -b develop
git remote add origin [원격깃주소]
git push -u origin main
git push -u origin develop

10. PostgreSQL 설치 후 아이디 셋팅을 합니다. 

# 맥의 경우
brew update
brew install postgresql
brew services start postgresql
psql postgres
# CREATE DATABASE [데이터베이스명];
# CREATE USER [사용자아이디] WITH PASSWORD '[사용자비밀번호]';
# GRANT ALL PRIVILEGES ON DATABASE [데이터베이스명] TO [사용자아이디];

11. .env 파일 생성

DJANGO_SECRET_KEY=[config/settings.py 파일의 SECRET_KEY=의 따옴표 내의 값]
DJANGO_DEBUG=1

DJANGO_ALLOWED_HOSTS=127.0.0.1,localhost

DATABASE_URL=postgresql://아이디:비밀번호@127.0.0.1:5432/데이터베이스명

DJANGO_SECURE_SSL_REDIRECT=1

마지막 SECURE_SSL_REDIRECT 는 local 에서는 불필요하지만, 코드에는 포함되어 있으므로 본인은 작성해줌

12. POSTGRESQL 과 .env 파일을 장고와 연동

# TERMINAL 에서 진행 --> 모듈 설치
	pip install "psycopg[binary]" dj-database-url python-dotenv
	pip freeze > requirements.txt

# 파일명 config/settings.py

    import os
    from dotenv import load_dotenv
    import dj_database_url

    load_dotenv()

    # .env 내용과 연동을 위한 교체 부분
    SECRET_KEY = os.getenv("DJANGO_SECRET_KEY", "unsafe-dev-key")
    DEBUG=os.getenv("DJANGO_DEBUG", "0") == "1"

    # DATABASES 블록 교체 부분

    DATABASES = {
        "default": dj_database_url.config(
            default=os.getenv("DATABASE_URL"),
            conn_max_age=600,
        )
    }

# TERMINAL 에서 진행
	python manage.py migrate

13. SETTINGS 구조 분리 (base / dev / prod)

1. Config 폴더에 settings 폴더 생성후 아래의 파일 생성

config/settings/__init__.py
config/settings/base.py
config/setting/dev.py
config/setting/prod.py 

2. config/settings.py 파일의 내용을 config/settings/base.py로 복사

base.py 파일에 아래의 내용을 반드시 포함하도록 수정

import os
from pathlib import Path
from dotenv import load_dotenv
import dj_database_url


load_dotenv()


BASE_DIR = Path(__file__).resolve().parent.parent.parent # config/settings/.. -> project root


SECRET_KEY = os.getenv("DJANGO_SECRET_KEY", "unsafe-dev-key")
DEBUG = os.getenv("DJANGO_DEBUG", "0") == "1"


ALLOWED_HOSTS = os.getenv("DJANGO_ALLOWED_HOSTS", "127.0.0.1,localhost").split(",")


INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
]


MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]


ROOT_URLCONF = "config.urls"


TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]


WSGI_APPLICATION = "config.wsgi.application"


DATABASES = {
"default": dj_database_url.config(
default=os.getenv("DATABASE_URL"),
conn_max_age=600,
)
}


AUTH_PASSWORD_VALIDATORS = [
{"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"},
{"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"},
{"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"},
{"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"},
]


LANGUAGE_CODE = "ko-kr"
TIME_ZONE = "Asia/Seoul"
USE_I18N = True
USE_TZ = True


STATIC_URL = "static/"
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"

기존 내용 중 BASE_DIR 부분의 parent.parent 를 parent.parent.parent 로 수정해야 함. 
그리고 ALLOWED_HOSTS 부분도 env 파일의 내용으로 전환. 
또한 DEFAULT_AUTO_FIELD 를 추가함. 

dev.py

# config/settings/dev.py
from .base import *

DEBUG = True
ALLOWED_HOSTS = ["127.0.0.1", "localhost"]

prod.py

# config/settings/prod.py
from .base import *

DEBUG = False

# 운영에서는 반드시 환경변수로 주입 권장
ALLOWED_HOSTS = os.getenv("DJANGO_ALLOWED_HOSTS", "").split(",")

# 운영 보안 기본값(필요시 확장)
SECURE_SSL_REDIRECT = os.getenv("DJANGO_SECURE_SSL_REDIRECT", "1") == "1"
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

project 폴더의 manage.py, wsgi.py, asgi.py 에서 settings 모듈을 변경해야 함. 

manage.py 의 아래 부분에 .dev 추가

# 변경전
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")

# 변경후
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.dev")

wsgi.py, asgi.py 두개 파일 모두 같은 부분을 동일하게 prod 추가

# 변경전
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")

# 변경후
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.prod")
python manage.py check
python manage.py runserver
python manage.py migrate

 

반응형