[Django] REST VS GraphQL




REST(Django Rest Framework)


VS


GraphQL(Graphene)



1. REST란?

  • Representational State Transfer의 약자 입니다.
  • HTTP의 URI로 자원을 지정하고 Method를 이용해서 호출하여 HTTP 프로토콜을 사용하기때문에 HTTP의 장점을 최대한 활용할 수 있습니다.
  • Method(GET, POST, DELETE, PUT) 로 CRUD를 명시합니다. - 구형 브라우저는 PUT, DELETE 안됨
  • 프론트엔드가 여러개(모바일, 웹 등등) 라도 표준화 되어 있어 사용 가능합니다.
  • 이것저것 헤더를 많이 가져다 붙여서 실제로는 복잡한 형태지만, 잘 사용하면 편리합니다.(헤더가 빡셈)
  • 서버-클라이언트 구조
  • 상태가 없음(HTTP가 그러하듯)
  • Cache가능
  • 계증화
  • 일관된 인터페이스


>>HTTP 설명 보기(딩그르르 다른 포스트)



아.. 그럼 RESTful은 다른거에요?

RESTful의 뜻 :

REST 스럽다


REST를 REST 답게 구현했는지?

종종 이런이야기 들어보셨나요? '이건.. REST 답지 못하네..' 또는 '이건 RESTful 하지 못하네'.... 공식적으로 뭐가 RESTful 하다는 문서는 없습니다. 그냥 모든 사람이 이해하기 쉬운 컨벤션정도로만 여기시면 됩니다.



REST 하게 REST 만들려면?

  • GET, POST, PUT, DELETE로 CRUD 역할 주기(POST로만 다하면 RESTful하지 않음)
  • 호출 URL에 Resource, id를 제외한 다른 값이 들어가는 경우(/post/id)


딩그르르 호출 URL은 RESTFUL 하지 못합니다. 그렇게 만들려면 수정을 해야하는데 저도 만들때는 그렇게 하고 싶었죠. 딩그르르를 보시면 해당 포스팅의 고유 ID를 뜻하는 것은는 DB안에 숫자로된 PK(Primary가 아니라 슬러그 입니다. 그래서 슬러그를 인덱싱 해서 사용합니다. 근데 이것도 만들다가 변경되었습니다. 그래서 뭐.. 할 시간이.. 없... ;;; 은 핑계.. ㅜㅜ



2. GraphQL 이란?

REST가 HTTP 프로토콜을 사용하여 전송을 하는 한 형태였다면, GraphQL은 Query Language 입니다. 2012년 페이스북 내부에서 사용을 위해 만들어 졌고 2015년 대중에게 공개되었습니다. 쿼리 언어라고 하면 대표적으로 SQL(Structured Query Language) 가 있지요.  다른 언어들과 마찬가지로 문법을 가지고 있는 언어의 일종입니다. 데이터베이스에 질의를 하는 언어이지요.


GraphQL을 왜 만들었지?

이미 REST가 자리를 잡고 있었는데, GraphQL을 만들어 냅니다.

왜냐하면, 같은 쿼리, 같은 엔드포인트에게 아이폰과 갤럭시가 정보를 따로 요청해도 REST는 같은 결과만 줍니다. 이걸 다르게 호출하고 싶었고 그럴때마다 쿼리를 바꿔주는게 비효율적이라고 생각한 것에서 시작 되었습니다.

REST보다 더 표준화된 무언가를 만들자! 해서 만들어 졌습니다.


자세한 설명은 REST와 비교하면 편합니다.


RESTGraphQL
여러개의 엔드포인트가 있고 각 엔드포인트마다 Method도 다름GraphQL API는 하나의 Endpoint만 있고 그쪽으로 쿼리를 보냅니다.
HTTP 프로토톨을 사용합니다.HTTP프로토콜을 사용합니다(어쨌든, 호출은 HTTP로 합니다)
필요한 엔드포인트를 따로따로 호출해야 함쿼리로 한방에 묶어서 한번만 호출함
REST 엔드포인트에서 주는 데이터 모두를 받아야함내가 원하는 정보만 골라서 호출 가능함
파일 전송도 이미지 전송도 슝슝파일 전송이 힘듭니다.(TEXT가 아닌형태, BASE64는 텍스트)
규격화된 상태에서 항상 일정한 호출만 하는 REST는 GraphQL보다 빠름고정된 값만 가지고 오면 되는 쿼리는 Query사이즈가 큽니다.
일정하게 모든 정보를 다 받아야 하기때문에 느릴 수 있음(Overfetching)
또는 부족한 정보라 다른 엔드포인트로 여러번 호출 (Underfetching)
내가 원하는 것만 쏙쏙! REST보다 빠른경향이 있음(항상은 아님)



3. 그럼 뭘 쓰나요?

둘다 쓰세요. 하나만 쓸 필요가 없습니다.  단점과 장점을 서로 커버하시면서 사용하세요. 구역과 역할을 나누어 사용하시면 매우 편리할 것입니다.



4. Django Rest Framework VS Django Graphene

코드에 관련된 차이는 추후 따로 포스팅 할 예정입니다. 대략적인 차이를 설명하는 글 입니다.


DJANGO REST FRAMEWORK:

장고용 웹 API이며, 매우 강력하고 유연하며, 생태계의 크기도 어마어마 합니다. 당신이 생각하는 거의 모든 기능을 다 구현해 낼 수 있습니다. DRF는 Flask 처럼 Micro Framework 의 범주에 들어가고 브라우징 할수 있는 API를 만들고 OAuth1a와 oAuth2를 포함해서 바로 쓸수 있는 인증 툴, 그리고 JSON이나 XML로 시리얼라이즈 할 수 있는 기능들.. 바로 지금 당장 당신의 백엔드를 만들 수 있습니다.


Django Graphene:

Graphene은 쿼리 언어인 GraphQL을 잘 다룰 수 있도록 도와 주는 라이브러리 입니다. DRF에 Browsable API 가 있다면, Graphene에는 '클라이언트가 직접 정하는 스키마'라는 강점이 있습니다. GraphQL의 별명은 "Future of API" 입니다.



지금은 혼합 사용이지만 결국 대세는 GraphQL이 될 것!


  • 누가 DRF를 쓰나요? Django를 백엔드 스택으로 사용중인 거의 모든 업체들이 사용합니다. 
  • 누가 GraphQL을 쓰나요? Twitter, Github, Instagram, Yelp등 이미 많은 기업에서 도입하였습니다.




  • [[a.original_name]] ([[a.file_size | fileSizer]])
좋아요[[ postLike | likePlus ]]
공유
라이언

“Lead Python Engineer”

댓글 [[totalCommentCount]]
[[ comment.author__nick_name ]] [[ comment.datetime_updated | formatDate]] (수정됨)

[블라인드 처리된 글 입니다.]

답장
[[ sub.author__nick_name ]] [[ sub.datetime_created | formatDate ]] (수정됨)

취소
댓글을 남겨주세요.
'Django' 관련 최신 포스트
[[ post.title ]]
[[ post.datetime_published_from | DateOnly ]]