네트워크에 연결된 두 시스템 사이의 통신을 위해 RPC(Remote Procedure Calls)를 이용할 수도 있다.
두개의 서로 다른 객체가 있을 때 RPC의 과정은 다음과 같다.
1 ) 객체1은 stub을 호출하여 다른 기계에 있는 포트번호를 알아낸다.
2 ) 포트 번호를 찾으면 데이터를 보내기 좋은 형태롤 정돈(marshall)한다.
3 ) 객체2의 stub은 메세지를 받고 정돈된 데이터를 읽는다.
[정돈(marshall)]
marshall은 왜 필요한가?
클라이언트와 서버 기기의 데이터 표현 방식의 차이를 생각해볼 수 있다. 어떤 기계(big-endian)는 최상위 바이트를 먼저 저장하고, 어떤 기계(little_endia)는 최하위 바이트를 먼저 저장할 수 있다. 이와 같은 차이를 해결하기 위해 RPC는 기종 중립적인 데이터 표현 방식을 정의한다.(XDR : external data representation)
RPC에서 생길 수 있는 2가지 문제를 생각해보자
1 ) 네트워크를 기반으로 한 RPC는 네트워크 오류 때문에 실패할 수도 있고, 메세지가 중복되어 호출이 여러 번 실행될 수 있다.
이를 해결하기 위해선 최대 한 번 실행되는 것이 아니라 정확히 한번 처리되도록 보장해야한다.
이를 위해서 각 메세지에 타임스탬프를 매기는 방법을 생각할 수 있다.
2 ) 포트 번호를 알아내기 힘들다.
이를 해결하기 위해 고정된 포트 주소 형태로 미리 정해 놓는 방법이 있다.
또 다른 방법으로 디먼(matchmaker)를 이용할 수도 있다.