티스토리 뷰

반응형

Frontend Weekly에 실린 https://stackoverflow.blog/2022/11/28/when-to-use-grpc-vs-graphql/ 을 보며 간략하게 정리해보았다.

gRPC는 처음 들어봤고 GraphQL은 갯츠비 쓸때나 잠깐 맛본 정도.

 

 

 

공통점

  • IDL 언어이다 (Interface Description Language) 
  • network layer를 추상화한다 
  • REST가 가지고 있던 Overfetching의 문제점을 해결한다
    • Overfetching이란, 응답받은 정보에 사용하지않을 불필요한 데이터가 많이 담겨있는 경우를 말한다. 즉, 클라이언트 입장에서 필요한 데이터 필드는 3개인데 응답에는 10개가 담겨있는 것이다. 예를 들어, 상품 정보를 가져오는 데이터 API가 있다고 하자. 클라이언트 개발팀은 작업을 하면서 이런저런 필드를 추가해달라고 요청할 수 있고, API가 담고있는 상품 정보는 점점 더 거대해진다. 하지만 그 중에서 상품명만을 필요로 하는 경우가 생긴다면? 클라이언트는 상품명을 얻기 위해 수많은 정보가 담긴 API를 호출해야한다. 
  • 클라이언트로의 server streaming을 지원한다. 

 

차이점

  • Message Format.  gRPC는 binary format을 쓰고 GraphQL은 JSON을 쓴다 
    • 그래서 데이터 크기만 놓고 보면 gRPC가 훨씬 더 가볍다. 
    • gRPC는 imperative , GraphQL은 declarative 라고들 하는데 확실히 사람이 보고 이해하기에는 후자가 훨씬 더 쉽다. 
  • GraphQL은 단 하나의 Single Request를 보내는 것에 초점이 맞춰져있다. 여러번의 round trip이 발생할 일이 없음 
    • B를 얻기 위해 A라는 데이터가 필요한 경우. 보통은 A 요청 -> A 받음 -> B요청 -> B받음의 단계를 거칠 것이다. 하지만 GraphQL은 쿼리에 A와 B를 한번에 담아 보내고, A,B요청 -> A,B 받음 으로 끝난다. 물론 서버 내부에서는  A를 얻고 B를 얻으려고 하겠지만, 보통 동일한 데이터 센터 내부에서 일어나는 과정이므로 지연 시간이 굉장히 짧다. 클라이언트<-> 서버 통신 지연시간과는 비교도 안될만큼. 
  • 하나의 메소드가 제공하는 것보다 더 많은 데이터를 필요로 할 경우, gRPC는 여러개의 메소드를 호출해야할 수도 있다. 하나의 데이터를 얻기 위해 다른 데이터가 필요할 경우, 연속적으로 round trip이 발생할 수 있다. 위에 서술한 GraphQL과 다르게 말이다. 이런 경우를 Underfetching이라고 부른다. 
반응형

'Web 공부 > etc' 카테고리의 다른 글

Sublime Text 개발환경 세팅하기  (0) 2017.09.12
댓글