RPC의 개념

: Remote Procedure Call(원격 프로시저 호출)의 약자로, 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 *함수나 **프로시저를 실행할 수 있게 하는 프로세스 간 통신 기술을 말한다.

 다시 말해, RPC를 이용하면 프로그래머는 함수 또는 프로시저가 실행 프로그램이 존재하는 로컬 위치에 있든, 원격 위치에 있든 상관없이 동일한 기능을 수행할 수 있음을 의미한다.

 

※ 함수 vs 프로시저

* 함수(Function) : Input에 따른 Output의 발생을 목적으로 한다. 따라서 Return값을 필수로 가져야 하며, Client단에서 처리되기 때문에 주로 간단한 계산 및 수치 등을 도출할 때 사용한다. 

** 프로시저(Procedure) : Output값 자체에 집중하기보단, '명령 단위가 수행하는 절차'에 집중한 개념이라고 보면 된다.

따라서 Return값이 있을수도 있고, 없을수도 있으며, Server단에서 처리되기 때문에 함수보다 큰 단위의 실행, 프로세싱 등을 할 때 사용한다.


"RPC를 어디에 쓰는건데...?"

 

 일반적으로 프로세스(Process)자신의 주소공간 안에 존재하는 함수만 호출하여 실행 가능하다. 

 그러나, RPC의 경우 자신과 다른 주소공간에서 동작하는 프로세스의 함수를 실행할 수 있게 해주는데, 이는 네트워크를 통한 메시징을 수행하기 때문이다.

=> "요즘 유행하는 MSA(Micro Service Architecture) 구조의 서비스를 만들 때, 언어나 환경에 구애받지 않고,
비즈니스 로직을 개발하는데에 집중할 수 있다!"

 

RPC의 목표

- Client-Server 간의 커뮤니케이션에 필요한 상세정보는 최대한 감춘다. (=> 언어나 환경에 구애를 받지 않는다! )

- Client와 Server는 각각 일반 메소드를 호출하는 것처럼 원격지의 프로시저를 호출할 수 있다.

 

RPC의 메커니즘


RPC의 동작방식 - IDL 기반

IDL 기반의 RPC 과정

  1. IDL(Interface Definition Language)을 사용하여 서버의 호출 규약을 정의.
    함수명, 인자, 반환값에 대한 데이터 타입이 저장된 IDL 파일'rpcgen' 컴파일러를 이용하여 Stub 코드를 자동으로 생성.

    * IDL(Interface Definition Language) : 인터페이스 정의 언어. 어느 한 언어에 국한되지 않는 언어 중립적인 방법으로 인터페이스를 표현함으로써, 구현 언어(C, C++, Java 등)가 아닌 정의 언어로, 구현 언어로의 매핑(mapping)을 지원.
  2. Stub은 원시소스코드 (C, Java 등)의 형태로 만들어지므로, 클라이언트, 서버 프로그램에 각각 포함하여 빌드.
  3. 클라이언트 프로그램 입장에서는 자신의 프로세스 주소공간의 함수를 호출하는 것처럼 보이는데, 클라이언트 stub에 정의된 함수를 호출하는 것임.
  4. Stub 코드는 데이터 타입을 XDR(External Data Representation) 형식으로 변환하여 RPC 호출을 실행.

    * XDR 변환 이유 : 기본 데이터 타입(정수형, 부동소수점 등)에 대한 메모리 저장방식(Little-Endian / Big-Endian)CPU 아키텍처별로 다르며, 네트워크 전송과정에서 바이트 전송 순서를 보장하기 위함.
  5. 서버는 수신된 함수/프로시저 호출에 대한 처리를 서버 Stub을 통해 처리 완료 후, 결과값을 XDR 변환하여 Return.
  6. 최종적으로 클라이언트 프로그램은 서버가 Return한 결과값을 전송 받는다.

RPC의 대표적인 구현체

- 구글의 ProtocolBuffer

- 페이스북의 Thrift

- 트위터의 Finalge

 

RPC의 장점

- 고유 프로세스 개발에 집중 가능 (하부 네트워크 프로토콜에 신경쓰지 않아도 되기 때문)

- 프로세스간 통신 기능을 비교적 쉽게 구현하고 정교한 제어 가능

 

RPC 단점

- 호출 실행과 반환 시간이 보장되지 않음 (네트워크 구간을 통하여 RPC 통신을 하는 경우, 네트워크가 끊겼을 때 치명적 문제 발생)

- 보안이 보장되지 않음

 


참고

https://velog.io/@jakeseo_me/RPC%EB%9E%80

 

RPC란?

분산 네트워크 컴퓨터 환경에서 프로그래밍을 쉽게 할 수 있는 방법을 찾다가...Client to Server 패턴Server를 켬Client는 Server에 데이터 혹은 행동을 요청Server는 요청 받은 내용에 대한 응답을 반환Clie

velog.io

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기