WebSocket
- 실시간 양방향 통신 지원
- Application Layer 레벨 Protocol로 TCP/IP위에서 동작
- HTTP 핸드셰이크를 사용하여 연결을 시작하고, 연결이 수립되면 HTTP에서 WebSocket 프로토콜로 업그레이드됨
- 한번 연결이 수립되면 클라이언트와 서버 자유롭게 데이터 통신 가능
- 실시간 시세 데이터, 채팅 솔루션 등에 사용
WebSocket vs HTTP
연결 방식 차이
실시간 주식 시세 애플리케이션을 예로 들었을 경우 :
1. HTTP 연결 방식: 클라이언트는 주기적으로 서버에 요청을 보내 데이터를 가져옴
클라이언트: GET /stock-price HTTP/1.1
서버: HTTP/1.1 200 OK
{"AAPL": 150.25, "GOOGL": 2750.80}
(잠시 후)
클라이언트: GET /stock-price HTTP/1.1
서버: HTTP/1.1 200 OK
{"AAPL": 150.50, "GOOGL": 2751.20}
(계속 반복...)
2. WebSocket 연결 방식: 연결이 수립되면 양방향으로 자유롭게 데이터를 주고받음
클라이언트: GET /ws HTTP/1.1
Upgrade: websocket
서버: HTTP/1.1 101 Switching Protocols
Upgrade: websocket
(WebSocket 연결 수립)
서버: {"AAPL": 150.25, "GOOGL": 2750.80}
(가격 변동 시 즉시)
서버: {"AAPL": 150.50, "GOOGL": 2751.20}
클라이언트: {"subscribe": "TSLA"}
서버: {"TSLA": 900.40}
(연결이 유지되는 동안 계속...)
특징 비교
특징 | WebSocket | HTTP |
통신 방식 | 양방향, 전이중 통신 | 단방향, 요청-응답 모델 |
실시간성 | 높음 | 낮음 (폴링으로 보완 가능) |
오버헤드 | 낮음 (초기 연결 후) | 높음 (매 요청마다 헤더 포함) |
서버 -> 클라이언트 푸시 | 쉬움 | 어려움 (Server-Sent Events로 가능) |
방화벽 친화성 | 일부 제한 가능 | 대부분 허용 |
캐싱 | 어려움 | 용이함 |
사용 사례 | 실시간 애플리케이션 | 일반적인 웹 서비스, Restful API |
RPC
- RPC(Remote Procedure Call)은 네트워크를 통해 원격 서버에서 제공하는 함수를 호출할 수 있게 해주는 프로토콜.분산 시스템의 개발과 유지보수를 간단하고 효율적으로 만들어줌
- IDL(Interface Definition Language)은 원격 프로시저 호출의 인터페이스를 정의하는 데 사용되는 언어로, 함수의 이름, 매개변수, 반환값 등을 명세. 이를 통해 Stub 코드를 자동으로 생성.
- Stub은 클라이언트와 서버 간의 통신을 관리하는 코드로, IDL을 통해 정의된 인터페이스를 구현하여 클라이언트가 원격 프로시저를 호출할 수 있도록 도움. 개발자는 네트워크의 세부 사항을 신경 쓸 필요 없이 로컬 함수 호출처럼 원격 함수를 호출.
gRPC
1. gRPC
gRPC(goole Remote Procedure Call)은 Google에서 개발한 오픈소스 RPC 프레임워크. HTTP 2.0
기반으로 고성능의 양방향 Streaming 데이터 처리가 가능. MSA와 같은 분산 시스템에서 효율적인 통신을 지원.
2. Protobuf
gRPC의 IDL로 proto buffer의 줄임이다. 프로그램상에서 이를 사용하기 위해서는 .proto stub이
생성되어야 한다. JSON, XML 통신보다 데이터 전송 크기가 작고 성능이 빠르다.
Protocol Buffers (Protobuf)는 gRPC에서 사용하는 IDL(Interface Definition Language)로, 데이터의 직렬화 및 역직렬화를 효율적으로 수행. ".proto" 파일에서 정의된 스키마를 기반으로 자동으로 생성된 스텁(stub)을 통해 클라이언트와 서버 간의 통신 수행. Protobuf는 JSON이나 XML보다 데이터 전송 크기가 작고 성능이 우수합니다.
gRPC vs HTTP API
특징 | gRPC | HTTP API |
프로토콜 | HTTP 2.0 | HTTP |
데이터 Format | Protobuf | JSON, XML |
스트리밍 | Client, Server, 양방향 | Client, Server |
연결 | 지속적인 연결 지원 | 비지속적 |
인터페이스 정의 | IDL, ".proto" 파일 사용 | URL 경로, HTTP Method |
성공/오류 처리 | gRPC 상태 코드와 메타데이터 사용 | HTTP 상태 코드 |
통신 프로토콜 | 바이너리 프로토콜 (Protobuf) | 텍스트 기반 프로토콜 (JSON/XML) |
브라우저 지원 | 미지원 | 지원 |
주요 사용 사례 | 고성능 및 실시간 데이터 처리, MSA | 애플리케이션 데이터 통신, 공공 데이터 제공 및 상호 운용성 |