더북(TheBook)

3.2.2 동기 RPI 패턴: gRPC

HTTP는 한정된 동사만 지원하기 때문에 다양한 업데이트 작업을 지원하는 REST API를 설계하기가 쉽지 않습니다. 그래서 등장한 기술이 바로 gRPC19입니다. gRPC는 다양한 언어로 클라이언트/서버를 작성할 수 있는 프레임워크입니다.20 또 gRPC는 이진 메시지 기반의 프로토콜이므로 (앞서 이진 메시지 포맷을 소개할 때 언급했듯이) 서비스를 API 우선 방식으로 설계할 수밖에 없습니다. gRPC API는 프로토콜 버퍼(구조화 데이터를 직렬화하는 구글의 언어 중립적(language-neutral) 메커니즘) 기반의 IDL로 정의하며, 프로토콜 버퍼 컴파일러로 클라이언트 쪽 스텁 및 서버 쪽 스켈레톤을 생성할 수 있습니다. 이 컴파일러를 이용하면 자바, C#, Node.js, 고 언어 등 다양한 언어의 코드를 생성할 수 있습니다. 클라이언트/서버는 프로토콜 버퍼 포맷의 이진 메시지를 HTTP/2를 통해 교환합니다.

gRPC API는 하나 이상의 서비스와 요청/응답 메시지 데피니션(definition, 정의한 코드)으로 구성됩니다. 자바 인터페이스와 비슷한 서비스 데피니션은 정적 타입 메서드를 모아 놓은 것입니다. gRPC는 단순 요청/응답 RPC는 물론 스트리밍 RPC도 지원하므로 서버가 클라이언트에 메시지 스트림을 응답하는 것도 가능합니다. 반대로 클라이언트가 서버로 메시지 스트림을 보낼 수도 있습니다.

gRPC는 프로토콜 버퍼 메시지 포맷을 사용합니다. 프로토콜 버퍼는 간결하고 효율적인 이진 포맷입니다. 프로토콜 버퍼 메시지는 각 필드마다 번호가 매겨지고 타입 코드가 할당됩니다. 메시지 수신자는 자신이 필요한 필드만 추출하고 모르는 필드는 그냥 건너뛸 수 있기 때문에 하위 호환성을 유지하며 API를 발전시킬 수 있습니다.

 

 


 

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.