GraphQL 이란?

OhJuYeong·2025년 8월 31일
post-thumbnail

GraphQL 을 쓰는 일이 생길 것 같아서 가볍게 무엇인지 알아보았다.

📌 GraphQL 이란?

GraphQL은 페이스북에서 만든 쿼리 언어이다. SQL과 마찬가지로 쿼리 언어라고 볼 수 있다.
SQL과는 언어적 구조 차이, 실전에서 쓰이는 방식이 매우 크다.
SQL은 데이터베이스 시스템에 저장된 데이터를 효율적으로 가져오는 것이 목적이고 주로 백엔드 시스템에서 작성하고 호출한다.
GraphQL은 웹 클라이언트가 데이터를 서버로부터 효율적으로 가져오는 것이 목적이고 주로 클라이언트 시스템에서 작성하고 호출한다.

GraphQL 예시

{
  hero {
    name
    friends {
      name
    }
  }
}

📌 RestAPI vs GraphQL

RestAPI는 URl, Method 등을 조합하기 때문에 다양한 Endpoint가 존재 하지만 GraphQL은 하나의 Endpoint만 존재한다. 또한 GraphQL API에서는 불러오는 데이터의 종류를 쿼리 조합을 통해 결정 예를 들어, Rest API에서는 각 Endpoint 마다 데이터 베이스 SQL 쿼리가 달라지는 반면, GraphQL API는 GraphQL 스키마의 타입마다 데이터 베이스 SQL 쿼리가 달라진다.

📌 GraphQL 구조

쿼리/뮤테이션

GraphQL 쿼리문 우측은 응답데이터 형식이다.
GraphQL은 쿼리와 뮤테이션으로 나누는데 쿼리는 데이터 읽는 데 사용하고 뮤테이션은 데이터를 변조하는데 사용한다.

GraphQL은 프론트엔드와의 협업 방식에 영향을 준다.
기존에는 백엔드에서 전달해주는 API 요청, 응답 형식에 의존했지만 GraphQL을 사용한 방식은 의존도가 많이 사라지게 된다.

📌 리졸버(resolver)

데이터 베이스 사용시, 데이터를 가져오기 위해 SQL을 작성했고 데이터베이스 어플리케이션을 사용해 데이터를 가져오는 구체적인 과정이 구현 되어있었다. 하지만 GraphQL에서는 데이터 가져오는 구체적인 과정을 직접 구현해야한다.
GraphQL 쿼리문 파싱은 대부분 라이브러리에서 처리하지만 GraphQL에서 데이터를 가져오는 구체적인 과정은 resolver가 담당하고 이를 직접 구현해야한다.

GraphQL 쿼리에서는 각각의 필드마다 함수가 하나씩 존재한다고 생각하면 된다. 각각의 함수를 리졸버 라고 한다.

📌 장점

  1. 효율적인 데이터 로딩
  • 클라이언트가 필요한 데이터만을 정확히 요청할 수 있어서 네트워크 사용을 최적화 할 수 있고 오버페칭과 언더페칭을 방지
  1. 강력한 타이핑 시스템
  • GraphQL 스키마는 API의 모든 객체 타입을 명확하게 정의한다. API를 문서화 하는 동시에 클라이언트와 서버 간의 계약으로 작용하여 개발 중 버그 발생 가능성을 줄여준다.
  1. 요청과 응답의 유연성
  • 하나의 요청으로 여러 리소스를 가져오거나 복잡한 데이터 구조를 한번에 조립할 수 있다.
  1. 실시간 데이터
  • GraphQL서버를 Websockets와 연결하여 구독을 통해 실시간으로 데이터 변경을 클라이언트에 푸시할 수 있다.

📌 단점

  1. 쿼리 복잡성
  • 복잡한 쿼리는 서버에 큰 부담을 줄 수 있다. N+1 문제를 야기할 수 있다.
  1. 캐싱의 어려움
  • HTTP 캐싱은 URL 기반으므로 REST API에서는 자연스럽게 지원된다. 그러나 GraphQL은 대개 하나의 엔드포인트를 사용하므로 , 캐싱이 더 복잡해질 수 있다.
  1. 파일 업로드
  • GraphQL 자체는 파일 업로드를 지원하지 않는다. 따라서 파일 업로드를 구현하려면 멀티파트폼 요청을 처리하거나별더의 라이브러리를 사용해야한다.
  1. 학습 곡선
  • GraphQL은 새로운 개념과 다양한 요소를 도입함으로써 상당한 학습 곡선을 가진다.

GraphQL이 그냥 무엇인지에 대한 개념을 알게 된 것 같다. 직접 사용하고 만드려면 조금 더 깊이 공부해야할 것 같다. 어려운 친구다 !!!!!

[참고 자료]
https://tech.kakao.com/posts/364
https://ian-info.tistory.com/18

profile
기록하는 개발자

0개의 댓글