Django REST API를 쓰는 이유와 시스템 구조

Published: Dec 14, 2019 by

Django REST API를 쓰는 이유와 시스템 구조

시작하기 앞서 말씀드라자면, 
현재(2019-12)이 글들은 본인이 팀 단위로 개발을 진행하며 공부한 것에 대한 기록으로써,
공부미숙으로 잘못된 정보나 어색한 표현들이 있을 수도 있습니다.
만약 정말 Django REST API에 대해 깊은 공부가 필요하시거나, 
이미 Django REST API에 대한 사전 지식이 있으신 분들은
이 글이 아닌, 공식 도큐먼트들을 읽는 것을 추천드립니다.

Django를 선택한 이유

개발 공부도 조금하고 웹페이지 하나 만들어보고 싶다는 생각이 들기 시작할 때, 요즘에는 Django로 시작하는 경우가 많은 것 같다. 이유는 Python이라는 언어를 쓰고, ORM을 이용하기에 SQL문법을 따로 공부하지않아도 Django에서 DB관리를 한번에 할 수 있기에 초보자에게 접근성이 좋아서 그런 듯하다.

우리 개발팀도 처음 개발을 시작할 당시에 개발역량이 매우 부족했기에 쉬운 도구를 찾았었는데, 마침 Python도 공부하고 있었기에 Django를 선택했다. 생각해봐도 Django는 나쁜 선택이 아니었던 것 같다. 참고로 DB는 PostgreSQL을 사용하고 있다.

Django만을 사용하여 웹을 만들며 생긴 문제

Django의 튜토리얼을 해보고, Django가 어떤 도구인지 아시는 분들은 Django라는 도구 하나만으로 웹개발이 백과 프론트 모두 어느정도 개발이 가능하다는 것을 알 것이다. 하지만 개발을 혼자가 아닌 팀단위로 할 경우, 그 중에서도 프론트와 백을 나눌 경우에는 협업이 쉽지않다. Django로 프론트와 백을 나누어 협업을 할 경우, Django의 template를 프론트 담당자가 만들고, view, url 등의 python파일들은 백 담당자가 만들어야하는데, 이런 경우, 프론트 담당자 입장에서 Django의 시스템에 대해 이해가 부족하다면 작업하기가 힘들다. 그리고 React등을 이용하여 개발하기가 힘들어서, 웹의 프론트 퀄리티도 높이기가 힘들다. 좀 더 자세한 이유는 경험이 쌓이고 지식이 늘면 다시 서술하도록 하겠다.

Django REST API를 선택하게 된 이유

그래서 위와 같은 Django의존적이며 프론트의 활용이 힘들고 분업이 힘든 시스템에서, React를 사용하여 프론트도 활용하고 데이터전송규약만 확실하게 해두면 분업 또한 쉽게 할 수 있는 시스템을 도입하기로 했다. 그것이 Django REST API 시스템을 선택하게 된 이유이다.

그렇다면 왜 Django REST API 시스템을 이용하면 분업도 쉽고, 프론트도 활용할 수 있다는 걸까? REST API라는 것은 HTTP 통신 방법인 GET, POST 등으로 특정 정보를 주거나 받는 행위를 쉽게 할 수 있다. 보통 반환값은 JSON이나 XML형식인 것 같다. 기존의 Django 시스템은 보통 views.py(뷰)에서 return을 할 때, render나 httpresponse함수를 사용하여 렌더링된 html페이지를 돌려준다. 하지만 Django REST API를 사용하면, 뷰에서 html페이지가 아닌, JSON형식의 정보를 전달해줄 수 있다. 즉, 프론트 입장에서는 통신규약을 준수하여 특정 URL을 작성하기만 하면 활용하기 쉬운 JSON형태로 정보를 받아서 작업할 수 있는 것이다.

좀 더 쉽게 말하면, 백 담당자는 프론트 도구에 대한 이해가 없어도 작업이 가능하고, 프론트 담당자도 백 도구에 대한 이해가 없어도 독립적인 작업이 가능하다.

그래서 어떻게 시스템 구조를 짰는가?

사실 React를 사용하는 것만이 목적이라면 Django의 모듈 중 React를 사용할 수 있게 하는 모듈이 있는 것으로 알고 있다. 그걸 사용하면 될 수도 있다. 하지만 앞서말했듯이 어디까지나 분업의 목적이 많은 지분을 차지한다. 그래서 REST API를 이용하여 프론트의 분리를 한 것이고, 분리된 시스템을 기존의 Django시스템과 비교하여 설명을 해보겠다.

여기서 기존은 내가 하는 프로젝트의 처음 개발 상태를 말하는 것이므로 참고바란다. 아마 웹개발 초보자라면 현재 Django시스템의 상태가 대부분 내가 말하는 “기존”상태와 비슷할 것이다.

아래 그림에서 위가 기존의 상태고 아래가 바뀐 상태이다.

  • Django시스템 비교

위의 상태가 기존의 Django 시스템 상태이고 아래의 상태가 Django REST API를 적용한 변경된 시스템이다. 기존의 Django 시스템에서는 프론트 담당자가 작성한 html템플릿을 토대로 Django 템플릿 필터를 사용하여, Django에서 데이터를 입힌 후 페이지를 완성하여 클라이언트에게 뿌려주는 방식이다.

하지만 Django REST API와 React를 사용한 시스템에서는 Django에서 페이지를 최종완성하는 것이 아니라, Django에서 받은 정보를 토대로 프론트에서 클라이언트에게 정보를 뿌려주게 된다.

두 방식의 가장 큰 차이는 Django에 대한 의존도와 클라이언트에게 최종적으로 결과물을 주는 출구인듯하다.

기존의 방식은 템플릿 파일을 완성하는데 있어서도 Django라는 도구에 대한 이해도가 필수적이지만, REST API 방식은 프론트 담당자가 Django에 대한 이해도가 없어도 되며, React같은 도구를 활용하는데 제약이 없다.

그리고 내 생각을 조금 더 첨언 하자면, 사용자가 보는 최종적인 화면은 프론트의 담당자 입장에서 더 가깝게 보기 때문에 UX의 측면에서도 Django에서 만든 결과물보다 React(Node.js)에서 만든 결과물이 최종본이 되는 것이 더 유리하다고 생각한다.

결론

위와 같은 이유로 기존의 Django의존적인 시스템에서 Django와 React를 독립적으로 작업할 수 있는, Django REST API에 대해 도입하게 되었다. Django와 React를 이용한 전체적인 시스템에 대한 자세한 구조는 간단한 형식으로 다음 기회에 글을 써보겠다. 어차피 정리를 위해 전체 시스템에 대한 구조도 작성해야한다.

이 카테고리에서는 일단 Django REST API의 사용법에 대해 서술할 것이다. 이 블로그에서 처음으로 본격적으로 쓴 글이므로 글솜씨가 부족해도 양해바란다.