🔙뒤로가기
GraphQL의 개념
Facebook에서 개발하고 2015년에 공개한 데이터 질의어이며 API를 위한 쿼리 언어이다. GraphQL은 클라이언트 측에서 필요한 데이터를 정확하게 요청할 수 있도록 해준다. 즉, 클라이언트가 서버로부터 필요한 정보만을 받아올 수 있게 하는 구조를 가지고 있다.
GraphQL의 특징
- 데이터 중심적 접근 :
GraphQL은 데이터 중심적인 접근을 통해 클라이언트가 필요한 데이터의 구조를 정의하고, 그에 따른 데이터를 받아올 수 있다.
- 타입 시스템 :
GraphQL은 강력한 타입 시스템을 가지고 있어, 요청의 형태와 반환되는 데이터의 형태를 정확하게 지정할 수 있다.
- 하나의 요청 :
클라이언트는 하나의 요청으로 필요한 모든 정보를 가져올 수 있다. 즉, 복잡한 데이터 구조를 요청할 때, 여러 API 요청 대신 하나의 GraphQL 쿼리로 충분하다.
- 클라이언트 주도 :
GraphQL은 클라이언트 주도형 아키텍처이기 때문에 클라이언트에서 필요한 데이터를 지정하고, 그에 따라 서버가 응답한다. 이로 인해 데이터 오버페치와 언더페치 문제를 효과적으로 해결한다.
- 실시간 업데이터 :
GraphQL의 Subscription 기능을 통해 서버에서 클라이언트로 실시간 데이터를 전달하는 것이 가능하다.
- API 버전 관리 필요 없음 :
필요한 정보를 정확하게 요청할 수 있기 때문에, 기존의 REST API에서 발생하는 여러 버전의 API를 관리하는 문제가 발생하지 않는다.
<aside>
💡 데이터 오버페칭(Over-fetching)과 언더페칭(Under-fetching이란?
- 오버페칭 :
클라이언트가 필요한 데이터보다 많은 데이터를 서버에서 받아오는 상황을 말한다. 예를 들어, 사용자의 이름만 필요한데 서버에서는 이름, 이메일, 주소 등 추가 정보를 모두 보내주는 경우가 있다. 이는 네트워크 트래픽의 낭비를 초래하며, 클라이언트에서 불필요한 데이터를 처리하는 과정에서 리소스를 불필요하게 사용한다.
- 언더페칭 :
반대로 클라이언트가 필요한 모든 정보를 한 번의 요청으로 받아오지 못하는 상황을 말한다. 예를 들어, 특정 사용자가 프로필과 그 사용자가 작성한 게시물들을 보여주는 페이지가 있다고 가정하자. RESTful API에서는 프로필 정보를 요청하는 API와 게시물 정보를 가져오는 API, 즉 최소 2번의 API 요청이 필요하다. 이는 여러 번의 요청으로 인한 비효율성과 레이턴시 문제를 초래한다.
</aside>