RPC
RPC
원격 프로시저 호출(영어: remote procedure call, 리모트 프로시저 콜, RPC)은 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게하는 프로세스 간 통신 기술이다. 다시 말해, 원격 프로시저 호출을 이용하면 프로그래머는 함수가 실행 프로그램에 로컬 위치에 있든 원격 위치에 있든 동일한 코드를 이용할 수 있다.
객체 지향의 원칙을 사용하는 소프트웨어의 경우 원격 프로시저 호출을 원격 호출(remote invocation) 또는 원격 메소드 호출(remote method invocation)이라고 일컫는다.
가끔 ONC RPC와 DCE/RPC와 같은 비호환 대상을 수행하기 위해 쓰이는 다른 수많은 기술이 있다.
출처 위키백과
출처 https://www.geeksforgeeks.org/remote-procedure-call-rpc-in-operating-system/
RPC 가 등장하게 된 배경은 어떻게하면 분산 네트워크 컴퓨터 환경에서 프로그래밍을 쉽게 할수있을까에 대한 고민이였습니다.
분산시스템은 기본적으로 다수의 컴퓨터가 하나의 시스템처럼 작동하여 사용자에게 그 차이를 느끼지 못하게 하는 시스템을 말합니다.
이 분산시스템에서 가장 중요한 것은 시스템에 소속되어 있는 컴퓨터간의 통신인데 각 컴퓨터에서 실행되고 있는 프로그램 또는 프로세스들이 서로 통신이 가능해야 한다는 것입니다.
우리가 평소 사용하고 있고 알고있는 통신 패턴 아래와 같습니다.
Client - Server 패턴
-
Client는 요청 -> 대기
-
Server는 요청한 내용을 실행 -> 결과 Return
-
Client는 결과값 -> 활용
Socket
-
수작업으로 Formatting 해야 하는 단점
-
직접 네트워크 주소를 입력하고 보내야 하는 단점
RPC의 목적
-
클라이언트 - 서버간의 커뮤니케이션에 필요한 상세한 정보는 최대한 감추기
-
클라이언트는 일반 메소드를 호출하는 것처럼
-
서버도 마찬가지로 일반 메소드를 다루는 것처럼!
일반 Browser/Server(주로 client/server 라고 부르는) 과 차이
1. RPC 호출은 연결 지향적이지 않다.
client 는 그것이 실제로 실행되었는지 아닌지 알수없습니다.
그러므로 예측할수없는 네트워크 문제가 발생할때 그 호출이 실패한다면 오류가 발생할수있습니다.
신뢰성이 필요한경우 이 문제는 치명적일수있습니다.
2. client/server 는 아키텍쳐일뿐
사실 RPC 와 client/server 는 느슨하게 관련되어있습니다.
client 는 request 를 보내고 server 는 그것을 받는 하나의 아키텍쳐 일뿐입니다.
그래서 client 의 호출을 받는 server 는 RPC 를 사용할수도, 사용하지 않을수도 있습니다.
3. RPC 는 프록시 Object 에 메서드 호출
RPC는 클라이언트가 프록시 Object 에 메서드를 호출하고 , 그 프록시의 Object 가 서버에 요청을 보내게됩니다.(원격 프로시저 호출)
그런 다음 서버는 그 프록시의 Object 에 대한 메서드 호출로 변환하게됩니다.
언뜻 보기에는 클라이언트가 서버 Object 의 메서드를 호출하는것처럼 보이지만,
실제로 그것을 가능하게 하는것은 client/server code 입니다.
RPC 가 서버와 클라이언트에 연결 하는법
Static Binding
-
서버 주소 Hard Coding
-
간단하고 효율적
-
서버 주소 변경에 약함.
Dynamic Binding
-
주소 변경에 매우 유동적
-
여분의 서버를 둬야 하는 단점.
Name Server Load Balancer
RPC 데이터 흐름
서버와 클라이언트 사이에서 전송되는 데이터들을 Encoding/Decoding해주는 과정이 필요합니다.
이런 과정은 표준적으로 제공해주는데 그 중 하나가 ONC RPC에서 이용하는 XDR(eXternal Data Representation)입니다.
XDR은 C함수와 매크로의 모음으로 구성되어 있는데, 주고 받을 데이터를 각 머신에 맞도록 표준적인 방법으로 재해석하는 일을 하게됩니다.
RPC 구조와 상호작용
RPC 장점
-
비즈니스 로직에 집중할 수 있음.
-
다양한 언어를 가진 환경에서 쉽게 확장할 수 있음.
-
쉽게 인터페이스 협업이 가능함.
-
객체간의 메세지 전송을 통해 실행된다
RPC 단점
- 새로운 학습 비용이 듬.
- 사람의 눈으로 읽기 힘듬.
Reference
https://stackoverrun.com/ko/q/1875439
https://nesoy.github.io/articles/2019-07/RPC
https://girlsy7.tistory.com/133