REST API와 GraphQL

eeensu·2023년 8월 8일
0

GraphQL

목록 보기
1/6
post-thumbnail

[14.5.8 버전]

개요

데이터를 가져오는 API의 방법으로 대표적인 REST(Representational State Transfer) API가 있다. REST API는 API 작동 방식에 대한 조건을 부여하여 모든 데이터들을 하나의 endpoint(연결점)에 연결해놓고, 각 Endpoint 는 그 Resource 와 관련된 내용만 관리하게 하자는 방법론이다.

즉, 자원(resource)의 표현(representation)을 통한 상태를 전달하며, 좁은 의미로 HTTP를 통해 CRUD(Create, Read, Update, Delete)를 실행하는 API를 뜻한다. resource의 표현은 그 자원을 표현하기 위한 이름으로, 예를들어 DB의 유저정보가 resource라면 user를 resource의 표현으로 정한다.

이런 REST 의 조건을 만족하는 API 를 RESTful API 라고 부르고, 이런 방식으로 API를 작성하는 것을 RESTful 하다고 한다. 이러한 API가 이전까지는 잘 사용되었지만, 실제 개발 프로세스에서 다음의 몇 가지 제한과 어려움이 드러나게 되었다.

  • RESTful API는 프론트에서 원하는 정보만 가져오기 어렵다.

  • 필요한 정보를 각각의 endpoint로 구현하는 것이 힘들었다. 예시로, ios와 android에서 필요한 정보들이 조금씩 달랐고, 그 다른 부분마다 API를 구현하는 것이 힘들었다.

  • Facebook처럼 같은 홈 화면이어도, 모바일 웹 / 모바일 앱 / pc 웹 경우 각각 다른 UI로 화면을 구성할 필요가 생겼다. 동일한 DB로 다양한 UI를 구성하는 기능이 요구된 것이다.


이러한 문제점을 해결하기 위해서 facebook에서 만든 API용 쿼리 언어인 GraphQL 를 제작했다. 프론트에서 쿼리를 통해 서버의 데이터를 요청하는 데이터 통신 기술이라 할 수 있다.


GraphQL은 API의 데이터에 대한 완전하고 이해하기 쉬운 사용을 제공하고 클라이언트에게 필요한 것을 정확히 요청할 수 있는 권한을 제공하며 시간이 지남에 따라 API를 더 쉽게 발전시켜준다.

또한 GraphQL은 기존의 REST API의 단점과 한계를 해소시켜준다. 그렇다면 두 API 간의 어떤 차이가 있을까? 유저의 정보와, 유저의 포스트, 유저의 팔로워 수를 요청하는 API 예시를 통해 알아보자.


예시

// REST API
/api/users/{id}
/api/users/posts?userid={id}
/api/users/followers/:userid

REST API - 3가지의 정보가 필요하르모 3번의 API 요청이 필요하다.

# GraphQL								# GraphQL의 주석은 '#' 이다.
query {
   User(id: id) {
       name
       posts { title }
       followers { name }
   }
}

GraphQL - 단 하나의 요청으로 3가지의 정보를 받을 수 있다.





차이점

두드러지는 차이점은 아래와 같다.

  • 성능
    • REST
      만약 다수의 데이터가 필요할 경우, 여러 번의 요청이나 여러 엔드포인트를 통해 데이터를 가져와야 하므로 불필요한 리소스 소모가 발생할 수 있다.
    • GraphQL
      클라이언트가 필요한 데이터를 정확하게 요청하므로, 필요 없는 데이터를 가져오지 않아 불필요한 네트워크 부하가 줄어들 수 있다.

  • 데이터 요청 방식
    • REST
      클라이언트는 사전에 정의된 엔드포인트로 요청을 보내고, 서버는 그에 해당하는 데이터를 반환한다.
    • GraphQL
      클라이언트가 필요한 데이터를 쿼리로 요청하며, 서버는 해당 쿼리의 결과를 정확하게 반환한다. R리턴하는 값의 주도권이 REST API는 서버가 갖고 있다면, GrapQL은 주도권을 client가 갖고 있다.

  • 불필요한 데이터

    • REST
      어떤 특정 데이터를 위해 REST API는 엔드포인트로 데이터를 요청한다. 하지만 요청의 반환값에는 클라이언트가 필요하지 않은 데이터도 포함될 수 있는 오버패칭 문제가 있다.

    • GraphQL
      클라이언트가 필요한 데이터만 요청하는 쿼리를 작성하여 필요한 데이터만 가져올 수 있다. 때문에 기존 REST API의 오버패칭 문제를 해소하였다.


  • 버전 관리의 유연성

    • REST
      새로운 버전을 추가하거나 기존 엔드포인트를 변경해야 할 경우, 클라이언트와 서버 간의 호환성을 유지하기 위해 추가적인 관리가 필요하다.

    • GraphQL
      API 스키마를 정의하고 버전을 클라이언트가 관리함으로써 클라이언트와 서버 간의 호환성을 유지하면서 새로운 필드와 타입을 추가하거나 변경할 수 있다.

이러한 배경과 동기로 인해 GraphQL은 데이터 요청 및 조작에 있어 REST API의 한계를 극복하고 더 유연하고 효율적인 방식으로 데이터를 다룰 수 있는 새로운 접근 방식으로 등장하게 되었다. 다음 포스트에서 GraphQL에 더 자세히 알아보자.

profile
안녕하세요! 26살 프론트엔드 개발자입니다! (2024/03 ~)

0개의 댓글