ETC grpc framework
— FRAMEWORK, RPC, PROTOCOL, 2022 — 4 min read
grpc 가 뭐죠? Remote Procedure Call (RPC) framework
gRPC is a modern open source high performance Remote Procedure Call (RPC) framework that can run in any environmenthttps://grpc.io/
grpc 특징
원격 프로시저 호출 마이크로서비스 => 구글에서 rpc 를 잘 쓸 수 있도록 한 것 http 가 너무 느려서쓴다 remote 프로시저 콜 서로 인터페이스 규약을 정해놓고 어떤 것이 자신을 불렀는지 남길 수 있음=> grpc 사용
grpc 와 http API 를 비교
http 프로토콜 rest api 는
grpc 가 http 2 를써서 1.1 보다 좋아진 점은 grpc 가 양방향통신이 가능 grpc 는 byte 기반
postman 의 grpc 요청 기능 go 버전도 올리자
go 로 원격 메서드 실행을 원한다면 특정 언어에 얽매이지 않도록 grpc 와 같은 표준 프로토콜을 사용
rest full 하게 쓰고 있는데...
마이크로 서비스간에 통신 퍼포먼스를 생각하면 rpc remote prosiger call 을 쓰다가
http
tls 프로토콜
protocal 규약
network layor osi 7 계층
tls 프로토콜 grpc가 tls 로 통신한다 그래서 눈으로 보이지 않음 tls 방식으로 변환해서 간다 grpc 저수준의 방식 성능이 보장된 형태
json대신 protocol buffers (Protobuf) http 2 를 쓴다 ssl security => tls 기반에서 보안
비동기로 작동?
unary => 단방향으로
serverStreaming
여러번 스트리밍으로 보낸다
client 스트리밍
bi-directional Streaming
스트림으로 보내면 스트림으로 받음
protocal buffers
의 장점은 서로 다른 언어끼리 grpc 로 통신하면서 사용할 수 있다
언어 독립적이고 확장성있다
프로토컬퍼퍼의 Message,Service 두가지를 규약해 놓으면 통신할 수 있다
왜? 쓸까요?
마이크로 서비스 connection 스트리밍할 수 있음 멀티 랭기지 할 수 있다
front 에서 동영상을 주고받을 때 realtime streaming 할 수 있다
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
go install github.com/golang/protobuf/protoc-gen-go@latest
깔고 프로토 버프를 깔아보자
go install google.golang.org/protobuf/cmd/protoc-gen-go
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ./v0/gwiyeomgo/user.proto
20221216
.protoBuf
언어와 상관없이 쓸 수 있는 정의 서 data 를 message 로 정의 네이밍은 카멜케이스 필드는 스네이크케리스로 쓴다 필드 넘버를 추가 (가능하면 바꾸지 않는다)
정보를 바이트로 바낼때
115 는 1바이트 이고
16 이후는 2바이트로 왠만해서 1~15 번호를 써라
프로토3 최신 버전 사용 기본은 프로토2로 사용시 꼭 3 로 쓰기
repeated 를 쓰고 pack-ture 를 써서 배열을 보냏 수 있다
grpc 는 relase 를 해야함 clientService 만들어서
get 이름 getList
-
protobuf 파일 만들기 (정의서 만듬)
-
protoc로 컴파일 (언어별로 컴파일해서 go에서 쓸 수 있도록 만듬)
-
grpc 로 통신할 수 있도록 서버와 클라이언트 만들어서 통신을 했다.
-
postman 으로 테스트 하기
-
http 로 통신을 할 수 있도록 게이트 웨이를 넣음 (http 통신을 받은 후 => 게이트 웨이 => grpc )
유너리? 보내면 받는 http 1.0
스트림으로 양쪽 으로 통신하는 것도 가능..
6.grpc 미들웨어를 넣을 수 있다
https://devjin-blog.com/golang-grpc-server-4/ api 콜할 (request) 때 middleware 에서 grpc
출처 모음
https://chacha95.github.io/2020-06-15-gRPC1/ https://devjin-blog.com/golang-grpc-server-1/ https://grpc.io/docs/protoc-installation/ https://medium.com/naver-cloud-platform/nbp-%EA%B8%B0%EC%88%A0-%EA%B2%BD%ED%97%98-%EC%8B%9C%EB%8C%80%EC%9D%98-%ED%9D%90%EB%A6%84-grpc-%EA%B9%8A%EA%B2%8C-%ED%8C%8C%EA%B3%A0%EB%93%A4%EA%B8%B0-1-39e97cb3460