장고는 파이썬 기반의 하이레벨 웹 프레임워크다. 꽤 오랫동안 사용되기도 했고.. 매우 안정적이기도 하고.. 한번 사용하면 개발속도가 엄청 빠르기도 하고.. 이미 나와있는 자료들도 많아서 배우기 쉬울 것이다.

이 글은 아래와 같은 사람들이 보면 좋을 것 같다!

  1. 프론트 개발자인데 Firebase와 같은 DBaaS(DB as a Service) 플렛폼 사용할 때
  2. 장고 개발자인데 최근에 React/Angular 또는 모바일 앱을 사용하려 할 때
  3. 프론트엔드 시작하는 개발자인데 백엔드 개발에 어려움을 겪고 있을 때
  4. 성숙한 프레임 워크를 사용하여 백엔드 서비스를 구축하고 싶을 때

1. 왜 Django를 Angular, React 또는 Mobile SDK와 함께 사용하는 것이 간단하지 않을까?

장고는 Full Stack 웹 프레임 워크로,

자체 ORM, 템플릿 엔진 등이 포함되어 있으며 전체 application이 단일 서비스로 실행되도록 제작되었다.

 

반면 프론트엔드 프레임워크 또는 모바일 SDK를 사용하는 경우

클라이언트/프론트 엔드가 백엔드에서 완전히 분리되도록 설계되어있다.

 

2. 그럼 굳이 왜 장고를 사용하려 하는거지?

프론트엔드와 백엔드간의 REST 기반의 통신 아키텍쳐로 완전한 Decoupling을 용이하게 할 수 있기 때문!

장고의 REST 프레임워크는 이전 포스팅에서 소개한 바가 있다.

 

[Django/장고] DRF(Django Rest Framework)란

RESTful이란 RESTful이란 Representational State Transfer의 줄임말이다. 먼저 REST에 대해서 소개를 하자면, http의 url과 http method(GET, POST, PUT, DELETE)를 사용해서 API 가독성을 높인 구조화된 시스템..

butter-shower.tistory.com

 

그래서 제안된 아키텍쳐의 그림은 아래와 같다! 

Request를 HTTP 프로토콜로 하고 response는 JSON 형태로! Serializer와 API view가 필요하다.


3. 그래서 어떻게 모바일 백엔드를..?

백엔드 개발 순서가 따로 있는건 아니지만 추천을 한다면 먼저 모델을 개발하고(models.py), 그 다음에 seralizer.py, urls.py, views.py 순서로 하면 좋은 것 같다.

django-admin startapp (앱 이름) 명령어를 통해 앱을 생성하자. 모델은 원래 유저를 써보자.

메인 프로젝트 이름있는 폴더 안에서 seralizer.py를 생성하자.

(1) serializer.py 생성

#(앱이름)/serializer.py
 
from rest_framework import serializers
from django.contrib.auth.models import User
 
class UserSerializer(serializer.ModelSerializer):
	class Meta:
    	model = User
        fields = ('url', 'username', 'email')

원래 있던 유저의 정보를 serailize 하는 것이다!

필드는 직접 설정할 수도 있고, 모든 필드를 불러오고 싶다면 fields =  '__all__' 로 하면 된다.

 

(2) urls.py를 설정하자

#(프로젝트폴더이름)/urls.py
 
from django.urls import path
from user.views import fetch_user
 
urlpatterns = [
	...
    path('fetch_user/', fetch_user),
]

 

(3) views.py를 작성하자 (젤 중요!!)

#(앱이름)/views.py
 
from django.contrib.auth.models import User
from rest_framework.decorators import api_view
from .serializer import UserSerializer
from rest_framework.response import Response
 
@api_view(['get'])
def fetch_user(request):
	#fetch all user objects
    users = User.objects.all()
    serializer = UserSerializer(users, many=True)
    
    #return Response using rest_framework's response
    return Response(seralizer.data)

유저 정보를 받아오는 fetch_user 함수를 작성한 모습이다.

request가 들어오면 리턴하는 형식이다. 이 예시는 GET만 허용한다. (POST 안됨)

 

위의 serializer.py에서 만든 UesrSerializer를 통해 직렬화를 하고, many=True를 통해 잠재적으로 둘 이상의 객체가 있음을 알린다. api_view 장고 rest 프레임 워크에서 제공하는 것으로, 이쁘게 보여주는 화면같은거다.

 

REST 프레임워크에서 Response를 import해와서 JSON 형식으로 응답하도록 했다.

응답은 serializer.data로 모든 유저 객체 정보를 보여주도록 설정했다.

 

(4) 실행시켜보자

python manage.py runserver 를 터미널에서 실행시키고 웹브라우저로 http://localhost:8000/fetch_user 를 들어가면!

 

이렇게 에러가 뜬다 ㅎㅎ views.py의 serializer 부분을 아래와 같이 수정하자.

serializer = UserSerializer(users, context = {'request' : request}, many = True)

그리고 다시 들어가보면 잘 된당

굳~~

이제 각자의 프론트엔드에서 개발을 할 때 http://localhost:8000/fetch_user 로 리퀘스트를 하면 백엔드와 정보를 주고받을 수 있다. 챱챱


출처

https://butter-shower.tistory.com/52?category=718374

'Django > TIL etc' 카테고리의 다른 글

파이썬 패키지 관리툴 poetry 소개  (0) 2022.01.21
Poetry 와 장고 프로젝트  (0) 2022.01.21
Django REST Framework 튜토리얼  (0) 2022.01.20
MVC 패턴이 뭐야?  (0) 2022.01.20
Django REST Framework 가 뭐야?  (0) 2022.01.20

RESTful이란

RESTful이란 Representational State Transfer의 줄임말이다.

먼저 REST에 대해서 소개를 하자면, http의 url과 http method(GET, POST, PUT, DELETE)를 사용해서 API 가독성을 높인 구조화된 시스템 아키텍쳐(framework)라고 생각하면 된다.

하나의 URL로 우리는 최소 4가지의 HTTP method를 전송할 수 있다.

 

스마트폰이 등장하기 전 IT 기업들은 웹 페이지를 보여주는 웹서버만 구현하면 됬다.

그 웹 서버에서 DB 서버의 데이터도 읽어오고 사용자들이 글을 남기면 DB 서버에 저장까지 하는 기능을 모두 담당했다. 하지만 스마트폰이 출시되고, 어플리케이션의 등장으로 더이상 웹으로만 서비스를 제공하는 것에는 한계가 있었다.

 

따라서 HTML로 렌더링 하는 웹서버가 아닌, JSON 혹은 XML 과 같은 형식을 통해서 데이터를 다루는 별도의 API 서버가 필요했다. 스마트폰 어플과 웹에서 동일한 기능을 제공하는데 기존의 웹서버를 계속 사용하면 매번 HTML을 읽어서 해당 태그에 있는 정보를 찾아내는 일은 정말 미친짓이기 때문이다. (덜덜)

 

따라서 RESTful 아키텍쳐를 HTTP Method와 함께 사용해 웹, 데스크탑 앱, 스마트폰 어플들까지 하나의 API 서버를 생성할 수 있다.

Django 또한 View 클래스 자체가 RESTful 한 서버를 만들기에 최적인 프레임워크다.


장고 REST 프레임워크는 웹 API를 구축하기 위한 강력하고 유연한 툴킷입니다.

DRF(Django Rest Framework)란

Django 안에서 RESTful API 서버를 쉽게 구축할 수 있도록 도와주는 오픈소스 라이브러리다.

 

Django REST framework를 사용하는 이유는 아래와 같다.

  • 웹 브라우저 API는 범용성이 크다. 개발을 쉽게 만들어준다.
  • 인증 정책에 OAuth1, OAuth2 를 위한 추가적인 패키지가 추가되어 있는 경우
  • 시리얼라이즈 기능을 제공해준다. (DB data -> JSON)
  • 문서화 및 커뮤니티 지원이 잘 되어있다.

Serializer 란

DRF의 가장 매력적인 기능으로는 Serializer가 있다.

Serializer란 말 그대로 직렬화하는 클래스로서, 사용자의 DB안에 사용자 프로필 사진, 이메일, 이름, 성별이 있다고 가정하면 사용자 모델 인스턴스를 JSON 형태 혹은 Dictionary 형태로 직렬화 할 수 있다.

 

예를 보면,

user = User(email="user@user.user", name="user", sex="Female", profile_image="user.png")
UserSerializer(user).data{
	"email" : "user@user.user",
    "name" : "user",
    "sex" : "female",
    "profile_image" : "user.png"
}

위와 같은 사용자가 있다면 DRF의 serializer를 통해 모델 인스턴스를 직렬화 할 수 있다.

실 사용시에는 만약 사용자 정보를 열람하는 URL이 /serializer/user/<user id>/가 있고 해당 View에는 user_id의 해당하는 모델 인스턴스의 정보를 리턴한다고 가정하자. 그렇게 되면 만약 우리가 /serializer/user/1/ 이라는 URL로 요청했을 시 user_id가 1인 사용자의 정보를 JSON 형태로 응답받을 수 있다.

이는 사용자 프로필 페이지에 접근했을 때 사용하는 View 라고 하면 사용자 페이지에 들어갈 때 마다 해당하는 사용자의 user_id만 URL에 입력해주게되면 각 사용자의 정보를 JSON 형태로 응답 받을 수 있을 것이다.

위와 같은 기능을 하는 Serializer를 ModelSerializer라고 부른다.

Django REST Framework 설치

pip install djangorestframework

위의 명령어를 터미널에서 실행시키자.

 

다음으로는 django settings.py 파일에서 INSTALL_APP 부분에 'rest_framework' 를 명시해주자.

INSTALL_APPS = [
	...
    'rest_framework', #add
]

참고한 블로그

https://yunhookim.tistory.com/7

 

DRF(Django Rest framework) 소개

DRF(Django Rest framework) 소개 DRF(Django Rest Framework, http://www.django-rest-framework.org)란 Django 안에서 RESTful API 서버를 쉽게 구축할 수 있도록 도와주는 오픈 소스 라이브러리이다. RESTful..

yunhookim.tistory.com

https://butter-shower.tistory.com/50

'Django > TIL etc' 카테고리의 다른 글

파이썬 패키지 관리툴 poetry 소개  (0) 2022.01.21
Poetry 와 장고 프로젝트  (0) 2022.01.21
모바일 앱을 위한 장고  (0) 2022.01.20
Django REST Framework 튜토리얼  (0) 2022.01.20
MVC 패턴이 뭐야?  (0) 2022.01.20

+ Recent posts