REST는 리소스 중심의 아키텍처 스타일이다. 클라이언트가 URL을 통해 리소스에 접근하소 HTTP 메서드로 CRUD를 수행한다.
GET /users/1
GET /users/1/posts
GET /users/1/comments
REST API는 다양한 엔드포인트로 여러번 요청해야 다양한 데이터를 가져올 수 있다.
Facebook이 개발한 쿼리 언어로, 클라이언트가 필요한 데이터만 선택적으로 요청할 수 있다. 이때, 단일 엔드포인트를 통해 다양한 쿼리를 처리할 수 있다.
/graphql 이라는 엔드포인트만 사용해 모든 요청 처리type User {
id: ID!
name: String!
email: String!
}query {
user(id: 1) {
name
posts {
title
content
}
comments {
text
}
}
}한 번의 요청으로 유저, 게시글, 댓글 모두 가져올 수 있음| 구분 | REST API | GraphQL |
|---|---|---|
| 요청 방식 | HTTP 메서드(GET, POST, PUT, DELETE) | query, mutation, subscription |
| 엔드포인트 | 리소스별로 다수 존재 (/users, /posts) | 단일 엔드포인트(/graphql) |
| 데이터 요청 단위 | 고정된 응답 구조 | 필요한 필드만 선택 가능 |
| 요청 횟수 | 여러 엔드포인트에 다중 요청 필요 | 한 번의 요청으로 여러 리소스 조회 가능 |
| 응답 데이터 | 서버가 정의한 형태 고정 | 클라이언트가 직접 구조 정의 |
| 데이터 포맷 | JSON, XML 등 | JSON |
| 캐싱 | HTTP 캐싱 쉬움 | 구조상 캐싱 복잡 |
| 오버페칭 / 언더페칭 | 발생 가능 | 해결 가능 |
REST API는 리소스 중심으로 단순하고 직관적이며 HTTP 캐싱에 용이하며, GraphQL은 필요한 데이터만 요청하기에 네트워크 효율을 높일 수 있다.