** gRPC 란?
- 기존 RPC 를 구글에서 좀 더 손쉽게 사용할 수 있도록 구현한 것이다.
- 거의 모든 언어에서 통신이 가능하다. (유: 엄격한 protoBuf 로 통신한다.)
- HTTP 통신처럼 매번 세션을 맺지 않고, 짧은 간격으로 데이터를 주고받아 병목문제 해결
- HTTP/2 통신 양방향 스트리밍을 지원하기 때문에, 한번의 커넥션으로 서버와 클라이언트가 서로 동시에 데이터를 주고받을 수 있다.
- 데이터 명세는 .proto 파일에 작성한다.
- 높은 헤더 압축률을 보장하고 중복을 제거하여 효율적이다.
- 클라이언트 요청을 최소화할 수 있다..
- 브라우저 지원 종류가 적다. 즉, 클라이언트 단위는 REST API로, 마이크로 서비스 단위 통신은 gRPC 선택 적합
** protoBuf
- 구글에서 개발한 구조화된 데이터 직렬화(데이터 표현을 바이트 단위로 변환하는 작업) 기법이다.
- 필드 번호, 필드 유형 등을 1byte로 받아서 식별하고, 주어진 길이 만큼 읽도록 용량을 최소화한다.
- 데이터명세는 .proto 파일에 작성하고, 이것을 바이너리로 빌드한 것이 .pb.go 파일이다.
** proto File
1) 메시지와 필드
- protoBuf 를 통해 주고받는 데이터들은 메시지를 통해 정의한다.
- 메시지에 정의된 필드들은 각각 고유한 번호를 가지게 되고,
- 이는 인코딩이 후 바이너리 데이터에서 필드를 식별하는 데 사용된다.
- 프로토 파일에서 주고받는 data들을 메시지라는 것으로 정의합니다.
a. 메시지 이름 searchRequest
b. 필드 query, page_number, result_per_page. 각 필드는 고유 번호를 가진다. 이 번호는 인코딩 이후 이진 데이터에서 필드를 식별하는데 사용된다. 자주 호출되는 필드에 대해서는 1~15로 지정하는 것이 좋다.
c. 신택스 proto 버전 규약 명시. 디폴트는 버전2. 지원 언어와 네이밍 문법 차이 있다.
d. 프로토 파일 필드 룰
e. 서비스 : rpc를 통해 서버가 클라이언트에게 제공할 수 있는 함수의 형태를 정의한다. 카멜 케이스를 권장하며, 스트림 옵션을 주면 양방향 스트리밍 rpc를 구현할 수 이다.
2) 패키지
- 메세지 이름을 명확하게 사용하기 위함
3) 서비스
- RPC를 통해 서버와 클라이언트에게 제공할 함수의 형태를 정의한다.
- 디폴트는 단일 요청/응답으로 동작하지만, stream 옵션을 주면 RPC 를 구현할 수 있다.
** RPC 란?
- Remote Procedure Call
- 네트워크로 연결된 서버 상의 프로시저(함수, 메서드 등)을 원격으로 호출할 수 있는 프로세스 간 통신 기술이다.
- IDL 기반으로 다양한 언어를 가진 환경에서도 쉽게 확장 가능하며, 인터페이스 협업에도 용하다. 즉, 같은 언어를 사용하지 않는 소프트웨어 컴포넌트 사이의 통신을 가능하게 한다.
- 핵심 기술 : Stub
** Stub 이란?
- 서버-클라이언트 통신 사이의 매개변수이다.
- 클라이언트 스텁 : 함수 호출에 사용된 파라미터 변환 및 함수 실행 후 서버에 전달 된 결과 변환을 담당한다.
- 서버 스텁 : 클라이언트 요청 시 전달한 매개 변수의 역변환 미 ㅊ함수 실행 결과 변환을 담당한다.
Ref.
https://bourbonkk.tistory.com/90
https://cloud.google.com/endpoints/docs/grpc/about-grpc?hl=ko
'Dev > 기타' 카테고리의 다른 글
Build 과정에서 알게 된 점 (0) | 2022.01.25 |
---|---|
[gRPC] 통신 예제 (0) | 2022.01.25 |
Armeria의 서킷 브레이커 (0) | 2022.01.17 |
VisualVM을 이용한 JVM 모니터링 (0) | 2021.08.09 |
Jib 예제 따라하기 (0) | 2021.08.09 |