🚩 RPC - RPC에 관하여
현재 유행하는 MSA ( Micro Service Architecture ) 구조로 서비스를 만들다보면, 다양한 언어와 프레임워크로 개발되는 경우가 빈번하다.
그러면 Service 간에 통신이 환경의 영향을 받아 매우 복잡해지게 되는데 이러한 문제를 해결하기 위해서 프로그램 간에 API ( Application Programming Interface ) 를 만든다.
현재 제일 대중적인 API 는 HTTP Protocol 을 활용한 RestAPI 인데, 우연히 RPC 에 대해서 알게되어 정리해보려고 한다.
📝 RPC ( Remote Procedure Call ) 란 ?
■ RPC ( Remote Procedure Call ) 의 정의
- Remote Procedure Call( 원격 프로시저 호출 )의 약자로, 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수 ( Function ) 혹은 프로시저 ( Procedure ) 를 실행할 수 있게 하는 프로세스 간 통신 기술
용어 정리
- 함수 ( Function ) : Input에 따른 Output의 발생이 목적이므로 Return값을 필수로 가지는 계산
- 프로시저 ( Procedure ) : Input에 따른 Output의 발생에 집중하기보다는 작업에 집중한 개념
■ RPC ( Remote Procedure Call ) 의 동작 원리

동작 순서
- Client 에서 매개변수를 Client stub 에 전달
- Client stub 에서 매개변수를 메시지로 Marshalling
- Client stub 은 Marshalling 된 메세지를 전송계층 ( Transport Layer ) 으로 전달하여 Server 로 전송.
- Server 에서 메시지를 받아 Server stub 으로 전달하고 매개 변수를 UnMarshalling 하여 Server 함수 호출
- 함수 수행이 완료되면 Server Stub 으로 리턴되며 리턴값을 메시지로 Marshalling
- 결과 메시지를 Client 에 보내고 Client 는 UnMarshalling 후, 리턴값을 Client 에게 반환
용어 정리
-
Stub : 서버와 클라이언트는 서로 다른 주소 공간을 사용하므로 함수 호출에 사용된 매개변수를 Marshalling, UnMarshalling 하는 역할
- Client stub : 함수 호출에 사용된 파라미터의 변환(Marshalling) 및 함수 실행 후 Server 에서 전달된 결과의 반환
- Server stub : Client 가 전달한 매개변수의 역변환(UnMarshalling) 및 함수 실행 결과 변환하여 Client 에 반환
-
Marshalling & UnMarshalling : 데이터를 전송하기 위해서 변환하는 일련의 과정
-
Serialize & Deserialize : 데이터를 전송하기 위해 byte stream 으로 변환하는 과정
■ RPC ( Remote Procedure Call ) 의 최종 지향점
- Client <-> Server 간의 커뮤니케이션에 필요한 상세정보는 최대한 감춘다.
- Client 는 일반 메소드를 호출하는 것처럼 Server 의 Method 를 호출할 수 있다.
- Server 도 마찬가지로 일반 메소드를 다루는 것처럼 Client Method 를 다룰 수 있다.
■ RPC ( Remote Procedure Call ) 의 장점
- 환경에 제한 받지 않고 프로그램 간 통신을 쉽게 구현하고 정교한 제어가 가능하다.
- 네트워크 프로토콜에 대한 제한 없이 프로그램 개발 집중이 가능하다.
■ RPC ( Remote Procedure Call ) 의 단점
- 호출 실행과 반환 시간이 보장되지 않는다.
- 네트워크 구간을 통하여 RPC 통신을 하는 경우, 네트워크가 끊겼을 때 치명적 문제 발생한다.
- 통신간의 보안이 보장되지 않는다.
🚩 마치며..
RPC 에 대한 개념을 정리해보았다.
다음에는 RPC 개념을 활용하여 Google에서 만든 gRPC 에 대하여 정리해보려고한다.
gRPC 는 Google, IBM, Netflix 에서 채용한 고성능 오픈 소스 RPC 프레임워크이다.