REST는 리소스 기반 URL과 HTTP 메서드로 CRUD를 수행하며, 서버가 응답 구조를 결정합니다. GraphQL은 단일 엔드포인트에서 클라이언트가 필요한 데이터 구조를 쿼리로 지정합니다. REST는 Over-fetching/Under-fetching 문제가 있지만 HTTP 캐싱이 용이하고, GraphQL은 정확한 데이터만 받지만 캐싱에 추가 전략이 필요합니다.
01 · Concept
GraphQL vs REST
REST와 GraphQL은 API를 설계하는 두 가지 주요 패러다임입니다. 각각의 장단점과 적합한 사용 사례를 이해해야 합니다.
REST는 리소스 기반 URL로 직관적이지만, Over-fetching(불필요한 데이터 수신)과 Under-fetching(추가 요청 필요) 문제가 있습니다.GraphQL은 클라이언트가 필요한 데이터를 정확히 쿼리하여 이 문제를 해결하지만, N+1 문제나 캐싱 전략 등 새로운 과제가 생깁니다.
02 · Interactive Demo
REST vs GraphQL 요청/응답 비교
Over-fetching, Under-fetching 문제를 시각적으로 비교하세요.
필요한 데이터: name, email만 필요
REST
Request
GET /api/users/1 HTTP/1.1 Host: api.example.com Accept: application/json
Response
{
"id": 1,
"name": "Kim",
"email": "kim@example.com",
"phone": "010-1234-5678",
"address": "Seoul, Korea",
"company": "FE Lab",
"website": "felab.dev",
"createdAt": "2024-01-01"
}2/8 필드
GraphQL
Request
POST /graphql HTTP/1.1
Content-Type: application/json
{
"query": "{ user(id: 1) { name, email } }"
}Response
{
"data": {
"user": {
"name": "Kim",
"email": "kim@example.com"
}
}
}2/2 필드
REST: 불필요한 6개 필드 전송 (Over-fetching)
03 · Code Example
코드 예시
실제 코드로 동작 원리를 확인하세요.
// REST: 여러 엔드포인트
GET /api/users/1
GET /api/users/1/posts
GET /api/users/1/followers
DELETE /api/posts/42
// GraphQL: 단일 엔드포인트
POST /graphql
{
"query": `
query GetUser($id: ID!) {
user(id: $id) {
name
email
posts { title, createdAt }
followers { name }
}
}
`,
"variables": { "id": "1" }
}04 · Interview Point
면접 핵심 질문
장점: 1. 필요한 데이터만 요청 (네트워크 효율) 2. 스키마 기반 타입 시스템으로 자동 문서화 3. 단일 요청으로 관련 데이터 조회 4.
단점: 1. 학습 곡선이 높음 2. HTTP 캐싱 활용 어려움 3. 파일 업로드 처리 복잡 4. N+1 문제 발생 가능 (DataLoader로 해결).
Subscription으로 실시간 기능 내장.단점: 1. 학습 곡선이 높음 2. HTTP 캐싱 활용 어려움 3. 파일 업로드 처리 복잡 4. N+1 문제 발생 가능 (DataLoader로 해결).
중첩된 관계를 조회할 때 부모 N개에 대해 각각 자식 쿼리가 실행되어총 N+1번의 데이터베이스 조회가 발생하는 문제입니다. 예를 들어 10명의 사용자와 각각의 게시글을 조회하면 1(users) + 10(posts) = 11번 쿼리가 실행됩니다.
DataLoader를 사용하면 동일 틱에서 발생하는 요청을 배치 처리하여 2번의 쿼리로 줄일 수 있습니다.