-
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)
'Backend' 카테고리의 다른 글
RPC(Remote Procedure Call) (0) 2024.12.07 분산 락(Distributed lock) (0) 2024.11.17 - 데이터 직렬화 방식