포스트

GraphQL

GraphQL이 해결하려는 문제

GraphQL은 클라이언트가 필요한 데이터 구조를 직접 지정할 수 있게 만든 API 질의 방식이다. REST처럼 엔드포인트별로 정해진 응답을 받는 대신, 하나의 스키마를 기준으로 필요한 필드만 요청한다.

이 방식이 주목받는 이유는 다음과 같다.

  • 필요한 필드만 가져와 over-fetching을 줄일 수 있다.
  • 여러 리소스를 한 요청에서 함께 가져올 수 있다.
  • 타입 시스템 기반으로 API 계약을 명확히 표현할 수 있다.

핵심 개념

Query

데이터 조회를 위한 요청이다. 어떤 필드를 원하는지 클라이언트가 직접 명시한다.

Mutation

데이터 변경을 위한 요청이다. 생성, 수정, 삭제 같은 쓰기 작업을 다룬다.

Schema

GraphQL 서버가 제공할 수 있는 타입과 필드를 정의한 계약이다. GraphQL을 이해할 때 가장 중요한 것은 엔드포인트보다 스키마다.

REST와 비교했을 때 장점

예를 들어 게시글과 작성자 정보를 함께 보여주는 화면이 있다고 하자.

REST에서는:

  • 게시글 목록 API 호출
  • 작성자 정보 API를 추가 호출

같은 형태가 되기 쉽다.

GraphQL에서는 하나의 요청에서 게시글과 작성자 필드를 함께 가져올 수 있다. 모바일이나 복합 화면에서 이 점이 특히 유리하다.

하지만 항상 더 좋은 것은 아니다

GraphQL도 비용이 있다.

  • 서버 쿼리 복잡도 제어가 필요하다.
  • 캐싱 전략이 단순 REST보다 어려울 수 있다.
  • 스키마와 리졸버 설계가 잘못되면 N+1 문제가 커진다.

즉 GraphQL은 만능 대체재가 아니라, 복잡한 조회 조합을 많이 다루는 시스템에서 강한 도구에 가깝다.

언제 잘 맞나

  • 화면마다 필요한 데이터 조합이 자주 달라진다.
  • 프런트엔드 팀이 응답 필드를 더 유연하게 제어해야 한다.
  • 여러 리소스를 조합한 조회가 빈번하다.

반대로 단순 CRUD 중심 내부 API라면 REST가 더 단순하고 유지보수하기 쉬울 수 있다.

정리

GraphQL의 본질은 “쿼리 언어”보다 클라이언트가 데이터 모양을 제어하는 API 계약 방식에 있다. 장점은 유연성이고, 비용은 복잡도 관리다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

댓글

아직 댓글이 없습니다