GraphQL vs. REST: 어떤 API 스타일을, 언제 써야 할까?

업데이트: 2026년 10월

REST는 고정된 엔드포인트가 많은 API 스타일이고, GraphQL은 클라이언트가 단일 엔드포인트에 필요한 필드만 요청하는 쿼리 언어입니다. 이 비교의 본질은 누가 응답의 모양을 결정하는가입니다. REST에서는 서버가 설계 시점에 결정했고, GraphQL에서는 클라이언트가 요청마다 결정합니다. 캐싱, 버전 관리, 오류, 성능 등 나머지 모든 것은 이 하나의 역전에서 따라 나옵니다.

핵심 요약

질문답변
REST많은 엔드포인트, 서버가 정의한 응답, HTTP 네이티브 캐싱
GraphQL엔드포인트 하나, 타입 있는 스키마, 클라이언트가 선택한 필드와 중첩
GraphQL의 강점오버페칭과 언더페칭이 사라짐. 화면당 왕복 한 번
REST의 강점CDN 캐싱, 단순성, 보편적 지원
2026년의 현실공존. REST는 어디에나, GraphQL은 프론트엔드 집계 계층으로

같은 화면, 두 가지 방식

프로필 화면에는 사용자, 그 사용자의 최신 게시물 5개, 팔로워 수가 필요합니다. REST는 리소스 단위로 말합니다:

GET /users/42               → 필드 38개, 필요한 것은 3개  (오버페칭)
GET /users/42/posts?limit=5 → 두 번째 왕복                (언더페칭)
GET /users/42/followers     → 세 번째 왕복

GraphQL은 모양을 갖춘 질문 하나로 말합니다:

POST /graphql
query {
  user(id: 42) {
    name
    avatarUrl
    posts(first: 5) { title likes }
    followers { totalCount }
  }
}
→ 왕복 한 번, 정확히 그 필드만, 그 외에는 아무것도 없음

실제 격차는 흔히 말하는 것보다 좁습니다. 잘 설계된 REST도 필드 선택을 지원하며, SDK 쿼리 빌더를 쓰면 필드 선택이 기본 습관이 됩니다:

// JavaScript / Node.js — Back4app JS SDK
// GraphQL's best trick — ask only for what you need — without leaving REST
const query = new Parse.Query('Article');
query.equalTo('status', 'published');
query.select('title', 'views');        // field selection, GraphQL-style
const articles = await query.find();   // lean payload over the REST API
// The same backend also speaks real GraphQL: query { articles { ... } }

한눈에 보는 GraphQL vs. REST

차원RESTGraphQL
엔드포인트여러 개, 리소스 형태하나, 스키마 형태
응답 모양서버가 정의쿼리마다 클라이언트가 선택
타이핑관례(OpenAPI는 선택 사항)스키마로 강제, 인트로스펙션 가능
왕복리소스당 한 번화면당 한 번
캐싱HTTP/CDN 네이티브, URL 키클라이언트 측 정규화 캐시, 영속 쿼리
버전 관리/v1 → /v2진화 + 지원 중단, 버전 없음
오류HTTP 상태 코드200 + errors 배열, 부분 결과
실시간별도(웹훅, 소켓)명세 안의 서브스크립션
학습 곡선최소스키마, 리졸버, 비용 제어
가장 잘 맞는 용도공개, 캐시 가능, 단순한 CRUD다중 클라이언트, 데이터 밀도 높은 프론트엔드
REST의 다중 엔드포인트와 GraphQL의 단일 엔드포인트 요청 흐름 비교REST 클라이언트는 별도의 리소스 엔드포인트 세 곳에 요청을 보내고 결과를 조립하는 반면, GraphQL 클라이언트는 단일 엔드포인트에 쿼리 하나를 보내고, 그 엔드포인트가 모든 필드를 해석해 모양을 갖춘 응답 하나를 반환합니다.

GraphQL

모양을 갖춘 쿼리 하나

클라이언트

/graphql
스키마 + 리졸버

REST

클라이언트

/users/42

/users/42/posts

/users/42/followers

REST 클라이언트는 별도의 리소스 엔드포인트 세 곳에 요청을 보내고 결과를 조립하는 반면, GraphQL 클라이언트는 단일 엔드포인트에 쿼리 하나를 보내고, 그 엔드포인트가 모든 필드를 해석해 모양을 갖춘 응답 하나를 반환합니다.

비교 글들이 건너뛰는 부분

N+1 문제는 자리를 옮겼을 뿐 사라지지 않았습니다. 작성자를 포함한 게시물을 요청하는 GraphQL 쿼리를 단순하게 구현하면 게시물마다 리졸버 호출이 한 번씩 발생합니다. ORM 때문에 널리 알려진 바로 그 N+1 문제가 이제 서버 측에서 일어나는 것입니다. 표준 치료법은 배칭입니다. 요청마다 로더가 작성자 ID를 모아 쿼리 한 번으로 가져옵니다. 배칭 전략 없이 GraphQL을 도입하면 REST의 최악의 성능 버그를 자리만 옮겨 그대로 들여오는 셈입니다.

오류는 운영상의 결정입니다. “errors 배열을 담은 200”은 상태 코드를 기준으로 만든 대시보드, 알림, CDN 로직이 기본적으로 오류를 감지하지 못한다는 뜻입니다. GraphQL로 성공하는 팀은 오류 관측 가능성을 나중에 생각할 일이 아니라 도입의 일부로 다룹니다.

제한 없는 쿼리에는 제한이 필요합니다. 유연한 엔드포인트 하나는 쿼리 하나가 그래프 전체를 순회할 수 있다는 뜻입니다. 공식 보안 지침은 깊이 제한, 쿼리 비용 예산, 그리고 자사 클라이언트를 위한 영속 쿼리 허용 목록을 권장합니다. REST의 고정된 엔드포인트는 비용 제어를 암묵적으로 해 주었지만, GraphQL은 그것을 사용자의 일로 만듭니다.

일반적인 사용 사례

  • GraphQL: 느린 네트워크의 모바일 앱, 많은 엔티티를 엮는 대시보드, 웹 + 모바일 + 파트너 클라이언트의 데이터 요구가 갈라지는 제품, 안정적인 스키마 위에서의 빠른 프론트엔드 반복.
  • REST: 공개 개발자 API, 캐시 가능한 콘텐츠 전달, 웹훅과 연동 표면, 파일 전송, 단순성이 이기는 서비스 간 호출.
  • 둘 다(엔터프라이즈의 표준): 백엔드 서비스 사이에는 REST나 RPC, 프론트엔드를 위해 이를 집계하는 GraphQL 계층. 스키마를 갖춘 백엔드 포 프론트엔드 패턴입니다.

GraphQL과 REST 중 무엇을 선택해야 할까? 결정 매트릭스

REST를 선택해야 하는 경우…GraphQL을 선택해야 하는 경우…둘 다 써야 하는 경우…
제3자가 API를 소비함화면이 많은 리소스를 엮음서비스는 REST로 통신하고 프론트엔드는 맞춤형 응답 모양을 원함
CDN 캐싱이 부하를 감당함클라이언트마다 데이터 요구가 다름공개 API와 제품 프론트엔드가 공존함
리소스가 화면에 1:1로 대응됨오버페칭이 모바일 사용자를 괴롭힘점진적으로 마이그레이션 중
팀이 이번 주에 출시해야 함타입 있는 계약이 프론트엔드 작업을 가속함서로 다른 팀이 서로 다른 계층을 소유함
파일과 웹훅이 지배적임실시간 서브스크립션이 핵심임이 논쟁을 다시 벌이고 싶지 않음

솔직한 기본값은 이렇습니다. REST로 시작하고, 다중 클라이언트의 데이터 모양 문제가 실제로 닥쳤을 때 GraphQL을 추가하는 것입니다. 그리고 플랫폼이 스키마 하나에서 둘 다 생성해 준다면, 이 선택은 아키텍처의 문제가 아니라 요청마다 하는 선택이 됩니다.

한계와 트레이드오프

  • REST: 데이터 밀도 높은 화면에서의 오버/언더페칭, 버전 마이그레이션, 팀 사이의 응답 모양 표류, 그리고 N개 엔드포인트의 문서.
  • GraphQL: 캐싱에는 별도 메커니즘이, 비용 제어에는 지속적인 감시가, 리졸버에는 배칭 규율이, 그리고 errors를 담은 200 패턴에는 관측 가능성 재작업이 필요합니다.
  • 둘 다: 어느 쪽도 나쁜 데이터 모델을 고치지 못합니다. 혼란스러운 도메인은 어떤 스타일에서든 혼란스러운 API를 만듭니다. REST 박사 논문 자체가 조용히 암시하듯, 제약 조건은 언제나 그 아래의 아키텍처에 관한 것이었습니다.

Back4app에서의 GraphQL과 REST

Back4app은 관리형 데이터베이스, 자동 생성되는 REST 및 GraphQL API, 인증, 파일 스토리지, Cloud Code 서버리스 함수를 결합한 오픈소스 Backend as a Service(BaaS) 플랫폼입니다. 이 글의 딜레마를 뿌리에서 해소합니다. 두 API 스타일이 같은 스키마에서 생성됩니다. URL 캐싱이 가능한 REST 엔드포인트와 중첩 쿼리를 갖춘 타입 있는 GraphQL API에 더해, 필드 선택(위의 코드 탭)으로 어느 전송 방식에서든 GraphQL의 대표 이점을 제공하는 SDK까지 갖춥니다. 클라이언트마다 고르고, 화면마다 바꾸고, API 계층은 전혀 작성하지 않아도 됩니다.

자주 묻는 질문

GraphQL과 REST의 가장 큰 차이는 무엇입니까?

계약의 모양입니다. REST는 여러 리소스 엔드포인트를 노출하고 각각은 서버가 정의한 응답을 반환하므로, 엔드포인트가 주는 대로 받아야 합니다. GraphQL은 타입 있는 스키마를 가진 엔드포인트 하나를 노출하고, 각 클라이언트가 원하는 필드와 중첩 관계를 정확히 지정한 쿼리를 작성합니다. REST는 응답을 서버에서 고정하고, GraphQL은 그 결정을 클라이언트로 옮깁니다.

GraphQL이 REST보다 빠릅니까?

여러 리소스의 데이터가 필요한 화면에서는 대체로 그렇습니다. 쿼리 하나가 여러 번의 왕복을 대체하고 페이로드에는 요청한 필드만 실립니다. 단순한 리소스 하나라면 REST가 더 빠른 경우가 많습니다. URL을 키로 하는 응답이 CDN에서 훌륭하게 캐시되기 때문입니다. 그리고 리졸버를 잘못 작성하면 N+1 문제 때문에 GraphQL이 어떤 방식보다도 느려질 수 있습니다. 결국 워크로드에 따라 달라집니다.

오버페칭과 언더페칭이란 무엇입니까?

GraphQL이 해결하려고 만들어진 REST의 두 가지 문제점입니다. 오버페칭은 화면에 필드 세 개가 필요한데 엔드포인트가 리소스 전체를 반환하는 것입니다. 언더페칭은 호출 한 번으로 부족해 클라이언트가 연관 데이터를 위해 N번의 후속 요청을 보내는 것입니다. 필드 선택과 중첩 쿼리가 둘 다 해결하며, 데이터가 많고 클라이언트가 여럿인 앱이 GraphQL에 먼저 끌리는 이유입니다.

GraphQL이 REST를 대체하고 있습니까?

아니요. 업계 데이터는 공존을 말합니다. 설문 조사에서는 꾸준히 압도적 다수의 팀이 REST를 사용하고 대략 3분의 1이 GraphQL을 사용하는데, 대부분 REST를 대신해서가 아니라 REST와 나란히 씁니다. 엔터프라이즈의 지배적인 패턴은 하이브리드입니다. 서비스 사이와 공개 API에는 REST(또는 RPC)를, 프론트엔드 클라이언트를 위한 집계 계층으로는 GraphQL을 둡니다.

REST와 GraphQL의 캐싱은 어떻게 다릅니까?

REST 응답은 고유한 URL에 존재하므로 브라우저와 CDN이 별도 작업 없이 캐시합니다. 잘 드러나지 않지만 REST의 큰 강점입니다. GraphQL은 보통 엔드포인트 하나에 POST를 보내므로 URL 기반 캐싱이 동작하지 않으며, 생태계는 정규화된 클라이언트 측 캐시와 GET으로 보내는 영속 쿼리로 이를 보완합니다. 공개된 읽기 중심 API에서 캐싱은 REST를 지지하는 가장 강력한 단일 논거입니다.

버전 관리는 어떻게 다릅니까?

REST는 URL이나 헤더의 v2처럼 명시적으로 버전을 매기고, 마이그레이션 동안 두 버전을 함께 운영합니다. GraphQL은 버전 없는 진화를 지향합니다. 새 필드를 자유롭게 추가하고, 오래된 필드는 지원 중단으로 표시하며, 사용량 텔레메트리를 지켜보다가 클라이언트가 더 이상 요청하지 않을 때 제거합니다. 둘 다 동작하며, GraphQL은 번거로운 버전 관리 절차 대신 스키마 거버넌스 규율을 요구합니다.

두 방식의 오류 처리는 어떻게 다릅니까?

REST는 HTTP 상태 코드에 기댑니다. 404는 모든 프록시, 모니터, 클라이언트 라이브러리에 보입니다. GraphQL은 보통 부분 데이터 옆에 errors 배열을 담은 200을 반환하는데, 이는 부분 성공을 가능하게 하지만 모니터링이 상태 코드를 믿는 대신 응답 본문을 파싱해야 한다는 뜻입니다. 각주가 아니라 실질적인 운영상의 차이입니다.

여전히 REST를 선택해야 하는 경우는 언제입니까?

구체적인 신호는 이렇습니다. 많은 제3자가 소비하는 공개 API, 캐시 효과가 큰 읽기 트래픽, 단순한 리소스 형태의 CRUD, 파일 업로드와 다운로드, 웹훅 방식 연동, 그리고 GraphQL 운영 경험이 없는 팀입니다. REST는 모든 것이 지원하는 기본값이고, GraphQL은 다중 클라이언트의 데이터 밀도 높은 프론트엔드를 위해 고용하는 전문가입니다.

관련 용어

비교 대상

참고 자료

백엔드를 구축할 준비가 되셨나요?

몇 분 안에 Back4app에서 프로젝트를 시작하세요. 데이터베이스, 인증, API, Cloud Code가 포함되어 있으며 신용카드는 필요 없습니다.

작성 및 검수: Back4app Engineering, Back4app Engineering · 게시일 2026-10-28