Django REST Framework가 무엇인지 의미를 머리로 이해하고, 이제 손과 코딩으로 이해하기 위해 튜토리얼을 진행해보려고 한다. 진행하는 동안 과정들을 기억하고 또 글로 쓰면서 더욱 제대로 이해하는 부분도 있다고 생각하여 그 과정을 글로 정리하기로 결심하였다.

이에 앞서 Django 프로젝트를 새로 시작했을 때 초기에 설정해주어야 하는 것들을 먼저 정리하려고 한다.

1. Django 시작

Django는 간단하게 다음의 명령어를 통해 설치할 수 있다.

$ pip install django

그리고 새로운 프로젝트를 생성해주도록 한다.

$ django-admin startproject rest_tutorial

처음 프로젝트를 생성하면 다음과 같은 구조로 생성된다.

$ cd rest_tutorial
$ python manage.py runserver

manage.py runserver 명령어를 통해 개발환경에서의 django 테스트서버를 실행할 수 있고, 이후 배포할 때에는 Nginx나 Apache 등을 통해 웹서버를 분리 후 배포하는 것이 권장된다.

서버를 실행시키고 127.0.0.1:8000 으로 접속하면 서버가 정상적으로 실행된 것을 알 수 있다.

2. SECRET_KEY 분리

Django는 프로젝트 시작 시 무작위의 SECRET_KEY 값을 생성하는데, 이 값은 암호화 서명 등 보안 설정에 사용되는 값이기 때문에 이 키 값을 숨기는 것이 중요하다. 특히 프로젝트를 Git을 통해 버전관리를 할 예정이라면 이 key를 분리하여 저장하는 것이 중요하다.

manage.py가 있는 루트에 secrets.json 파일을 생성해주고 settings.py의 SETRET_KEY 값을 추가해준다.

# secrets.json
{
    "SECRET_KEY": "irlx@0=!1*=isk!z*1-tzzz3fotlqm9m6oy7#0=bb!zl4_$cn2"
}

(SECRET_KEY 분리 예시)

settings.py의 SECRET_KEY 부분을 방금 생성한 secrets.json을 읽어오도록 수정해준다.

# setting.py
import json
from django.core.exceptions import ImproperlyConfigured

secret_file = os.path.join(BASE_DIR, 'secrets.json')

with open(secret_file) as f:
    secrets = json.loads(f.read())

def get_secret(setting, secrets=secrets):
    try:
        return secrets[setting]
    except KeyError:
        error_msg = "Set the {0} environment variable".format(setting)
        raise ImproperlyConfigured(error_msg)

SECRET_KEY = get_secret("SECRET_KEY")

그리고 이 secrets.json 파일이 노출되지 않도록 .gitignore 파일을 생성해준다.

#.gitignore
secrets.json

이미 SECRET_KEY 값이 노출되었다면 아래의 코드를 가진 파일을 실행하여 SECRET_KEY를 새로 생성할 수 있다.

#generate_secretkey.py
from django.core.management import utils

print(utils.get_random_secret_key())

3. LANGUAGE_CODE / TIME_ZONE 설정

# settings.py
LANGUAGE_CODE = 'ko'
TIME_ZONE = 'Asia/Seoul'

4. TEMPLATES 경로 설정

Template 폴더를 각 App마다 생성하지 않고 한 곳에서 관리하기 위해 TEMPLATES의 'DIRS'를 수정해준다.

# settings.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "templates")],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

5. STATIC / MEDIA 경로 설정

Django 프로젝트의 정적 파일들(css, js, img 등)을 관리하기 위한 경로, 그리고 파일 / 사진 첨부 등 media 파일을 저장하는 경로를 추가해 준다.

# settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
STATIC_ROOT = os.path.join(BASE_DIR, '.static')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

지정된 루트에 미리 templates, static, media 폴더를 생성한다.

이 후 Django REST Framework 튜토리얼을 진행해보려고 한다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기