
배달 앱으로 치킨을 주문하면, 주문 요청은 배달 앱을 통해 치킨 집으로 전달되고, 치킨 집은 요청을 받아 치킨을 만들고, 배달 앱을 통해 배달원에게 넘긴다. 배달원은 치킨을 배달 앱 사용자에게 전달한다.
배달 앱 사용자는 클라이언트이고, 전달하는 배달 앱과 배달원은 네트워크, 치킨집은 서버라고 비유해 볼 수 있다.
RPC는 네트워크를 통해 원격 서비스를 호출하지만, 사용자 입장에서는 로컬 함수를 호출하는 것처럼 보인다.

RPC(Remote Procedure Call, 원격 프로시저 호출)은 네트워크를 통해 서로 다른 시스템 간에 함수를 호출하는 기술을 의미한다. 로컬 함수처럼 보이지만, 실제로는 원격 시스템에서 실행되는 함수 호출 방식을 의미하는 것이다. RPC를 사용하면, 개발자는 네트워크를 직접 다루지 않고도 분산 애플리케이션을 쉽게 구축할 수 있다.

비슷한 기능을 하는 API라는 용어를 더 잘 알고 있을 것이다. 애플리케이션 프로토콜 인터페이스 자체를 의미하는 용어인데, 결국 API를 실행하는 것이나, RPC를 실행하는 것이나 동일한 동작일 수 있다. 단지 프로토콜(규약)인지, 외부 기능 수행(함수 호출)을 나타내는 용어인지, 차이가 있을 뿐이다.
RPC는 클라이언트와 서버 간의 원격 호출을 가능하게 하기 위해 여러 단계를 거친다.

- 클라이언트는 로컬에서 원격 함수를 호출하는 것처럼 보이지만, 실제로는 원격 함수를 호출하는 대리 객체가 처리한다. 이 대리 객체를 Stub라고 한다.
- 호출된 함수의 매개변수를 네트워크를 통해 전송할 수 있도록 직렬화한다. 특정 규칙을 가지고 하나의 문자열로 묶는다고 생각하면 이해하기 수월할 것이다.
- 직렬화된 데이터를 네트워크를 통해 서버로 전달한다.
- 서버는 전달받은 데이터를 역직렬화하여 실제 함수 호출을 수행한다.
- 서버에서 실행된 함수의 결과를 클라이언트로 다시 직렬화하여 반환한다.
- 클라이언트는 반환된 데이터를 역직렬화하여 최종 결과를 얻는다.

다양한 단계로 나뉘어 있지만, 결국 데이터를 묶어서 요청하고, 서버에서 묶은 데이터를 풀어서 해석한 다음 프로시저(함수)를 수행하고, 반환 값을 다시 묶어서 클라이언트로 보낸다. 클라이언트는 최종 응답 값을 다시 역직렬화하여 최종 결과 값을 얻는다.
RPC는 네트워크를 통한 함수 호출을 마치 로컬 함수 호출처럼 보이도록 만든다. 이를 통해 개발자는 네트워크 코드에 신경 쓰지 않고도 분산 시스템을 쉽게 개발할 수 있다. RPC는 기본적으로 클라이언트가 응답을 받을 때까지 기다리는 동기 방식이지만, 요청 후 작업을 수행하면서 응답을 기다리는 비동기 호출을 지원하는 경우도 많다.

HTTP를 사용하는 프로토콜, JSON을 사용하는 프로토콜 등 RPC는 다양한 프로토콜을 지원한다.
RPC의 장점은 단순하고 효율적이며, 다양한 언어를 지원한다는 점에 있다.

소켓 프로그래밍 같은 네트워크 프로그래밍에 대한 지식이 없어도, 분산 시스템을 개발할 수 있도록 도와주는 역할을 해준다. 또 데이터를 직렬화하는 과정에서, 규칙적인 방법으로 압축하고 단순화하여 네트워크 트래픽을 최소화할 수 있고, C++, Java, Python 등 프로그래밍 언어에 상관없이 다양한 플랫폼에서 사용이 가능하다.

RPC의 단점은, 네트워크 의존성이 증가한다는 점인데, 네트워크가 불안정하면 호출이 실패할 경우가 있다. 또한 네트워크 문제 등이 발생했을 때, 원인 파악을 하기가 어렵고, 클라이언트에서 서버의 함수를 호출하는 방식이다 보니, 결합도가 증가하여 시스템 변경이 어려워질 수 있다는 점이 있다.

RPC는 분산 시스템이나 마이크로 서비스에서 많이 사용된다. 여러 서비스 간의 효율적인 통신을 이용할 때 활용할 수 있다. 마찬가지로, 클라이언트와 서버 애플리케이션 사이에 RPC를 활용해 원격 데이터베이스나 원격 서비스 호출에 활용된다.

분산 시스템에서 중요한 기술인 RPC는 네트워크를 투명하게 처리하여 개발자의 부담을 줄여주는 효과가 있다. 다양한 RPC 프레임워크가 존재하기 때문에 적당한 RPC 기술을 선택해 시스템 요구사항에 맞게 활용하면, 효율적인 분산 시스템 개발이 가능해질 것이다.
'IT 정보 > 용어' 카테고리의 다른 글
HTTP HTTPS는 뭘까? 웹의 기본 이해하기 (0) | 2025.04.09 |
---|---|
JSON이란? 비동기 통신의 필수 요소? (0) | 2025.04.08 |
마이크로 서비스란? 조각 서비스를 제공할 수 있다? (1) | 2025.04.05 |
쇼어 알고리즘이란? 양자 컴퓨팅을 사용한 혁신 알고리즘 (0) | 2025.04.04 |
스마트 미터링이란? 실시간 에너지 관리의 시작 (2) | 2025.04.02 |