개발/잡다
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
반응형