gRPC

2017년에 Thrift로 실험을 했으나 2021년 현재 gRPC가 완전히 주도권을 잡았다. 사실상 표준 RPC 프로토콜로 활약중이다.

Tutorial

『gRPC 시작에서 운영까지』 내용에 따라 1장1 Go 서버와 Java 클라이언트가 잘 동작한다.

Server: Go(Linux)

Go에서는 go mod init 후에 proto를 복사하고, protoc을 실행한다. protobuf는 $ sudo apt install protobuf-compiler로 설치한다. 또는 우분투에서는 $ sudo snap install protobuf --classic로 설치할 수 있다.

Client: Java

(주제와 다른 이슈) /usr/libexec/java_home -V에 JDK외에 설치가 확인되어 제대로 된 JAVA_HOME을 지정해주지 못하고 있음. /usr/libexec/java_home -v 1.8.0로 처리했다.

(마찬가지로 주제와 다른 이슈) 사내망에서 인증서 오류로 gradle build가 되지 않는다. 외부망에서 빌드한(서버에서 라이브러리를 받아온) 이후에 사내망 빌드가 가능하다.

코드 생성은 gradle build로 가능하다.

Generate code from *.proto

Python

$ python -m grpc_tools.protoc \
    -I. \
    --python_out=. \
    --grpc_python_out=. \
    calculator.proto

or

$ brew install protobuf
$ protoc -I. --python_out=. calculator.proto

현재 디렉토리에 pb가 생성된다.

Go

Go는 다소 복잡하다. 다음은 proto 디렉토리 하위에 pb가 생성된다.

$ brew install protobuf protoc-gen-go
$ protoc -I. \
    --go_out=plugins=grpc:. \
    --go_opt=Mcalculator.proto=proto/ \
    calculator.proto
  • plugins=grpcUnimplementedXXXServer, RegisterXXXServer wrapper 생성을 위해 필요하다.
  • --go_opt=Mcalculator.proto=proto/ 패키지명을 지정한다. 그렇지 않으면 proto 파일에서 option go_package를 지정해야 한다. main.go에서 해당 패키지를 import하여 사용하게 되며, 반드시 하나 이상의 /가 필요하다.
    import pb "XXX.com/pi/proto"
    

grpcurl

proto 파일을 지정하여 다음과 같이 호출할 수 있다.

$ brew install grpcurl
$ grpcurl \
    -proto product_info.proto \
    -d '{"name": "Samsung S10", 
        "description": "Galaxy S10", 
        "price": 700.0}' \
    xxx.a.run.app:443 \
    ecommerce.ProductInfo.addProduct | gnomon

속도 측정을 위해 gnomon을 파이프로 연결했다.

기타

  • Cloud Run Python 가이드2 대로 잘 동작한다.
  • gRPC는 docker의 python:3.8-alpine에서는 pip 설치가 진행되지 않았다. slim으로 가능.
  • Cloud Run에 올릴때는 --plaintext 옵션에 주의한다. 로컬에서는 해당 옵션이 필요하지만 서버에서는 당연히 필요 없기 때문. 게다가 오류도 Failed to dial target host로 나오기 때문에 혼동하기 쉽다.

Last Modified: 2021/03/24 16:56:33


2021 Book Reports  ·  Project Management  ·  epoll  ·  Deno  ·  Serverless AI  ·  흥미로운 통계  ·  2017 Book Reports  ·  Keras  ·  Windows Subsystem for Linux  ·  비지니스  ·  gRPC  ·  Go  ·  통계학 책  ·  머신러닝  ·  GPU Data Science  ·  C++  ·  AWS  ·  NLP  ·  Distance  ·  알고리즘  ·  통계학  ·  인공지능 책  ·  Firebase Cloud Messaging  ·  OAuth 2.0  ·  인공지능  ·  온라인 개발  ·  Microservices  ·  App Engine  ·  Cloud Load Balancing  ·  Cloud Run  ·  Python  ·  NLP 실험  ·  2020 Book Reports  ·  Windows 10  ·  비지니스 책  ·  통계학 응용  ·  Links  ·  Recommender System  ·  미래학 책  ·  자기계발 책  ·  수학 책  ·  GCP  ·  건강 책  ·  Terraform  ·  클라우드 책  ·  BigQuery  ·  수학  ·  컴퓨터시스템구조  ·  JetBrains  ·  Kubernetes  ·  2018 Book Reports  ·  2019 Book Reports  ·  Template  ·  Cryptography  ·  이산수학  ·  PyData  ·  Flask  ·  Docker  ·  강화학습  ·  머신러닝 책  ·  Markov Decision Process  ·  Santander Product Recommendation  ·  Java  ·  Android Development  ·  Zsh  ·  Software Deployment  ·  GCS  ·  XGBoost  ·  Front-End  ·  Activation, Cost Functions  ·  자료구조  ·  사회심리학  ·  Information Retrieval  ·  OOP  ·  데이터 사이언스  ·  진화생물학  ·  LifeHacks  ·  Decision Tree  ·  Hadoop, Spark  ·  데이터 마이닝  ·  CNN, RNN  ·  운영체제  ·  머신러닝 분류기  ·  Support Vector Machine  ·  Naive Bayes  ·  컴파일러  ·  딥러닝  ·  Word Embedding  ·  영어  ·  Scikit Learn  ·  MySQL
is a collection of Papers I have written.
© 2000 - Sang-Kil Park Except where otherwise noted, content on this site is licensed under a CC BY 4.0.
This site design was brought from Distill.