GraphQL

김기현·2022년 5월 21일
1
post-thumbnail

GraphQL

GraphQLREST API처럼 하나의 specification입니다.GraphQL을 사용하기 이전에 API란 무엇일까요? 그리고 REST API는 무엇일까요?

API

API는 Application Programming Interface의 두문자입니다.다. Interface는 무엇인가와(TV) 무언가를(리모컨) 이용해서 상호작용하는 방식입니다.
그래서 API는 컴퓨터나 컴퓨터 프로그램 사이의 연결 즉, 프로그램들이 서로 소통하는 방법으로 해석할 수 있습니다. 주로 어플리케이션과 상호작용할 때 사용합니다.

REST API

평소 REST API에 따라서 HTTP 위에서 백과 프론트가 소통을 합니다. 그때 프론트가 백에게 요청하는 일은(대부분) DB에 저장되어있는 데이터를 요청하는 일 입니다. 요청이 되면 sql(Structured Query Language)을 이용해서 DB의 프론트가 요청한 API에 알맞은 데이터를 가져와서 보내주는 역할을 합니다.

tanonmovies.co/api/movies
tanonmovies.co/api/movies/1
tanonmovies.co/api/search?rating=9

데이터를 받아오는 방법은 아마 다음과 같습니다. URL 뭉치로 조직화되어있고, 한눈에 봐도 이해하기 쉽습니다.

REST + HTTP

tanonmovies.co/api/create

해당 URL은 create할 것처럼 보이는 URL로 보입니다. (URL에 동사를 넣는 것은 좋은 방법이 아닙니다.) 하지만 어떤 사람은 add, upload라는 단어를 사용할 수도 있기에 항상 문서를 살펴봐야 합니다. 그래서 REST api로 작업하는 것이 쉽지만은 않습니다.

위의 해당 사항 때문에 HTTP 메서드에 의존합니다.

알다시피, 사람들이 웹사이트에 요청을 보낼 때 브라우저는 항상 자동적으로 GET이라는 요청을 보냅니다. 데이터 또는 form을 보낼 때는 POST 메서드를 사용합니다. HTTP 메서드는 사람들이 만들지도 못하고 바꾸지도 못합니다. 그래서 표준 명세를 가지고 사용합니다.

HTTP 메서드는 사진과 같습니다. HTTP 메서드와 URL은 API가 더 많은 일을 하도록 합니다.

GET tanonmovies.co/api/movies
POST tanonmovies.co/api/movies

위의 URL은 같지만 메서드가 다르기 때문에 백엔드 서버는 다른 역할을 합니다.

GraphQL

일반적인 REST API가 가지고 있는 문제점을 GraphQL은 해결하고 있습니다. 그러면 GraphQL은 무엇일까요?

GraphQL은 REST API처럼 하나의 specification입니다. 맨처음 Facebook의 모바일 앱은 2012년부터 GraphQL로 만들어졌고, 2015년도부터 오픈소스가 되었습니다.

그렇다면 REST api의 어떤 문제점을 GraphQL은 해결하고 있을까요? 바로 아래의 두가지 문제점 때문입니다.

  • Overfetching
    필요한 데이터보다 더 많은 데이터를 fetch하는 것을 말합니다.

아래는 영화 사이트에서 ID가 10인 정보를 불러오는 API입니다.

https://yts.mx/api/v2/movie_details.json?movie_id=10
사용하는 데이터가 일부분일텐데 그 이외에 너무 많은 정보들이 담겨 있습니다. 이는 백엔드 서버나 데이터베이스가 더 많이 일을 해야 한다는 의미입니다. 왜냐면 영화에 관한 모든 data가 주어저야 하기 때문입니다. 당연히 데이터를 불러오는데 시간이 많이 걸릴 것으로 예상됩니다.

GraphQL을 사용하면 API에 GraphQL 쿼리를 보내고 필요한 것만정확히 얻을 수 있으며 GraphQL 쿼리는 항상 예측 가능한 결과를 반환합니다.

  • Underfetching
    필요한 데이터보다 적은 데이터를 fetch하는 것을 말합니다.

어떤 영화인지 장르를 찾아야 할 때 숫자만 반환받았습니다. 어떠한 정보인지를 받지 못했는데, 이렇게 된다면 영화에 대한 정보를 얻은 후 다시 장르에 대한 정보를 얻는 API에 fetch해야 합니다. 다른 URL에 두번이나 요청을 보내게 되는 것입니다. 요청해야 하는 API가 많으니 로딩 시간이 더 오래 걸릴 수 있습니다.

일반적인 REST API는 여러 URL에서 로딩해야 하는 상황이 발생하지만, GraphQL API는 앱에 필요한 모든 데이터를 단일 request로 가져옵니다. 그래서 GraphQL을 사용하는 앱은 느린 모바일 네트워크 연결에서도 빠를 수 있습니다.

REST api와 GraphQL api가 소통하는 방식은 아래의 사진과 같습니다.

profile
피자, 코드, 커피를 사랑하는 피코커

0개의 댓글