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

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

  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

+ Recent posts