웹 애플리케이션을 개발할 때 API는 데이터의 요청과 응답을 담당하는 중요한 요소입니다. 대표적인 API 설계 방식으로 REST API와 GraphQL이 존재합니다. 이번 글에서는 각각의 개념을 설명하고, 서로 어떻게 다른지 비교해 보겠습니다.
REST API란?
REST (Representational State Transfer)는 HTTP 프로토콜을 기반으로 하는 API 설계 방식입니다.
각 엔드포인트(URL)는 특정 리소스를 나타내며, 클라이언트는 HTTP 메서드(POST, GET, PUT, DELETE 등)를 사용하여 리소스를 조
작합니다.
✅ REST API 예제
예를 들어, 사용자의 정보를 가져오는 API가 존재한다고 가정해 봅니다.
사용자 정보 요청 (GET 요청)
GET /users/1 HTTP/1.1
Host: example.com
응답 (JSON)
{
"id": 1,
"name": "Alice",
"email": "alice@example.com"
}
📌 REST API의 특징
1️⃣ 리소스 기반 설계 -> API의 각 엔드포인트가 특정 리소스를 나타내며, HTTP 메서드(GET, POST, PUT, DELETE)를 사용하여 리소스를 조작함
2️⃣ 다중 엔드포인트 -> 각 리소스마다 고유한 URL이 존재하며, 특정 데이터를 요청하려면 해당 엔드포인트를 호출해야 함
3️⃣ 무상태성 (Stateless) -> 각 요청은 독립적으로 처리되며, 서버는 이전 요청의 상태를 유지하지 않아 확장성이 뛰어남
4️⃣ Over Fetching 및 Under Fetching 발생 가능 -> 클라이언트가 특정 데이터만 필요하더라도 미리 정의된 응답 구조에 따라 과도한 데이터를 받을 수도 있고, 필요한 데이터를 여러 요청으로 나눠 받아야 하는 경우도 있음
GraphQL이란?
GraphQL은 Facebook에서 개발한 API 쿼리 언어로, 클라이언트가 원하는 데이터의 형태를 정의하고 서버가 그에 맞는 응답을 반환하는 방식입니다.
✅ GraphQL 예제
REST API와 동일한 사용자 정보를 가져오는 경우, GraphQL에서는 다음과 같이 요청할 수 있습니다.
사용자 정보 요청 (GraphQL Query)
query {
user(id: 1) {
name
email
}
}
응답 (JSON)
{
"data": {
"user": {
"name": "Alice",
"email": "alice@example.com"
}
}
}
📌 GraphQL의 특징
1️⃣ 클라이언트 중심의 쿼리 → 클라이언트가 원하는 데이터 구조를 직접 정의하여 요청할 수 있으며, 서버는 그에 맞춰 응답을 반환함
2️⃣ 타입 시스템 → GraphQL 스키마에서 데이터 구조를 명확하게 정의하며, 데이터 타입을 강제하여 API의 예측 가능성을 높임
3️⃣ 단일 엔드포인트 → REST API처럼 여러 개의 엔드포인트가 아니라, 하나의 /graphql 엔드포인트에서 모든 요청을 처리함
4️⃣ Over Fetching 및 Under Fetching 방지 → 클라이언트가 필요한 데이터만 요청할 수 있어, 불필요한 데이터를 가져오거나 부족한 데이터를 여러 번 요청하는 문제를 해결함
REST API vs. GraphQL 비교 분석
비교 항목 | REST API | GraphQL |
데이터 요청 방식 | 여러 엔드포인트를 호출해야 함 | 단일 엔드포인트에서 필요한 데이터만 요청 |
오버페칭 (Over-fetching) | 필요 이상의 데이터를 가져올 수 있음 | 필요한 데이터만 선택하여 가져옴 |
언더페칭 (Under-fetching) | 필요한 데이터를 다 가져오려면 여러 요청이 필요 | 하나의 요청에서 관련 데이터를 한 번에 가져올 수 있음 |
엔드포인트 관리 | 여러 개의 엔드포인트를 정의해야 함 | /graphql 하나의 엔드포인트 사용 |
성능 | 요청 수가 많아지면 성능 저하 가능 | 불필요한 데이터 전송을 줄여 성능 최적화 가능 |
캐싱 | 브라우저 및 CDN 캐싱 활용 가능 | 클라이언트에서 캐싱을 직접 관리해야 함 |
학습 곡선 | 비교적 쉬움 | 초기 학습 필요 |
✅ REST API 대비 GraphQL의 한계점 및 부가 설명
1️⃣ 학습 곡선 → REST API보다 개념이 복잡하며, 스키마 정의, 리졸버 작성, 쿼리 최적화 등을 익히는 데 시간이 소요됨
2️⃣ 복잡성 관리 → GraphQL 스키마가 커질수록 유지보수와 버전 관리가 어려워지며, 여러 서비스가 연결될 경우 복잡성이 증가함
3️⃣ 보안 고려사항 → REST API보다 공격 표면이 넓어질 수 있으며, 깊은 쿼리 요청(Deep Query)과 불필요한 필드 요청을 방지하기 위한 제한이 필요함
4️⃣ 순환 참조와 N + 1 쿼리 문제 → 데이터 간 관계가 많을 경우 같은 데이터를 중복 요청(N+1 문제) 하거나 순환 참조(무한 루프 발생 가능) 문제가 생길 수 있음.
5️⃣ 파일 업로드 지원의 한계 → REST API에서는 Multipart Form을 기본적으로 지원하지만, GraphQL에서는 별도의 파일 업로드 스펙(Apollo Upload, GraphQL Upload 등)을 적용해야 함
6️⃣ 네트워크 부하 → 한 번의 요청으로 많은 데이터를 가져올 수 있지만, 과도한 요청 시 서버 부하가 증가할 가능성이 있음 (필요 이상으로 많은 데이터 요청 가능)
7️⃣ 캐싱 어려움 → REST API는 URL 기반으로 캐싱이 쉬운 반면, GraphQL은 모든 요청이 동일한 엔드포인트(/graphql 등)에서 이루어지므로 기본적인 HTTP 캐싱이 어렵고, 별도의 캐싱 전략(Apollo Client, Redis 등)이 필요함
REST API vs. GraphQL: 언제 사용해야 할까?
📌 REST API를 선택하는 경우
✅ 단순한 CRUD 작업을 처리하는 경우
✅ API 응답이 자주 캐싱되어야 하는 경우 (ex. CDN ghkfdyd)
✅ 기존 RESTful API 설계를 유지하는 경우
➡️ 데이터 요청이 단순하고, 캐싱이 중요한 경우 REST API
📌 GraphQL을 선택하는 경우
✅ 클라이언트가 유연하게 데이터를 요청해야 하는 경우
✅ 모바일 환경에서 네트워크 트래픽을 줄이고 싶은 경우
✅ 여러 리소스를 한 번에 요청해야 하는 경우
➡️ 데이터를 유연하게 요청하고, 불필요한 데이터 요청을 줄이고 싶다면 GraphQL
'기술(Tech) > Network & System' 카테고리의 다른 글
[gRPC] Protocol Buffers(ProtoBuf): 고성능 데이터 직렬화 포맷 (0) | 2025.02.15 |
---|---|
gRPC에 대해 알아보자 (0) | 2025.02.15 |
모바일 애플리케이션 및 웹 애플리케이션 최적화 전략 (1) | 2025.02.09 |