본문 바로가기
개발

⚔️ REST vs GraphQL: 언제 무엇을 써야 할까?

by 비트-바이트 2025. 3. 26.
반응형


📌 개요

백엔드 API 설계를 시작하려는데, REST로 할까? GraphQL로 할까? 고민한 적 있지 않으신가요?
둘 다 데이터를 주고받는 API 기술이지만 철학과 사용 방식이 전혀 다릅니다.

이 글에서는 REST와 GraphQL의 핵심 차이점, 장단점, 그리고 실무에서 어떤 상황에 어떤 방식을 선택해야 할지 기준을 제시해드립니다.


🧠 핵심 개념

🌐 REST란?

  • 자원 중심 설계 (Resource-Oriented)
  • URI와 HTTP 메서드(GET, POST 등)를 이용해 자원을 CRUD
  • 예:
GET /users/1
POST /users

🧠 GraphQL이란?

  • 질의 기반 설계 (Query-Oriented)
  • 클라이언트가 원하는 필드만 선택해서 요청 가능
  • 단일 엔드포인트(/graphql)로 다양한 요청 수행
  • 예:
{
  user(id: 1) {
    name
    email
  }
}

💡 실전 팁 또는 실습

⚖️ REST vs GraphQL 비교표

항목RESTGraphQL
요청 방식 여러 URI + HTTP 메서드 하나의 URI + 쿼리문
응답 데이터 고정, 과잉/부족 가능성 원하는 필드만 응답
버전 관리 URI 버전 (v1, v2 등) 불필요 (스키마 중심 관리)
성능 단순, 캐싱 쉬움 복잡하지만 최적화 가능
학습 곡선 낮음 높음
도구 생태계 풍부 (Postman, Swagger 등) 빠르게 성장 중 (Apollo, GraphiQL 등)

📌 REST가 유리한 경우

  • 단순한 CRUD 위주의 API
  • 서버 캐싱, CDN 활용이 중요한 경우
  • 학습 비용을 낮추고 싶을 때
  • 오픈 API나 외부 파트너에게 문서를 제공해야 할 때

📌 GraphQL이 유리한 경우

  • 다양한 클라이언트(웹/앱)에서 다른 데이터를 요청하는 경우
  • 모바일 환경 등에서 네트워크 효율이 중요한 경우
  • 빠른 프로토타이핑, 프론트엔드 주도 개발이 필요한 경우
  • 복잡한 데이터 관계 (Nested Query)가 자주 필요한 경우

✍️ 실습 코드 예시 (Node.js)

REST (Express)

app.get('/users/:id', (req, res) => {
  const user = db.findUserById(req.params.id);
  res.json({ name: user.name, email: user.email });
});


GraphQL (Apollo Server)

const typeDefs = gql`
  type User {
    id: ID
    name: String
    email: String
  }

  type Query {
    user(id: ID): User
  }
`;

✅ 마무리

REST와 GraphQL은 경쟁 관계라기보단, 서로 다른 목적과 철학을 가진 도구입니다.

  • REST는 안정성과 단순함, 호환성에 강하고
  • GraphQL은 유연성과 개발 속도, 네트워크 효율에 강합니다.

프로젝트의 규모, 팀의 성숙도, 요구사항에 따라 적절한 선택이 핵심입니다.


📎 다음 글 예고

  • 실습으로 배우는 Express 기반 REST API 만들기
  • Apollo Client로 GraphQL 프론트엔드 구현하기
  • REST와 GraphQL API 혼합 운영 전략
반응형