본문 바로가기
other

[API] REST API, GraphQL, gRPC, SOAP, WebSocket, SSE 구분하기

by 할리갈리0 2024. 5. 24.

API(Application Programming Interface)는 소프트웨어 간의 상호작용을 가능하게 하는 인터페이스입니다. API를 사용하면 서로 다른 소프트웨어 시스템이 서로 상호작용하고 데이터를 주고받을 수 있습니다.
예를 들어, 스마트폰 앱이 서버에 저장된 데이터를 가져오거나, 웹사이트가 외부 서비스의 기능을 이용할 때 API를 사용합니다. API는 웹사이트나 앱에서 날씨 정보를 가져오거나, 온라인 쇼핑몰에서 결제를 처리하는 등 다양한 용도로 사용됩니다.
다양한 API 스타일이 존재하며, REST API, GraphQL, gRPC, SOAP, WebSocket, SSR의 개념을 이해하고 각각을 구분해 보겠습니다.

 

1. REST API

REST(Representational State Transfer) API는 웹에서 가장 널리 사용되는 API 스타일 중 하나입니다. 
REST API는 URL을 사용해 자원을 표현하고, HTTP 메서드(GET, POST, PUT, DELETE 등)를 통해 자원을 조작합니다.

 

[특징]

· URL: 각 자원은 고유한 URL로 식별됩니다.
· HTTP 메서드: 데이터 조회(GET), 생성(POST), 수정(PUT), 삭제(DELETE) 등의 작업을 수행합니다.
· 무상태성: 각 요청은 독립적이며, 서버는 요청 간의 상태를 저장하지 않습니다.

 

[구성 요소]

· Client: 요청을 보내는 주체 (웹 브라우저, 모바일 앱 등)
· REST API: 요청을 처리하고 데이터를 제공하는 중간층 (HTTP 기반)
· Database: 데이터를 저장하는 곳 (예: MySQL, PostgreSQL)


[프로세스]

1. 클라이언트는 REST API에 HTTP 요청을 보냅니다.
2. REST API는 요청을 처리하고 데이터베이스에서 필요한 데이터를 가져옵니다.
3. 데이터베이스에서 데이터를 받아 REST API가 클라이언트에 HTTP 응답으로 데이터를 보냅니다.


2. GraphQL

GraphQL은 페이스북이 개발한 데이터 쿼리 언어로, 클라이언트가 필요한 데이터를 정확하게 요청할 수 있게 합니다. 
REST와 달리, 단일 엔드포인트를 통해 다양한 쿼리를 처리할 수 있습니다. 
클라이언트는 필요한 데이터 구조를 정의하여 요청하고, 서버는 그에 맞는 데이터를 반환합니다.


[특징]

· 단일 엔드포인트: 모든 요청이 단일 엔드포인트를 통해 이루어집니다.
· 유연한 쿼리: 클라이언트는 필요한 데이터 필드를 정확하게 지정할 수 있습니다.
· 효율성: 필요한 데이터만 요청하므로 불필요한 데이터 전송이 줄어듭니다.

 

[구성 요소]
· Client: 필요한 데이터를 정확하게 쿼리 하는 주체
· GraphQL API: 클라이언트의 쿼리를 처리하고 필요한 데이터를 제공하는 중간층
· Database: 데이터를 저장하는 곳 (예: MongoDB, PostgreSQL)

 

[프로세스]
1. 클라이언트는 GraphQL API에 필요한 데이터 구조를 명시하여 쿼리를 보냅니다.
2. GraphQL API는 요청을 처리하고 데이터베이스에서 필요한 데이터를 가져옵니다.
3. 데이터베이스에서 데이터를 받아 GraphQL API가 클라이언트에 JSON 형태로 응답합니다.


3. gRPC

gRPC는 구글이 개발한 고성능 RPC(Remote Procedure Call) 프레임워크입니다.
프로토콜 버퍼를 사용해 데이터를 직렬화하며, 다양한 언어 간의 통신을 지원합니다.
주로 마이크로서비스 아키텍처에서 사용됩니다.

 

[특징]

· 고성능: 빠르고 효율적인 통신이 가능합니다.
· 다양한 언어 지원: 여러 프로그래밍 언어 간의 통신을 쉽게 할 수 있습니다.
· 양방향 통신: 클라이언트와 서버 간의 스트리밍 통신을 지원합니다.

 

[구성 요소]
· Client: 원격 프로시저 호출(RPC)을 요청하는 주체
· gRPC Server: RPC 요청을 처리하고 데이터를 제공하는 서버
· Database: 데이터를 저장하는 곳 (예: Cassandra, PostgreSQL)

 

[프로세스]
1. 클라이언트는 gRPC 서버에 프로토콜 버퍼 형식으로 RPC 요청을 보냅니다.
2. gRPC 서버는 요청을 처리하고 데이터베이스에서 필요한 데이터를 가져옵니다.
3. 데이터베이스에서 데이터를 받아 gRPC 서버가 클라이언트에 프로토콜 버퍼 형식으로 응답합니다.


4. SOAP

SOAP(Simple Object Access Protocol)은 XML을 기반으로 한 메시징 프로토콜로, 주로 엔터프라이즈 환경에서 사용됩니다. 
SOAP는 HTTP뿐만 아니라 SMTP 등 다양한 프로토콜을 지원하며, 엄격한 표준을 따릅니다. 이는 높은 보안과 신뢰성을 제공합니다.

 

[특징]

· 표준화: 엄격한 표준을 따르므로 높은 상호운용성을 제공합니다.
· 보안: WS-Security 같은 확장 기능을 통해 높은 수준의 보안을 제공합니다.
· 프로토콜 독립성: HTTP 외에도 다양한 프로토콜을 통해 통신할 수 있습니다.

 

[구성 요소]
· Client: SOAP 메시지를 통해 요청을 보내는 주체
· SOAP API: SOAP 메시지를 처리하고 데이터를 제공하는 중간층
· Database: 데이터를 저장하는 곳

 

[프로세스]
1. 클라이언트는 SOAP API에 XML 형식의 요청 메시지를 보냅니다.
2. SOAP API는 요청을 처리하고 데이터베이스에서 필요한 데이터를 가져옵니다.
3. 데이터베이스에서 데이터를 받아 SOAP API가 클라이언트에 XML 형식의 응답 메시지를 보냅니다.


5. WebSocket

WebSocket은 클라이언트와 서버 간의 상호작용을 실시간으로 처리하는 양방향 통신 프로토콜입니다. 
WebSocket은 HTTP 연결을 업그레이드하여 지속적인 연결을 유지하며, 데이터가 양방향으로 실시간 전송됩니다. 
이는 채팅 애플리케이션, 실시간 알림, 온라인 게임 등에 유용합니다.

 

[특징]

· 양방향 통신: 클라이언트와 서버가 서로 데이터를 실시간으로 주고받을 수 있습니다.
· 저지연성: 실시간 통신이 가능하므로 지연이 적습니다.
· 지속적인 연결: 연결이 유지되므로 상태를 지속적으로 관리할 수 있습니다.

 

[구성 요소]
· Client: 실시간 데이터를 주고받는 주체
· WebSocket Server: 실시간 양방향 통신을 처리하는 서버
· Database: 데이터를 저장하는 곳 (예: Redis, Firebase)

[프로세스]
1. 클라이언트는 WebSocket 서버와 연결을 설정합니다.
2. 클라이언트와 WebSocket 서버는 실시간으로 데이터를 주고받습니다.
3. 필요한 경우 WebSocket 서버는 데이터베이스에서 데이터를 가져와 클라이언트에 전송합니다.


6. SSE

SSE(Server-Sent Events)는 서버에서 클라이언트로 단방향으로 실시간 업데이트를 전송하는 방식입니다. 
클라이언트는 서버와의 지속적인 연결을 유지하며, 서버에서 이벤트를 보낼 때마다 데이터를 수신합니다. 

 

[특징]

· 단방향 통신: 서버에서 클라이언트로만 데이터를 전송합니다.
· 지속적인 연결: 클라이언트는 서버와의 연결을 유지하여 실시간 업데이트를 받습니다.
· 간편성: 설정과 사용이 비교적 간단합니다.

 

[구성 요소]
· Client: 실시간 업데이트를 받는 주체
· SSE Server: 클라이언트에 실시간 업데이트를 전송하는 서버
· Database: 데이터를 저장하는 곳

[프로세스]
1. 클라이언트는 SSE 서버에 연결을 설정합니다.
2. SSE 서버는 클라이언트에 실시간 업데이트를 전송합니다.
3. 필요한 경우 SSE 서버는 데이터베이스에서 데이터를 가져와 클라이언트에 전송합니다.


각 API 스타일은 고유한 장점과 단점을 가지고 있으며, 사용 목적과 상황에 따라 적합한 방식을 선택해야 합니다. 
REST API는 간단하고 널리 사용되며, GraphQL은 유연한 쿼리 기능을 제공합니다. 
gRPC는 고성능의 양방향 통신을, SOAP는 엄격한 보안과 표준화를, WebSocket은 실시간 통신을, SSE는 단방향 실시간 업데이트를 제공합니다. 
다양한 API 스타일을 이해하고 적절히 활용해 보시기 바랍니다.

반응형