Hae-Riri / today-alcohol

오늘한주 - 술 레시피 공유 커뮤니티 모바일 앱
0 stars 0 forks source link

발표를 위한 개념 재정리 #7

Open Hae-Riri opened 3 years ago

Hae-Riri commented 3 years ago

https://real-dongsoo7.tistory.com/131 https://www.gitmemory.com/issue/URL-CHOP/Chop-Api/60/460911700 https://junhee-ko.github.io/2020/12/26/grpc-patterns/ https://medium.com/@goinhacker/microservices-with-grpc-d504133d191d https://luavis.me/http2/http2-overall-operation https://bourbonkk.tistory.com/90 https://velog.io/@ypo09/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%99%80-gRPC%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-%EA%B0%84-%ED%86%B5%EC%8B%A0-%EC%A0%81%EC%9A%A9%EA%B8%B0 https://ooeunz.tistory.com/80 https://ooeunz.tistory.com/130

Hae-Riri commented 3 years ago

gRPC 원리 + stub 동작에 대해

RPC

별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 리모트의 함수나 프로시저(특정 작업을 수행하는 블록)를 실행할 수 있게 하는 프로세스 간 통신 기술

stub과 skeleton

이 과정은 네트워크를 통한 정보 교환이기 때문에 로컬에서의 메소드 콜 보다는 훨씬 많은 시간을 소모한다. 따라서 원거리 호출의 횟수를 줄이는 게 수행 성능 향상을 위해 반드시 고려되야 할 사항이다.

RPC 동작

image RPC는 서버와 클라이언트 구조를 기반으로 작동하며, 각각의 클라이언트와 서버는 리모트 콜을 하기 위한 프로시저에 대한 인터페이스를 통해 서로의 요청에 대해 이해한다.

  1. IDL을 통해 호출에 대한 인터페이스를 정의한다.
  2. IDL에 의해 정의된 인터페이스는 클라이언트의 stub과 skeleton 생성의 기반이 되고, rcpgen(rpc 프로토콜 컴파일러)를 통해 각각의 stub(코드)과 skeleton을 생성한다.
  3. 클라이언트는 리모트의 프로시저를 사용하기 위해 설계된 stub의 프로시저를 호출하고, 프로시저 호출에 필요한 인자와 비즈니스 로직에 필요한 메소드를 호출한다.
  4. stub은 서버가 이해할 수 있는 형태로 데이터 캐스팅을 하고 서버 측 RPC로 호출을 진행한다.
  5. 서버는 수신된 호출에 대한 데이터를 처리한다.
  6. 서버 측 RPC 프로토콜은 처리된 데이터를 캐스팅해서 클라이언트로 응답한다.

요즘에 많은 서비스들이 MSA 구조로 개발되면서 다양한 언어, 프레임워크가 사용되는 환경에서 프로토콜에 맞춰 통신해야 하는 비용이 발생했고, 이 때 RPC를 이용하면 개발환경에 구애받지 않고 각 프로시저를 호출해서 사용할 수 있다.

gRPC 등장

gRPC는 기본적으로 프로토콜버퍼를 IDL(인터페이스 정의 언어)이자 message interchange format(메시지 교환 포맷)으로 사용한다.

image

gRPC가 MSA에 왜 적합할까?

  1. gRPC를 통해 각 프로시저를 호출해서 사용할 수 있으니 비즈니스 로직에 집중해서 개발할 수 있고 그래서 빠르게 개발할 수 있음.
  2. 다양한 언어와 플랫폼을 지원하기 때문에 폴리글랏을 지향하는 MSA 철학과도 일맥상통한다.
  3. protobuf에 의한 높은 메시지 압축률이 시스템 전체의 네트워크 트래픽을 획기적으로 줄여준다. 즉, 동일한 자원 제약에서 더 많은 서비스 인스턴스를 띄울 수 있음.