Google에서 만든 RPC,

권장 시나리오

gRPC 약점

등장배경


1. Server-Client Model

PC 개념이 없던 시절, 프로그램은 하나의 메인 Frame에서 동작하는 Monolothic 구조로 설계되었다. 모든 기능들이 한 공간에서 구동되다보니 Network Communication이 중요하지 않았다.

소형 장비(PC, Workstation Server 등)들이 등장하면서 기업입장에서는 고가의 Main Framework를 비교적으로 저가인 Workstation Server로 대체하고자 하였으나 그대로 제공하기에는 한계가 존재했다.

Main Framework의 기능을 Workstaion Server로 분산시키기고 Network 연결로 서비스하는 방식(Server-Client Model)을 채택하게 되었고 서버 간 or 서버와 개인 PC 간 Network 연결/통신이 중요해지면서 OSI 7 layer, TCP/IP 등 Network 계층 구조가 정의되고 발전되기 시작하였다.

2. IPC(Inter Process Commnunication)

프로세스들은 기본적으로 상호독립적이다. 메모리를 공유하지 않기 때문에 각자 자신의 일만 하며 서로 간섭하지 않는다. 하지만 필요에 따라 프로세스 간 정보를 교환해야하는 경우 별도 수단을 이용하여 프로세스 통신하는 방법론을 통칭하여 IPC(Inter Process Communication)이라고 한다.

1) Socket

IPC 기법에는 공유 메모리, PIPE, Message Queue 등 여러가지 중 Socket을 살펴본다.

Socket이란, OSI 7 layer 구조의 Application Layer(L7)에서 Transport Prot(L4)의 TCP or UDP를 이용하기 위한 수단이다. 일종의 창구 역할을 하는데, 목적지와 통신이 컴퓨터 내부가 아니라 온라인 범위에서 이루어지기 때문에 Network 간의 통신이라고 구분되기도 하지만 실질적으로 Local Computer의 프로세스와 원격지 컴퓨터의 프로세스가 IPC 통신을 하는 것이다.

Socket은 대부분의 언어에서 API 형태로 제공하는 편리함 때문에 지금도 많이 사용되지만 일련의 통신 과정을 직접 구현하므로 통신 관련 장애를 처리하는 것은 개발자의 몫이다. 서비스가 고도화될 수록 많은 데이터가 돌아다니게 되며, 이에 따라 data formatting을 하는 것도 어려워진다.

2) RPC(Remote Procedure Call)

서비스가 고도화될 수록 많은 데이터가 돌아다니게 되며, 이에 따라 data formattin을 하는 것도 어려워진다. 이런 Socket의 한계에 RPC(Remote Procedure Call) 기술이 등장하게 된다. Network로 연결된 서버 상의 프로시저(함수, 메서드 등)를 원격으로 호출할 수 있는 기능이다. Network 통신을 위한 작업 하나하나 챙기기 귀찮으므로 통신이나 call방식에 신경쓰지 않고 원격지의 자원을 내 것처럼 사용할 수 있다. IDL(Interface Definication Language) 기반으로 다양한 언어(C++, Java, Python, Ruby, Node.js, C# 등)를 가진 환경에서도 쉽게 확장이 가능하며, 인터페이스 협업에도 용이하다는 장점이 있다.

RPC의 핵심개념은 ‘Stub(스텁)’이라는 것인데, 서버와 클라이언트는 서로 다른 주소 공간을 사용하므로 함수 호출에 사용된 매개변수를 꼭 변환해줘야 한다. 그렇지 않으면 메모리 매개 변수에 대한 포인터가 다른 데이터를 가리키게 된다. 이러한 변환을 담당하는 것이 스텁이다.