-------------- RPC -------------- 개요 --------- 원격 프로시저 호출(Remote Procedure Call)의 약자이다. 주로 HTTP를 이용하여 서버에 API 콜을 호출함으로써 정의된 함수(프로시저)를 실행한다. 일반적으로 프로그램은 자기 자신의 주소 공간에 있는 함수만을 호출할 수 있지만, RPC를 사용하면 주소 공간의 제약 없이 다른 프로그램의 함수를 자유롭게 사용할 수 있다. 예를 들어, 유닉스 도메인 소켓(Unix Domain Socket)이 있다. 다른 컴퓨터의 프로세스의 함수를 호출하는 데 소켓(socket)을 이용하여도 위 기능을 수행할 수 있지만, RPC는 보다 다양한 기능을 제공하여 다른 컴퓨터와 보다 유연한 통신을 수행할 수 있다. 가령, Microsoft는 RPC를 메시지 큐 통신에 사용할 수 있도록 지원하였다(`MSMQ `_). 또한 Microsoft Exchange 서버 통신에 RPC 암호화 정책 설정을 지원한다. .. note:: 소켓이란 무엇인가요? 소켓은 네트워크 상에서 작동하는 프로그램 간의 양방향 통신을 구성하는 하나의 엔드 포인트이다. 프로그램이 데이터를 보내거나 받기 위해선, 반드시 소켓을 열어 소켓에 데이터를 써보내거나 소켓으로부터 읽어들여야 한다. 가령 TCP 통신에 있어서, 클라이언트가 서버의 IP 주소와 포트 번호를 알고 있다면, 해당 서버와 연결할 본인의 소켓을 열고, 서버로 연결 요청을 보낸다. 서버가 연결을 수락하는 경우, 서버가 연 해당 포트의 소켓과 클라이언트의 소켓이 서로 연결되며, 상호 간 통신이 가능해진다. .. mermaid:: sequenceDiagram Client-->>Server: Connection request Server->>+Client: Accept activate Server loop Note over Client, Server: Full Duplex Client-->>Server: Server-->>Client: end deactivate Server .. note:: 엔드 포인트란 무엇인가요? 통신에서 시작점과 끝점에 위치한 노드. 거쳐가는 중간 노드는 해당되지 않는다. .. note:: 소켓과 포트의 차이점은 무엇인가요? 노드(Node) : 네트워크에 연결된 모든 종류의 장치를 일컫는 용어. 특별히, 네트워크 주소(IP 주소)가 할당된 노드는 호스트(Host)라고 부른다. 포트(Port) : 네트워크 상에서 데이터를 주고받는 소켓을 식별하기 위해, 호스트의 프로세스가 점유하는 특정한 값. 소켓(Socket) : 네트워크로 데이터를 전송하기 위한 통로. 데이터는 프로세스 레벨에서 주고받는다. 즉, 호스트 간 데이터 전송이 이루어지기 위해선 각 호스트의 프로세스에 데이터가 전달되어야 한다. 이러한 프로세스 간 데이터 전달의 창구 역할을 포트가 수행한다. 호스트의 프로세스는 내부적으로 포트를 할당받는다. 그리고 각 호스트의 프로세스가 데이터를 주고받기 위해선, 호스트 모두 소켓을 열어야 한다. 하나의 프로세스는 하나의 포트에 여러 개의 소켓을 가질 수 있다. 소켓을 열기 위해선 호스트에 할당된 IP 주소, 포트 넘버, 프로토콜 등이 필요하며, 이 세 가지가 소켓을 정의하는 요소이다. 소켓과 포트는 모두 네트워크 연결을 바탕으로 한다. 호스트의 자체적인 서비스는 루프백 주소를 기반으로 소켓 연결을 진행하기도 한다. 참고자료 --------- - `전통적인 리눅스/UNIX의 IPC 방법들 `_ - `유닉스 도메인 소켓이란? `_ 종류 --------- :doc:`http`