Backend
gRPC
5linesys
2024. 12. 9. 22:54
gRPC 는 Google 에서 개발한 오픈 소스 원격 프로시저 호출(Remote Procedure Call) 프레임워크로, 기존의 RPC 시스템을 현대화하여 다양한 환경에서 효율적인 통신을 지원한다. gRPC는 HTTP/2 를 기반으로 하며, 프로토콜 버퍼(Protocol Buffers) 를 사용하여 데이터를 직렬화한다.
전통적인 RPC 시스템과 gRPC 의 차이
- 데이터 직렬화 방식
- RPC: 일반적으로 XML이나 JSON 같은 텍스트 기반의 직렬화 형식을 사용한다.
- gRPC: 프로토콜 버퍼라는 이진 직렬화 형식을 사용하여 데이터의 크기를 줄이고, 직렬화 및 역직렬화 속도를 향상시킨다.
- 전송 프로토콜
- RPC: 주로 HTTP/1.1 을 사용하며, 요청-응답 방식으로 통신한다.
- gRPC: HTTP/2 를 기반으로 하여 멀티플렉싱, 헤더 압축, 서버 푸시 등 향상된 기능을 제공한다.
- 스트리밍 지원
- RPC: 일반적으로 단방향 통신을 지원하며, 스트리밍 기능이 제한적이다.
- gRPC: 클라이언트 스트리밍, 서버 스트리밍, 양방향 스트리밍을 모두 지원하여 실시간 데이터 전송에 유리하다.
- 다양한 언어 지원 및 코드 생성
- RPC: 언어별로 상이한 구현이 필요하며, 코드 생성 도구의 지원이 제한적이다.
- gRPC: 프로토콜 버퍼를 통해 서비스와 메시지의 계약을 정의하고, 이를 기반으로 다양한 언어의 클라이언트 및 서버 코드를 자동으로 생성할 수 있다.
gRPC 의 주요 장점
- 고성능: 이진 직력화와 HTTP/2의 효율적인 전송 방식을 통해 낮은 지연 시간과 높은 처리량을 제공한다.
- 다양한 언어 지원: 하나의 프로토콜 버퍼 정의로 여러 언어의 클라이언트와 서버 코드를 생성할 수 있어, 이기종 시스템 간의 통신이 용이히다.
- 스티리밍 기능: 다양한 스티리밍 방식을 지원하여 실시간 데이터 처리에 적합하다.
- 엄격한 계약 기반 개발: 프로토콜 버퍼를 통한 명확한 인터페이스 정의로, 개발 단계에서오류를 줄이고 유지보수성을 높인다.
gRPC 의 주요 상태 코드 목록
코드 | 상태 | 설명 |
0 | OK | 성공 |
1 | CANCELLED | 취소됨 |
2 | UNKNOWN | 알려지지 않은 오류 |
3 | INVALID_ARGUMENT | 잘못된 인수 |
4 | DEADLINE_EXCEEDED | 타임아웃 |
5 | NOT_FOUND | 리소스를 찾을 수 없음 |
6 | ALREADY_EXISTS | 리소스 이미 존재 |
7 | PERMISSION_DENIED | 권한 없음 |
8 | RESOURCE_EXHAUSTED | 리수소 부족 |
9 | FAILED_PRECONDITION | 작업 수행 불가 상태 |
10 | ABORTED | 작업 중단(충돌 발생 가능) |
11 | OUT_OF_RANGE | 허용범위 벗어남 |
12 | UNIMPLEMENTED | 서버에서 구현되지 않은 메서드 호출 |
13 | INTERNAL | 예기치 못한 오류 |
14 | UNAVAILABLE | 서비스 다운 |
15 | DATA_LOSS | 중요 데이터 손실 |
16 | UNAUTHENTICATED | 인증 실패(권한 없음) |
구현 코드(Nestjs)
https://github.com/O-Seonsik/grpc-test/tree/release/1.0.0
GitHub - O-Seonsik/grpc-test: grpc 테스트를 위한 저장소입니다.
grpc 테스트를 위한 저장소입니다. Contribute to O-Seonsik/grpc-test development by creating an account on GitHub.
github.com