티스토리 뷰

Programming/Etc..

GraphQL 이 뭐지 ?

dd_dev 2019. 7. 29. 10:19

GraphQL ?

  • 여기저기서 GraphQL에 대한 내용이 많이 나온다. 무슨 개념인지 정리해 보고자 했다.

    GraphQL 은 API를 위한 쿼리 언어이며 타입 시스템을 사용하여 쿼리를 실행하는 서버사이드 런타임입니다. 
    GraphQL은 특정한 데이터베이스나 특정한 스토리지 엔진과 관계되어 있지 않으며 기존 코드와 데이터에 의해 대체됩니다.
  • GraphQL 은 Graph Query Language 의 줄임말이다.

  • 탄생배경?

    Facebook 의 GraphQL blog 에서는 다음과 같이 이유를 밝히고 있다.
    
    RESTful API 로는 다양한 기종에서 필요한 정보들을 일일히 구현하는 것이 힘들었다.
    예로, iOS 와 Android 에서 필요한 정보들이 조금씩 달랐고, 그 다른 부분마다 API 를 구현하는 것이 힘들었다.
    이 때문에 정보를 사용하는 측에서 원하는 대로 정보를 가져올 수 있고,
    보다 편하게 정보를 수정할 수 있도록 하는 표준화된 Query language 를 만들게 되었다.
    이것이 GraphQL 이다.
    1. GraphQL API 는 주로 하나의 Endpoint 를 사용한다.
    2. GraphQL API 는 요청할 때 사용한 Query 문에 따라 응답의 구조가 달라진다
  • API 응답의 구조
    RESTful API 는 하나의 Endpoint 에서 돌려줄 수 있는 응답의 구조가 정해져 있는 경우가 많다.
    API 를 작성할 때 이미 정해놓은 구조로만 응답이 오게 되는 것이다.
    반면, GraphQL 은 사용자가 응답의 구조를 자신이 원하는 방식으로 바꿀 수 있다.

Example

  • 데이터를 표현하세요
    type Project {
    name: String
    tagline: String
    contributors: [User]
    }
  • 원하는 것을 요청하세요
    {
    project(name: "GraphQL") {
      tagline
    }
    }
  • 예측가능한 결과를 얻으세요
    {
    "project": {
      "tagline": "A query language for APIs"
    }
    }

GraphQL 의 장점 ?

  • Clean API between backends and frontends
  • Less communication overhead and fewer meetings
  • No more time spent writing API documentation
  • No more time spent trying to figure out an API
  • Great tooling for your API

GraphQL or RESTful?

그렇다면 GraphQL 과 RESTful 중 어떤 것을 선택해서 사용해야하는가?
다음과 같은 기준으로 선택하면 될 것이다.

  • GraphQL
    • 서로 다른 모양의 다양한 요청들에 대해 응답할 수 있어야 할 때
    • 대부분의 요청이 CRUD(Create-Read-Update-Delete) 에 해당할 때
  • RESTful
    • HTTP 와 HTTPs 에 의한 Caching 을 잘 사용하고 싶을 때
    • File 전송 등 단순한 Text 로 처리되지 않는 요청들이 있을 때
    • 요청의 구조가 정해져 있을 때

그러나 더 중요한 것은, 둘 중 하나를 선택할 필요는 없다는 것이다.

내생각에... GraphQL 의 특징 ?

자료를 찾아보면서 느낀점은, GraphQL 은 정말 다양한 EndPoint가 필요하고, 그때마다의 데이터 량이 어마어마한데다가, 받아오는 데이터의 종류가 다를때 유용한 것 같다. 만약, 사용자 이름 10만명을 가져오는 데이터가 필요할때, 기존의 정의된 사용자 LIST 를 가져오는 API 를 썼다고 가정하면, 기존의 API 는 아마 사용자의 모든 정보를 가져오고 있을거다. 이름뿐만 아니라, 나이, 성별, 혈액형 같은 정보들... 하지만 지금 필요한 정보는 오직 사용자의 이름 뿐인데, 이렇게 많이 가져오는것은 낭비다. 이럴때 GraphQL은 같은 Endpoint 로 내가 가져오고 싶은 정보만 쏙 뽑아서 통신할 수 있다는 점 ? 응답의 형식이 다른데 Endpoint 는 단 하나라는점이 가장 큰 장점으로 보인다.

GraphQL ... 필요한가 ?

처음에 관심을 가졌던 계기도, DB 를 대체하는 느낌인줄 알았다. 개인 프로젝트에 mongoDB 를 대체할 만한 무언가를 생각해보다가 들여다본게 전부다. 의문이든다. 사실 회사 일을하며 방대한 정보의 Request 를 고려해볼 기회는 없다. 내가 하는 업무는 외부에 노출된 시스템도 아니며, 사내의 사용자가 엄청나게 많은 그런시스템도 다뤄본적이 없다. 사실 API 가 그렇게 많이 필요하지도 않다. 그냥 이런게 있다라는 정도만 짚고가도 되지 않을까 싶다.

참고

'Programming > Etc..' 카테고리의 다른 글

AWS 프리티어 가이드 (linux / npm)  (599) 2019.07.20
Ionic2 강좌  (593) 2017.03.26
[GIT] ignore설정법  (588) 2017.03.04
[생활코딩] 정규표현식  (1311) 2017.02.22
[Axis2] Eclipse 에서 WebService 만들기  (958) 2017.02.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함