ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • gRPC
    Backend 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

    'Backend' 카테고리의 다른 글

    RPC(Remote Procedure Call)  (0) 2024.12.07
    분산 락(Distributed lock)  (0) 2024.11.17
Designed by Tistory.