1. REST API 란?
REST(API)는 Representational State Transfer의 약자로, 웹 서비스의 구조를 설계하고 구축하기 위한 아키텍처적인 스타일이다. RESTful API는 HTTP 프로토콜을 사용하여 자원을 다루고 그 자원에 대한 행위를 정의한다.
REST API의 주요 특징
- 자원(URI):
- 각 자원은 고유한 식별자인 URI(Uniform Resource Identifier)를 가진다. 예를 들어, /users, /products와 같은 엔드포인트는 각각 사용자와 제품과 관련된 자원을 나타낸다.
- HTTP 메서드(Verb):
- CRUD(Create, Read, Update, Delete) 연산을 표현하기 위해 HTTP 메서드(GET, POST, PUT, DELETE)를 사용한다. 자원에 대한 행위를 나타내는 작업은 각각의 HTTP 메서드로 처리된다. 예를 들어, GET /users는 사용자 목록을 요청하고, POST /users는 새로운 사용자를 생성한다.
- 표현(Representation):
- 클라이언트와 서버 간에 자원의 상태를 전달하기 위해 여러 형태의 표현을 사용한다. 주로 JSON, XML 등의 데이터 형식을 사용하여 자원의 표현을 전송한다.
- 상태가 없음(Stateless):
- REST는 상태를 유지하지 않는(stateless) 특성을 갖는다. 각 요청은 모든 필요한 정보를 포함하며, 서버는 요청을 이해하고 처리하기 위한 모든 것을 요청 자체에 포함하고 있어야 한다.
- 캐싱(Caching):
- REST는 HTTP의 캐싱 기능을 활용하여 응답을 캐싱함으로써 성능을 향상시킬 수 있다.
RESTful API는 간단하고 직관적인 디자인으로 많은 웹 서비스에서 사용되며, 자원 중심의 접근 방식으로 클라이언트와 서버 간의 통신을 용이하게 한다. 하지만 API가 점점 복잡해지면서 여러 번의 요청이 필요하거나, 클라이언트에서 필요한 데이터의 양이 많아질 때 데이터의 오버헤드 문제가 발생할 수 있다.
2. GraphQL이란?
GraphQL은 페이스북에서 개발된 데이터 쿼리 언어 및 런타임이다. RESTful API와 비교할 때, GraphQL은 클라이언트가 서버에서 필요한 데이터를 요청하는 방식에서 차이를 보인다.
기존의 REST API에서는 엔드포인트마다 고정된 데이터가 반환되는 반면, GraphQL은 클라이언트가 필요로 하는 데이터의 구조와 양을 명시적으로 요청할 수 있도록 한다. 이를 통해 클라이언트는 단일 요청으로 여러 리소스의 데이터를 받거나, 원하는 필드만을 선택하여 서버로부터 데이터를 받을 수 있다.
GraphQL의 주요 특징
- 유연한 데이터 요청:
- 클라이언트는 필요한 데이터의 구조와 필드를 쿼리로 요청할 수 있다. 이는 과다하거나 불필요한 데이터를 받는 문제를 해결한다.
- 단일 요청으로 다수의 엔드포인트 호출:
- 여러 개의 REST 호출이 필요했던 것과는 달리, GraphQL은 단일 요청으로 여러 데이터를 요청할 수 있다.
- 타입 시스템:
- GraphQL은 강력한 타입 시스템을 갖고 있어, 데이터의 타입을 명시하고 유효성을 검증할 수 있다.
- 실시간 데이터 요청:
- 실시간 데이터를 요청하는 기능을 제공하기 위해 Subscriptions라는 메커니즘을 제공한다.
- 자동화된 API 문서:
- GraphQL은 자체적으로 쿼리할 수 있는 탐색 가능한 API 문서인 GraphQL Playground나 GraphiQL을 제공하여 개발자가 API를 쉽게 이해하고 테스트할 수 있다.
- 여러 플랫폼과 언어 지원:
- GraphQL은 여러 플랫폼과 언어에서 지원되며, 다양한 백엔드 시스템과 함께 사용할 수 있다.
3. REST API와 GraphQL의 차이
- 엔드포인트와 데이터 요청 방식:
- REST API: 각 엔드포인트가 정적으로 정의되어 있고, 특정 리소스를 나타낸다. 클라이언트는 각 엔드포인트를 통해 해당 리소스에 대한 요청을 보낸다.
- GraphQL: 단일 엔드포인트가 존재하며, 클라이언트는 GraphQL 쿼리를 사용하여 필요한 데이터의 구조와 필드를 지정하여 요청한다.
- 데이터 요청의 유연성:
- REST API: 서버가 미리 정의된 엔드포인트의 데이터만을 제공한다. 종종 과다한 데이터가 반환되거나, 여러 번의 요청이 필요할 수 있다.
- GraphQL: 클라이언트는 필요한 데이터의 구조와 필드를 쿼리로 요청하므로, 필요한 만큼의 데이터만을 받을 수 있다. 이는 과다한 데이터 전송을 방지하고, 클라이언트가 정확히 필요로 하는 데이터를 얻을 수 있도록 한다.
- 요청과 응답의 구조:
- REST API: HTTP 메소드(GET, POST, PUT, DELETE 등)와 URL을 사용하여 요청을 보내고, 서버는 정해진 데이터를 포함한 응답을 반환한다.
- GraphQL: 모든 요청은 POST 메소드를 사용하며, 요청 바디에 GraphQL 쿼리가 포함된다. 서버는 해당 쿼리에 정의된 데이터 구조에 따라 응답을 반환한다.
- 버전 관리:
- REST API: 새로운 기능이나 변경 사항이 발생할 때, 새로운 엔드포인트나 버전을 생성하여 호환성을 유지한다.
- GraphQL: 타입 시스템을 통해 새로운 필드나 타입을 추가할 수 있으며, 기존 쿼리의 변경 없이 새로운 기능을 추가할 수 있습니다.
- 캐싱:
- REST API: HTTP 캐싱을 통해 응답을 캐시하고, 캐시된 데이터를 재사용하여 성능을 향상시킨다.
- GraphQL: 기본적으로는 캐싱을 지원하지 않지만, 클라이언트나 서버에서 직접 구현하여 캐싱을 사용할 수 있다.
'개발 공부' 카테고리의 다른 글
| Node.js (0) | 2024.07.15 |
|---|---|
| 동기(synchronous) 와 비동기(asynchronous) 함수 (0) | 2024.07.15 |
| TypeORM - QueryBuilder 2 (0) | 2023.11.21 |
| TypeORM - QueryBuilder 1 (0) | 2023.11.20 |
| TypeORM (0) | 2023.11.17 |