Django
Django는 Python으로 작성된 오픈 소스 웹 애플리케이션 프레임워크로, 풀 스택을 지원한다. Python 기반의 웹 프레임워크 중 가장 널리 사용되고 있으며, 일반적으로 Python을 웹 서비스에 사용한다고 하면, 대부분 Django 또는 Flask를 사용하고 있을 것이다. Django와 Flask의 차이는 풀 스택 프레임워크 여부 정도이며 두 프레임워크 모두 매우 간편하게(?) 사용이 가능하다.
Django와 관련된 자세한 내용은 공식 홈페이지 🏠https://www.djangoproject.com/ 에서 확인이 가능하다.
Django는 MVT (Model View Template) 패턴을 이용, 데이터베이스와의 연동을 간편하게 지원한다. MVT 패턴은 일반적으로 웹 프레임워크에서 사용되는 MVC (Model View Controller) 패턴을 기반으로 두고 있지만, 완전히 동일한 패턴은 아니다.
- Model: 데이터에 관한 정보를 담는다. 데이터에 대한 접근, 검증, 작동과 데이터 사이의 관계를 정의한다. 일반적으로 각각의 모델은 데이터베이스의 테이블에 해당한다.
- View: 어떤 데이터가 표시될 것인지를 정의한다. 뷰는 HTTP 응답(Response)을 반환해야 하며, 응답의 종류는 웹 페이지, 리다이렉션, 문서 등의 다양한 형태가 가능하다.
- Template: 데이터가 어떻게 표시되는지를 정의한다. 템플릿은 사용자에게 실제로 보여지는 웹 페이지나 문서를 다룬다.
Django에서는 웹 개발에 번거로운 요소들을 새로 개발할 필요 없도록 인증, RSS, 사이트맵 등 자주 쓰이는 애플리케이션을 패키지 형태로 제공하고 있다.
Django REST Framework
Django REST Framework (이하 DRF) 는 Django에서 REST API를 편리하게 생성할 수 있도록 도와주는 프레임워크이다.
DRF와 관련된 자세한 내용은 공식 홈페이지 🏠 www.django-rest-framework.org/ 에서 확인이 가능하다.
DRF는 Django의 MVT 패턴을 REST API 형태에 최적화하여 Model, Serializer, View, Router 4가지 계층으로 구성된다.
- Model: Django와 마찬가지로 데이터에 관한 정보를 담는다.
- Serializer: Model에 의해 정의된 데이터를 보다 쉽게 전송 가능한 JSON 또는 XML 등의 형식으로 변환한다.
- View: API를 통해 사용할 수 있는 기능 (CREATE, READ, UPDATE, DELETE) 을 정의한다.
- Router(URLs): 각 View에 접근할 수 있는 URL을 정의한다.
Quick Start
Installation
DRF 프로젝트가 독립적인 환경에서 수행될 수 있도록 python virtual environment 를 사용한다.
# python-venv를 설치한다
$ apt install python3-venv
# 프로젝트 root 디렉토리를 생성하고, 해당 디렉토리로 이동한다
$ mkdir tutorial
$ cd tutorial
# venv를 생성하고, 활성화한다
tutorial $ python3 -m venv env
tytorial $ source env/bin/activate
pip install을 이용하여 Django와 DRF 패키지를 설치한다.
(env) tutorial $ pip install django
(env) tutorial $ pip install djangorestframework
아래와 같이 정상적으로 설치되어, 버전이 출력되는지 확인한다.
(env) tutorial $ python
Python 3.8.3 (v3.8.3:6f8c8320e9, May 13 2020, 16:29:34)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import django, rest_framework
>>> print(django.__version__, rest_framework.__version__)
3.1 3.11.1
>>> exit()
Create Project & Application
Django는 하나의 프로젝트 안에서 기능 별로 여러개의 애플리케이션을 생성할 수 있다.
우선 django-admin command를 이용하여 myproject라는 이름의 프로젝트를 생성해 보자.
(env) tutorial $ django-admin startproject myproject .
(env) tutorial $ tree -I env
.
├── manage.py
└── myproject
├── __init__.py
├── asgi.py
├── settings.py
├── urls.py
└── wsgi.py
위와 같이 Django 프로젝트에 필요한 기본 파일들이 생성된다.
- manage.py: Django 프로젝트와 다양한 방법으로 상호작용하는 커맨드라인 유틸리티. 서버를 실행하거나, DB를 마이그레이션 할 때 사용한다.
- myproject: 프로젝트 디렉토리. 프로젝트를 위한 python 패키지들이 저장된다.
- asgi.py: 프로젝트를 서비스하기 위한 ASGI 호환 웹 서버의 진입점
- settings.py: 프로젝트의 환경 및 구성을 저장
- urls.py: 프로젝트의 URL 선언을 저장
- wsgi.py: 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 진입점
생성한 빈 깡통 프로젝트 서버를 구동해 볼 수 있다. 다음과 같이 manage.py 파일을 이용하여 서버를 구동시켜 보자. (이때 migration 관련 경고 메시지가 출력될 수 있으나 신경 쓰지 말자.)
(env) tutorial $ python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
August 31, 2020 - 07:12:11
Django version 3.1, using settings 'myproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
이제 빈 깡통 서버가 구동 중이니, 브라우저를 통해 서버에 접속해 보자. 아래와 같이 서버가 구동되고 있음을 확인할 수 있다.
다음은 myapp 이라는 이름의 애플리케이션을 생성해 보자. (애플리케이션은 프로젝트 디렉토리 외부 및 내부에도 생성 가능하다. 프로젝트 디렉토리 내부에 생성할 경우, 애플리케이션이 프로젝트의 namespace를 사용하게 되므로, 외부 모듈과 충돌하지 않을 수 있다는 장점이 있다.)
(env) tutorial $ django-admin startapp myapp
(env) tutorial $ tree myapp
myapp
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
위와 같이 Django 애플리케이션에 필요한 기본 파일들이 생성된다.
- admin.py: 관리자 페이지를 생성 및 관리
- apps.py: 애플리케이션 설정 정의
- migrations: DB 마이그레이션 파일들이 저장되는 디렉토리
- models.py: 애플리케이션에서 사용하는 데이터 베이스 모델을 정의
- tests.py: 애플리케이션의 자동화된 테스트를 생성하고 관리
- views.py: 브라우저를 통해 보이는 뷰에 대한 정의
이것으로 개발을 위한 설정은 모두 완료되었다.
https://ungodly-hour.tistory.com/20
'일하는 > Cloud, Web' 카테고리의 다른 글
Django REST Framework : (2) Requests and Responses (0) | 2020.09.02 |
---|---|
Django REST Framework : (1) Serialization (0) | 2020.09.02 |
마이크로 서비스 아키텍처 (Microservices Architecture: MSA) (0) | 2020.09.01 |
Django REST Framework : Tutorial (3) (0) | 2020.09.01 |
Django REST Framework : Tutorial (2) (0) | 2020.08.31 |