gRPC 서비스 퍼블리싱 3탄 – 에러에 응답하는 법

애플리케이션 운영을 보다 빠르고, 스마트하며, 안전하게 운영할 수 있도록 지원하는 글로벌 No.1 브랜드​ <F5 네트웍스 코리아> 공식 블로그를 방문해주신 여러분, 반갑습니다! gRPC 서비스 퍼블리싱 2탄에서는 간단한 테스트 환경을 통해 기능 및 주요 구성 요소들에 대한 정보를 알기 쉽게 소개해 드렸는데요. 3탄은 gRPC 에러로 어려움을 겪고 계신 분들을 위한 포스팅을 준비했습니다. gRPC 오류는 일반적인 HTTP 트래픽 관련 오류와 다소 다른 점이 있으니 꼭 확인하세요!​

먼저 클라이언트의 여러 오류 조건이 gRPC 응답으로 표현되고, NGINX Plus가 gRPC 게이트웨이로서 구성된 경우를 살펴보겠습니다. 이 경우 기본 NGINX Plus 오류 페이지(HTML 형식)가 적합하지 않을 것으로 예상됩니다. 이럴 때는 ​gRPC 클라이언트를 위한 커스텀 오류 응답을 지정함으로써 이를 해결합니다.

전체 gRPC 오류 응답은 비교적 길고 대개 정적 구성이기 때문에 별도의 파일인 errors.grpc_conf에 보관하고, include 지시문(라인 36)을 이용해 이를 참조할 것을 추천합니다. HTTP/REST 클라이언트와 달리, gRPC 클라이언트 애플리케이션은 다양한 HTTP 상태 코드를 처리할 것으로 기대되지 않습니다. gRPC 문서는 NGINX Plus와 같은 중간 프록시가 HTTP 오류 코드를 gRPC 상태 코드로 변환함으로써 클라이언트가 항상 적합한 응답을 받도록 하는 방법을 명시하고 있습니다. error_page 지시문을 이용해 이러한 매핑을 실행합니다.

각 표준 HTTP 상태 코드는 @ prefix를 이용해 명명된 위치로 전달되며, 따라서 gRPC 규격의 응답이 생성될 수 있습니다. 예를 들어, HTTP 404 응답은 내부적으로 @grpc_unimplemented 위치로 경로가 재지정되며 이는 이 파일의 뒷부분에서 정의됩니다.

@grpc_unimplemented로 명명된 위치는 오직 내부 NGINX 처리에만 사용될 수 있으며 클라이언트는 이를 직접 요청할 수 없습니다. 따라서, 라우팅 가능한 URI가 존재하지 않습니다. 이 위치 내에서 필수 gRPC 헤더를 입력하고 이를 전송함으로써 응답 본문 없이, HTTP 상태 코드 204 (No Content)를 이용해 gRPC 응답을 구성합니다.

존재하지 않는 gRPC 메소드를 요청한 오작동 gRPC 클라이언트는 curl(1) 명령을 이용해 복제할 수 있습니다. 하지만, 프로토콜 버퍼가 바이너리 데이터 형식을 사용하기 때문에 curl 명령은 일반적으로 gRPC 테스트 클라이언트로서 적합하지 않습니다. 커맨드라인에서 gRPC를 테스트한다면, grpc_cli 사용을 고려하세요.

위에서 참조된 grpc_errors.conf 파일은 타임아웃 및 클라이언트 인증서 오류 등 NGINX Plus가 생성하는 다른 오류 응답을 위한 HTTP‑to‑gRPC 상태 코드 매핑도 포함하고 있습니다.

gRPC 에러는 일반적인 HTTP 트래픽 에러와는 다소 다르기 때문에 본 포스팅에서 F5가 알려 드린 응답 방법을 꼭 적용해 보시기 바랍니다. 이외 궁금한 사항은 댓글 또는 Contact F5를 통해 문의해 주세요! “Code Connects Us All!” F5 네트웍스 코리아는 귀사의 애플리케이션이 보다 빠르고 스마트하며 안전하게 운영될 수 있도록 항상 최선을 다하겠습니다.

출처 : F5코리아 공식블로그 https://blog.naver.com/f5networks_korea/221935104989

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>