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의 활용 예
- 프론트엔드 개발 최적화 (React, Vue 등에서 필요한 데이터만 요청)
- 모바일 API 요청 최적화 (불필요한 데이터 제거로 성능 개선)
- 마이크로서비스 연동 (단일 GraphQL API로 여러 서비스 데이터를 조합)
- 실시간 서비스 개발 (채팅, 주식 정보 업데이트 등)
728x90
'GraphQL' 카테고리의 다른 글
[GraphQL] 기본 문법 (0) | 2025.03.03 |
---|---|
[GraphQL] GraphQL Voyager (0) | 2025.03.03 |
[GraphQL] Altair (0) | 2025.03.03 |