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

면접 핵심 질문

REST는 리소스 기반 URL과 HTTP 메서드로 CRUD를 수행하며, 서버가 응답 구조를 결정합니다. GraphQL은 단일 엔드포인트에서 클라이언트가 필요한 데이터 구조를 쿼리로 지정합니다. REST는 Over-fetching/Under-fetching 문제가 있지만 HTTP 캐싱이 용이하고, GraphQL은 정확한 데이터만 받지만 캐싱에 추가 전략이 필요합니다.
장점: 1. 필요한 데이터만 요청 (네트워크 효율) 2. 스키마 기반 타입 시스템으로 자동 문서화 3. 단일 요청으로 관련 데이터 조회 4. Subscription으로 실시간 기능 내장.

단점: 1. 학습 곡선이 높음 2. HTTP 캐싱 활용 어려움 3. 파일 업로드 처리 복잡 4. N+1 문제 발생 가능 (DataLoader로 해결).
중첩된 관계를 조회할 때 부모 N개에 대해 각각 자식 쿼리가 실행되어총 N+1번의 데이터베이스 조회가 발생하는 문제입니다. 예를 들어 10명의 사용자와 각각의 게시글을 조회하면 1(users) + 10(posts) = 11번 쿼리가 실행됩니다.DataLoader를 사용하면 동일 틱에서 발생하는 요청을 배치 처리하여 2번의 쿼리로 줄일 수 있습니다.