Django DRF 프로젝트 초기 설정 가이드
Django REST Framework(DRF) 프로젝트를 설정할 때 보안과 유지보수를 고려하여 환경 변수를 활용하는 방법을 설명합니다. 이 가이드는 `django-environ` 패키지를 사용하여 환경 변수를 설정하고, CORS 설정 및 DRF 인증 설정을 포함합니다.
Django REST Framework(DRF) 프로젝트를 설정할 때 보안과 유지보수를 고려하여 환경 변수를 활용하는 것이 중요합니다. 이를 위해 django-environ
패키지를 사용하여 SECRET_KEY
, DEBUG
, ALLOWED_HOSTS
, DATABASE_URL
, CACHE_URL
, REDIS_URL
등의 설정을 환경 변수로 관리하는 방법을 설명합니다.
1. 환경 변수 설정 (django-environ
활용)
1.1 django-environ
패키지 설치
Django에서 환경 변수를 쉽게 로드할 수 있도록 django-environ
패키지를 설치합니다.
1
pip install django-environ
설치 후 requirements.txt
에 반영하여 프로젝트의 종속성을 관리합니다.
1
pip freeze > requirements.txt
1.2 환경 변수 로드 설정 (settings.py
수정)
Django 프로젝트에서 환경 변수를 사용하려면, settings.py
파일에서 django-environ
을 활용하여 .env
파일을 로드하는 설정을 추가해야 합니다.
1
2
3
4
5
6
7
8
9
10
11
import environ
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
# 환경 변수 로드
env = environ.Env(
DEBUG=(bool, False) # `DEBUG` 값을 boolean 타입으로 변환, 기본값은 False
)
environ.Env.read_env(BASE_DIR / ".env") # `.env` 파일을 읽어서 환경 변수로 로드
1.3 SECRET_KEY
환경 변수 설정
Django의 SECRET_KEY
값은 중요한 보안 정보이므로 환경 변수에서 로드하는 것이 좋습니다.
1
SECRET_KEY = env("DJANGO_SECRET_KEY", default="fallback-secret-key")
이제 .env
파일에서 SECRET_KEY
값을 설정합니다.
1
DJANGO_SECRET_KEY="your_secret_key_here"
1.4 DEBUG
설정
DEBUG
모드는 개발 환경에서는 활성화되지만, 운영 환경에서는 반드시 비활성화해야 합니다. 환경 변수를 통해 이를 제어할 수 있습니다.
1
DEBUG = env("DEBUG")
.env
파일에서는 다음과 같이 설정할 수 있습니다.
1
DEBUG=True
1.5 ALLOWED_HOSTS
설정
운영 환경에서는 특정 도메인만 허용해야 하므로, 환경 변수에서 ALLOWED_HOSTS
를 로드하여 설정합니다.
1
2
3
ALLOWED_HOSTS = (
["localhost", "127.0.0.1"] if DEBUG else env.list("ALLOWED_HOSTS", default=[])
)
개발 환경에서는 localhost
와 127.0.0.1
만 허용되며, 운영 환경에서는 .env
파일에서 설정한 도메인이 적용됩니다.
.env
파일 예시:
1
ALLOWED_HOSTS=example.com,api.example.com
1.6 데이터베이스 설정 (DATABASE_URL
)
개발 환경에서는 SQLite를 사용하고, 운영 환경에서는 PostgreSQL과 같은 데이터베이스를 사용할 수 있도록 설정합니다.
1
2
3
4
5
6
7
8
9
10
DATABASES = {
'default': (
{
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
}
if DEBUG
else env.db("DATABASE_URL")
)
}
개발 환경에서는 SQLite를 기본으로 사용하고, 운영 환경에서는 .env
파일에서 지정한 데이터베이스를 사용합니다.
.env
파일 예시:
1
DATABASE_URL=psql://user:password@127.0.0.1:5432/mydatabase
1.7 캐시 및 Redis 설정
Django에서 캐싱을 활용하면 성능을 향상시킬 수 있습니다. DEBUG
값에 따라 로컬 메모리 캐시를 사용하거나, 운영 환경에서는 Memcached 또는 Redis를 사용할 수 있도록 설정합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CACHES = {
"default": (
{"BACKEND": "django.core.cache.backends.locmem.LocMemCache"}
if DEBUG
else {
"BACKEND": "django.core.cache.backends.memcached.MemcachedCache",
"LOCATION": env("MEMCACHED_URL", default="127.0.0.1:11211"),
}
),
"redis": (
{"BACKEND": "django.core.cache.backends.locmem.LocMemCache"}
if DEBUG
else {
"BACKEND": "django.core.cache.backends.redis.RedisCache",
"LOCATION": env("REDIS_URL", default="redis://127.0.0.1:6379/1"),
}
),
}
운영 환경에서는 Memcached 또는 Redis를 사용하여 성능을 최적화할 수 있습니다.
.env
파일 예시:
1
2
CACHE_URL=memcache://127.0.0.1:11211
REDIS_URL=redis://127.0.0.1:6379/1
2. CORS 설정 (django-cors-headers
활용)
CORS(Cross-Origin Resource Sharing) 설정을 통해 특정 도메인에서 API 요청을 허용할 수 있습니다.
2.1 패키지 설치
1
pip install django-cors-headers
2.2 settings.py
설정
1
2
INSTALLED_APPS += ["corsheaders"]
MIDDLEWARE.insert(1, 'corsheaders.middleware.CorsMiddleware')
2.3 환경 변수에서 CORS 허용 도메인 로드
1
2
3
4
5
CORS_ALLOWED_ORIGINS = (
["http://localhost:3000", "http://127.0.0.1:3000"]
if DEBUG
else env.list("CORS_ALLOWED_ORIGINS", default=[])
)
3. DRF 설정 (JWT + 세션 인증)
Django REST Framework(DRF) 설정을 추가하여 API 인증 방식을 정의합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
INSTALLED_APPS += [
'rest_framework',
'rest_framework_simplejwt',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication',
'rest_framework.authentication.SessionAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
}
JWT(JSON Web Token) 설정을 추가하여 보안성을 강화할 수 있습니다.
1
2
3
4
5
6
7
8
from datetime import timedelta
SIMPLE_JWT = {
"ACCESS_TOKEN_LIFETIME": timedelta(days=1),
"REFRESH_TOKEN_LIFETIME": timedelta(days=7),
"ROTATE_REFRESH_TOKENS": True,
"BLACKLIST_AFTER_ROTATION": True,
}