[CS] GraphQL

·2023년 1월 27일
0

🔯 GraphQL이란?


Server API를 구성하기 위해 Meta에서 만든 Query 언어이다. 이는 클라이언트가 데이터를 서버로부터 가져오는 것을 목적으로 하는 언어다.

위키백과에 따르면 그래프QL은 페이스북이 2012년에 개발하여 2015년에 공개적으로 발표된 데이터 질의어이다. 그래프QL은 REST 및 부속 웹서비스 아키텍처를 대체할 수 있다고 한다. rest-API에 비해 GraphQL의 장점은 클라이언트의 필요한 데이터의 구조를 지정할 수 있으며, 서버는 정확히 동일한 구조로 데이터를 반환할 수 있다는 것이다.

이렇게 원하는 데이터만 골라서 가져올 수 있는 장점은 사용자가 많은 서비스에서 큰 진가를 발휘하는데, 바로 데이터 처리에 있어서 네트워크 비용절감 효과와 빠른 속도를 낼 수 있다는 점이 있다.

GraphQL의 Query는 Rest-API와 다르게 단 두개로 이루어져있는데 다음과 같다.

요청방식REST-APIGraphQL
조회GETQUERY
생성POSTMUTATION
삭제DELETEMUTATION
수정PUTMUTATION

RestAPI의 여러 요청방식과 다르게 단 두 개로 이루어진 GraphQL의 요청방식은 Mutation과 Query로 이루어져있는데, 이 둘은 각각 DB에서 데이터가 변경되느냐 안되느냐의 유무에 따라 사용될 수 있다.

GraphQL의 API 이름은 일반적인 함수의 이름과 비슷하게 생겨서 다른 부분보다 친숙하게 다가 올 수 있을 것 같다.

👍 장점


  • 서버에서 필요한 것을 정확히 선언하고 예측 가능한 방식으로 요청된 데이터를 수신한다.
  • 단일 요청으로 서버에서 많은 리소스를 검색한다.
  • 개발 시간을 줄일 수 있다.(코드 생성기 도구와 통합)

    코드 생성기 도구?
    GraphQL Code Generator를 말하는 것 같다. 이는 어플리케이션 단에서 사용하는 언어에 따라 GraphQL Schema / Operations를 자동으로 생성해 주는 툴이라고 한다.

  • REST API보다 성능과 유연성을 최적화.
  • API 버전 관리가 필요하지 않는다.
  • Schema 및 유형 안전성
    • API 사용자가 사용 가능한 데이터와 데이터가 어떤 형식으로 존재하는 지에 대해 알 수 있다.

👎 단점


  • 내장된 캐싱 매커니즘이 부족하다.
    • 기본적으로 HTTP의 캐싱 전략을 그대로 사용하는 REST API에 비해 GQL은 URL 하나로 처리하기에 HTTP의 캐싱 전략을 그대로 사용하는 것이 불가능하다.
    • 독자적 캐싱 방법을 제공한다.
  • 파일 업로드에 대한 방법은 별도로 로직을 구성해야한다.
    • Base64 인코딩 사용.
    • Upload를 위해 분리된 API 사용.
    • Apollo-Upload-Server 같이 GraphQL Multipart 요청 명세를 구현하는 라이브러리 사용.
  • 고정된 요청과 응답이 필요한 경우에는 오히려 리소스 낭비다.
profile
뉴비는 문서화를 습관화 해보자

0개의 댓글