본문 바로가기

Django

DRF(Django REST framework)로 API 서비스 만들기-1

지금부터 DRF로 실제 서비스를 하기 위한 API 서버를 만들 것이다.

 

파이썬으로 웹 서비스를 개발하는 대표적인 방법은 Django를 이용하여 일반적인 웹 서비스를 만드는 방법과

DRF를 이용하여 API 서버를 만드는 방법이 있다.

 

DRF는 Django rest framework의 약자로, 파이썬을 기반으로 하는 웹 개발 라이브러리이다.

쉽게 이야기해서 파이썬 기반으로 API 서비스를 개발할때 사용한다.

 

 

1. 프로젝트 구성하기

 

a) 먼저 프로젝트 폴더를 생성

 

- 윈도우 터미널이 무엇인가? https://rb.gy/p1r88q
- 맥 터미널이란 무엇인가? https://rb.gy/6jcltu

 

mkdir my-api-project

 

 

 

b) .gitignore 생성

 

- 깃허브가 무엇인가? https://yanacoding.tistory.com/4

- .gitignore 란? https://jerryjerryjerry.tistory.com/120

 

 

버전관리가 필요없는 파일을 설정한다.

 

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
.python-version

# pipenv
#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
#   However, in case of collaboration, if having platform-specific dependencies or dependencies
#   having no cross-platform support, pipenv may install dependencies that don't work, or not
#   install all needed dependencies.
#Pipfile.lock

# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

.DS_Store

 

해당 코드는 기본적으로 사용하는 파이썬용 포멧이다. 본인의 마음대로 수정해도 된다.

 

 

 

 

c) 가상환경 셋팅

 

파이썬의 가상환경은 여러가지가 있지만 여기서는 그냥 기본 가상환경을 사용한다. 구글에 "파이썬 가상환경" 이라고 입력하면 여러가지 가상환경에 대한 내용을 찾아볼 수 있다.

 

 

가상환경 생성 - 프로젝트 폴더 my-api-project/ 에서 생성

 

python3 -m venv venv

 

 

가상환경 실행하기

 

source venv/bin/activate

 

 

 

d) 장고 설치

 

 

특정 버전은 아래와 같이 설치 가능

 

pip install django
pip install django==4.1.2

 

 

 

만일 mysql이나 mariadb를 사용하려면 클라이언트 라이브러리도 설치한다

 

pip install mysqlclient

 

 

 

e) 장고 프로젝트 생성

 

 

장고 프로젝트를 구성할 장고 프로젝트를 생성한다.

 

django-admin startproject config .

 

 

 

 

f) db 생성

 

본인이 사용하는 db를 생성한다. 여기서는 mysql을 사용한다.

 

create database my_api_project character set utf8mb4 collate utf8mb4_general_ci;

 

 

 

g) 키파일 생성

 

AWS를 쓰다 천만원이 나왔다는 괴담을 들어봤는가? 그런 이야기의 대부분은 AWS 의 키파일을 외부로 노출해서 발생하는 일이다.

그렇기 때문에 상용 프로젝트를 개발하려면 프로젝트의 중요한 키 파일을 따로 관리하는 것이 좋다.

 

 

아래 경로에 파일을 생성한다.

 

config/key.py

 

from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

APP_SECRET_KEY = 'django-insecu-----APP_SECRET_KEY--------g^ctq9*9#k'

APP_DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'my_api_project',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '3306',
 	}
}

 

해당 파일은 본인이 AWS 괴담의 주인공이 되고 싶지 않다면 직접 관리해야하는 가장 중요한 파일이다. 

파일 생성 후 꼭 .gitignore에 등록해서 해당 키가 깃허브 같은 사이트에 올라가는 것이나 자동으로 어딘가로 복사되는 것을 반드시 방지해야 한다.

 

 

 

 

 

h) 키 파일 적용

 

 

키 파일을 생성했으면 config/settings.py 파일을 수정한다.

 

...
from .application import APP_SECRET_KEY, APP_DATABASES
...
SECRET_KEY = APP_SECRET_KEY
...
DATABASES = APP_DATABASES
...
TIME_ZONE = 'Asia/Seoul'
...

 

 

 

 

 

 

여기까지 따라왔다면 폴더 구조가 아래와 같다

 

프로젝트 폴더 & 파일 구성