본문 바로가기

Dev/기타

[gRPC] 개념 정리

** 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://bit.ly/3tk7280

https://bit.ly/3I07Qmu

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