GraphQL

[GraphQL] GraphQL이란?

kyoulho 2025. 3. 3. 18:17
728x90

GraphQL은 Facebook이 개발한 API 쿼리 언어 및 실행 환경으로, 클라이언트가 원하는 데이터를 정확하게 요청할 수 있도록 설계되었습니다. REST API와 달리, 특정 엔드포인트가 아닌 단일 엔드포인트에서 요청을 처리하며, 클라이언트가 원하는 데이터 구조를 직접 정의할 수 있습니다.


GraphQL의 특징

1. 클라이언트가 원하는 데이터만 요청 가능 (Over-fetching & Under-fetching 해결)

  • REST API는 고정된 응답을 반환하여, 불필요한 데이터가 포함될 수 있음 (Over-fetching).
  • 반대로 필요한 데이터를 가져오지 못해 추가 요청이 필요할 수 있음 (Under-fetching).
  • GraphQL에서는 클라이언트가 필요한 데이터만 요청할 수 있도록 설계됨.
query {
  user(id: "1") {
    name
    email
  }
}
// 위와 같이 요청하면 name, email 필드만 반환됨.

2. 단일 엔드포인트 (Single Endpoint)

  • REST API는 여러 개의 엔드포인트(GET /users, GET /users/1/posts 등)를 관리해야 하지만,
    GraphQL은 단일 엔드포인트 (/graphql)를 사용하여 모든 요청을 처리할 수 있음.

3. 계층적 데이터 구조 (Hierarchical Structure)

  • GraphQL의 요청 및 응답 구조는 객체(Entity) 간의 관계를 반영하여 계층적으로 설계됨.
  • REST API에서는 여러 번 요청해야 할 데이터를, GraphQL은 한 번의 요청으로 해결할 수 있음.
query {
  user(id: "1") {
    name
    posts {
      title
      comments {
        content
      }
    }
  }
}

위와 같이 한 번의 요청으로 user → posts → comments 관계 데이터를 가져올 수 있음.

4. 타입 시스템 (Schema & Strongly Typed)

  • GraphQL은 스키마(Schema) 를 기반으로 작동하며, 명확한 타입을 정의할 수 있음.
  • 예를 들어, User 타입을 정의하면 다음과 같음:
type User {
  id: ID!
  name: String!
  email: String!
  posts: [Post]
}
  • API 문서화를 자동화할 수 있으며, 잘못된 요청을 사전에 방지할 수 있음.

5. 실시간 데이터 업데이트 (Subscription)

  • REST API는 주로 Polling 방식으로 데이터를 가져오지만, GraphQL은 Subscription을 지원하여 실시간 데이터 업데이트가 가능함.
  • WebSocket을 활용하여 서버에서 변경 사항이 발생하면 클라이언트에 즉시 전송할 수 있음.
subscription {
  newMessage {
    content
    sender {
      name
    }
  }
}

 

6. 배치 요청 가능 (Batching & Caching)

  • GraphQL은 여러 개의 요청을 한 번에 묶어 처리할 수 있으며, DataLoader 같은 도구를 활용하여 N+1 문제를 해결할 수 있음.
  • 특정 요청 결과를 캐싱하여 API 성능을 최적화할 수도 있음.

 

GraphQL vs REST API 비교

  GraphQL RestAPI
데이터 요청 방식 클라이언트가 원하는 필드만 요청 가능 서버가 미리 정의한 응답 구조
엔드포인트 개수 하나 (/graphql) 여러 개 (/users, /posts 등)
Over-fetching / Under-fetching 해결 가능 해결 어렵거나 추가 요청 필요
데이터 관계 계층적 요청 가능 여러 개의 요청 필요
타입 시스템 스키마 기반 타입 강제 타입 강제가 없음
실시간 기능 Subscription 지원 주로 Polling 방식
캐싱 최적화 DataLoader 사용 가능 브라우저 및 CDN 기반 캐싱

 

GraphQL의 활용 예

  1. 프론트엔드 개발 최적화 (React, Vue 등에서 필요한 데이터만 요청)
  2. 모바일 API 요청 최적화 (불필요한 데이터 제거로 성능 개선)
  3. 마이크로서비스 연동 (단일 GraphQL API로 여러 서비스 데이터를 조합)
  4. 실시간 서비스 개발 (채팅, 주식 정보 업데이트 등)

 

728x90

'GraphQL' 카테고리의 다른 글

[GraphQL] 기본 문법  (0) 2025.03.03
[GraphQL] GraphQL Voyager  (0) 2025.03.03
[GraphQL] Altair  (0) 2025.03.03