개발/잡다

GRPC란? - 고급 기능들

말고기 2022. 1. 2. 17:12
728x90
반응형

개요

  • 이전의 포스트에서 GRPC에 대해 무엇인지 알아보았다.
  • 이번 시간에는 고급 기능들에 대해서 정리해보려고 한다.
    • Metadata
    • 에러 처리
    • Interceptor
    • 데드라인
    • TLS
  • 해당 포스트는 개념에 대해서만 다루고 있고, 구현은 따로 글을 적어보려고 한다.

1. Metadata

  • GPRC에서는 metadata 정보를 셋팅해서 데이터를 실어보낼 수 있다.
  • 이는 HTTP/2의 headers frame을 통해서 주고 받을 수 있다.
  • 아래는 custom하게 metadata를 설정해서 보내는 예제이다.

cf)
사진에서 보면 어떤 header들은 :scheme http와 같이 설정된 것을 볼수 있는데, 이는 http/2의 header compression spec (HPACK) 중 lookup table 에 관한 스펙이다.
여기서 다루기에는 상세한 내용이라, 자세한 내용은 http2 header를 참조하면 좋을 것 같다.

2. 에러처리

  • GRPC도 당연하게도 에러 메세지들을 제공한다.
  • 주의할 점은 grpc 에러의 경우 http/2 레벨로 보면 성공으로 보이지만 실질적으로 headers frame에 "grpc-status"에 status code를, "grpc-message" 헤더에서 에러 내용을 포함해서 보내는 것을 확인할 수 있다.
  • 여기 grpc error codes에서 에러코드들을 확인할 수 있다.
  • 이에 따라 exception을 적절히 처리해주어야 하는데, streaming 방식의 통신은 중도 실패가 존재할 수 있음을 항상 유의해서 작업해주어야 한다.

3. Interceptor

  • GRPC 라이브러리에서는 interceptor를 통해서 공통 로직을 처리할 수 있게 해두었다.
  • 해당하는 부분은 구현에서 따로 다루어보도록 하자.

4. 데드라인 & 취소

  • 데드라인은 client timeout과 유사하고, 특정 시간을 설정해 해당시간보다 처리가 늦어질 경우 클라이언트 또는 서버에서 DEADLINE_EXCEEDED 타입의 에러코드를 반환한다.
  • 데드라인과 유사하게 중간에 취소도 구현할 수 있는데, 이는 CANCELLED 에러 코드를 통해서 전파된다.

5. TLS

  • GRPC에서 TLS단을 설정할 수 있는데, 방식이 크게 두 가지가 있다. (TLS, mTLS - Mutual TLS)
  • TLS의 경우 client에서 server key의 유효성만을 검증하는 반면에, mTLS에서는 client측도 key를 보내서, key에 대한 유효성을 검증한다.

결론

  • 해당 내용들은 간단하게 지원이 되는 개념들만 정리해보았다.
  • 간단한 컨셉들만 우선 이해하면 될 것 같고, 실제 구현은 따로 포스팅해서 올려보려고 한다.

출처

728x90
반응형