원격 프로시저 호출(Remote Procedure Call, RPC)

Programming/Extractions 2021. 4. 14. 16:41

미들웨어는 다른 소프트웨어 구성 요소 간의 통합을 쉽게 할 수 있도록 표준화된 인터페이스를 제공하며, 소프트웨어의 확장 및 축소를 유연하게 할 수 있도록 소프트웨어 계층 간의 결합도(coupling)를 낮춰준다. 미들웨어는 다수의 프로세스나 소프트웨어 계층 간의 효과적인 데이터 교환을 목적으로 구현된다. 본 글에서는 미들웨어인 원격 프로시저 호출에 대해 살펴본다.

RPC 호출 방식

RPC는 원격지에 위치하는 프로세스의 주소공간에 정의된 함수나 프로시저를 실행하여 프로세스 간의 통신을 수행하는 방법이다. RPC를 위해서는 IDL(Interface Definition Language)이라는 호출 규약이 정의되어야 한다. 서로 사양이 다른 두 프로세스가 통신을 하기 위해서는 IDL을 이용한 컴파일을 통해 클라이언트와 서버의 스터브(stub) 코드를 생성해야 한다. 스터브는 원격지의 프로세스를 대리하는 루틴으로, 클라이언트 혹은 서버의 객체를 대리하여 원격 프로세스의 요청을 받아들이고 응답을 전송한다. 또한 스터브는 객체가 요청한 데이터를 마샬링(marshaling)하여 상대방에게 전송하고, 작업이 완료된 데이터를 언마샬링(unmarshaling)하여 객체가 활용할 수 있는 형태로 변환한다.

RPC는 분산 컴퓨팅 환경에서 유용하게 활용 가능하다. RPC를 이용하면 프로세스 간 양방향 통신을 비교적 쉽게 구현할 수 있으며, IDL을 기반으로 하기 때문에 프로그래밍 언어에 구애받지 않고 다양한 환경으로 시스템을 확장하기 용이하다.

 

□ gRPC Remote Procedure Call

gRPC는 구글이 개발한 RPC로, 데이터 전송을 위해 HTTP/2를 이용하며 프로토콜 버퍼(Protocol Buffer)라는 IDL을 사용하여 다른 프로세스의 함수를 호출한다. 여기서 HTTP/2는 HTTP/1의 성능을 개선한 버전이다. HTTP/1은 기본적으로 클라이언트 요청에 서버가 응답하기 때문에 매 요청마다 커넥션(connection)을 생성해야 하며 쿠키를 포함한 헤더로 인해 용량이 크지만, HTTP/2는 헤더 테이블과 호프만 인코딩 기법을 사용하여 헤더 정보를 압축하고, 서버가 클라이언트 요청 없이도 리소스를 전달하여 하나의 커넥션만으로 데이터를 교환할 수 있기 때문에 HTTP/1에 비해 성능이 뛰어나다.

gPRC는 다양한 프로그래밍 언어와 플랫폼에서 사용이 가능하고, 구현이 쉽고 지원하는 기능이 풍부하며 성능 또한 우수하다. 또한 HTTP/2 기반이기 때문에 실시간 및 비동기식 데이터 전송, 푸시 서비스를 간단하게 구현할 수도 있기 때문에 애플리케이션 간 데이터 교환이나 마이크로서비스(Microservice)를 구축하기 위한 방법으로 많은 개발자들에게 채택되고 있다.

admin