[gRPC] gRPC gateway란
gRPC proxy? gateway?
두 명칭이 혼용되는 것 같으나, 개념을 보면 같은 것을 알 수 있음
Grpc-gateway, a server for gRPC and RESTful styles Grpc-gateway is a server that routes HTTP/1.1 request with JSON bodies to gRPC handlers with protobuf bodies. This means you can define your entire API as gRPC methods with requests and responses defined as protobuf, and then implement those gRPC handlers on your API server. Grpc-gateway can then transform your gRPC service into a RESTful API.
gRPC gateway는 client로부터 restfulAPI형식으로(HTTP JSON) 정보를 받고, 이 정보를 gRPC server 서비스의 형식대로 protobuf로 변환한 다음에 그 message를 gRPC server에 gRPC로 보내는 서버다. 주로 rpc 통신이 힘든 경우 converter로 사용한다.
gRPC Gateway 플러그인을 사용하면 gRPC 서비스에 REST API 인터페이스를 제공할 수 있도록 go 런타임에서 작동하는 프록시 서버와 Swagger 문서를 generate 해준다. (go 이외 다른 언어는 미지원)
https://medium.com/@thinhda/compare-grpc-web-with-grpc-gateway-fa1e2acdf29f
Compare gRPC-Web with grpc-gateway
gRPC-Web and grpc-gateway have advantages and disadvantages. Depending on your business, what you have and what you need, …
medium.com
https://deepbaksu.github.io/2021/05/01/how-to-REST-from-gRPC/
gRPC에서 REST까지
gRPC를 통해 REST 서버를 만들어 보자. gRPC 클라이언트로 연결할 수 있으면 좋지만, REST가 보편적이기 때문에 REST API를 구현해줘야 할 필요가 있다. 또한, Heroku에서는 HTTP/2 를 지원하지 않기 때문에
deepbaksu.github.io
js에서 바로 gRPC 서버로 통신을 하려고 하는 경우?
JavaScript running in the browser does not provide full control over HTTP2.
The gRPC protocol uses features of HTTP/2 that cannot be controlled by JavaScript.
So that a proxy is required.
gRPC-WEB은 gRPC를 브라우저에서 사용가능하도록 브라우저 지원을 추가한 스펙이다. 현재 브라우저 API가 HTTP/2 엑세스를 지원하지 않기 때문에 gRPC-WEB을 사용하여 브라우저에서 서버로 직접 통신을 할 수는 없다.
즉, js단에서 gRPC-WEB 으로 개발해도 브라우저가 HTTP/2 통신을 지원하지 않기 때문에 proxy가 필요한 것.
https://velog.io/@kyusung/grpc-web-example
gRPC-web 삽질기
Javascript 기반으로 브라우저에서 gRPC를 사용하려고 하였지만, 적용하지 못한 내용에 대한 기록입니다.gRPC에 대해서 간략히 설명하고 gRPC 라이브러리를 이용하여 node.js 기반의 Application을 만드는
velog.io
https://medium.com/@denis.zhbankov/grpc-web-via-http2-b05c8c8f9e6
gRPC-Web via HTTP2
Lately, my backend colleagues and I decided to give gRPC framework a try instead of Protocol Buffers serialiser over WebSockets transport.
medium.com
사실 이 모든 글이 보고있던 프로젝트의 아래 설정 값 하나로부터 시작되었는데.. 혹시 spring/grpc에 haproxy 설정이 가능한지 궁금하여 이모저모 살펴본 것이다. 그러던 중 위 내용을 확인하였고 아래 값은 그냥 (개발자가 만든) 커스텀 값임을 파악하게 되었다.
grpc.use-haproxy=true
그래도 관련 내용 살펴본게 아까워서 추가적으로 적어본다.
HAProxy?
= software loadbalaner, reverse proxy
https://leffept.tistory.com/309
[HAProxy]HAProxy 란?
HAProxy 란? HAProxy는 기존의 하드웨어 스위치를 대체하는 소프트웨어 로드 밸런서로, 네트워크 스위치에서 제공하는 L4, L7 기능 및 로드 밸런서 기능을 제공한다. 설치가 쉽고 빠르기에 서비스 이
leffept.tistory.com
https://prohannah.tistory.com/65
로드밸런서 (L4, L7, NginX, HAProxy)
네트워크 로드밸런싱에서 주로 언급되는 로드밸런서 L4, L7, HAProxy 위주로 설명하겠다. L4 (Transport Layer) L4는 IP, Port, Session 기반으로 로드밸런싱하며 웬만한 서비스에서는 이것만으로 부하 분산이
prohannah.tistory.com
HAProxy vs nginx?
Nginx는 웹서버로서 load balancing, reverse proxy 기능 또한 제공.
굳이 웹 서버로서의 역할이 필요가 없다면(캐싱) HAProxy의 load balancing이 헬스체크가 가능하기도 하고 좀 더 가벼움
https://seokjun.kim/haproxy-and-nginx-load-balancing/
HAProxy 와 Nginx 의 로드밸런싱
NGINX Nginx 는 대표적인 웹서버인 Apache 의 문제점을 해결하면서 만들어진 웹서버로 비동기 방식으로 개발되어 가볍고 빠른 것으로 유명한 오픈소스 어플리케이션이다. Nginx 는 http 나 reverse proxy 같
seokjun.kim
완전 다른 내용/ 참고..
ingress proxy?
일반적인 Ingress는 외부로부터 서버 내부로 유입되는 네트워크 트래픽을, egress는 서버 내부에서 외부로 나가는 트래픽을 의미.
쿠버네티스에서의 Ingress는 외부에서 실행 중인 Deployment와 Service에 접근하기 위한, 일종의 관문 (Gateway) 같은 역할을 하며 L7에서의 요청을 처리한다.
https://kubernetes.io/ko/docs/concepts/services-networking/ingress/
인그레스(Ingress)
FEATURE STATE: Kubernetes v1.19 [stable] 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트이며, 일반적으로 HTTP를 관리함. 인그레스는 부하 분산, SSL 종료, 명칭 기반의 가상 호스팅을 제공
kubernetes.io
https://blog.naver.com/alice_k106/221502890249
162. [Kubernetes] 1편 : 쿠버네티스 Ingress 개념 및 사용 방법, 온-프레미스 환경에서 Ingress 구축하기
이번 포스트에서는 쿠버네티스에서 인그레스 (Ingress) 를 사용하는 방법, 그리고 Public 클라우드를 쓰...
blog.naver.com