-
RPC(Remote Procedure Call)Backend 2024. 12. 7. 18:27
RPC(Remote Procedure Call)는 네트워크를 통해 분산 시스템에서 서로 다른 컴퓨터 간의 프로시저(함수)를 호출할 수 있도록 하는 통신 메커니즘이다. RPC는 로컬 함수 호출처럼 보이지만, 실제로는 원격 서버에서 실행되는 프로세스다. 이를 통해 부산 시스템 간의 통신을 쉽게 구현할 수 있다. 이를 통해 개발자는 네트워크 통신의 복잡성을 신경 쓰지 않고도 원격 서버의 기능을 사용할 수 있다.
주요 특징
- 투명성: 개발자는 원격 함수 호출을 로컬 함수 호출처럼 수행할 수 있으며, 네트워크 통신의 복잡성을 숨겨준다.
- 언어 및 플랫폼 독립성: RPC 는 다양한 언어와 플랫폼 간의 통신을 지원하여 이기종 시스템 간의 상호 운용성을 높인다.
- 계층 구조: 클라이언트와 서버는 서로 계층적으로 구성되며, 클라이언트와 서버가 명확히 구분된다.
구성 요소
- 클라이언트(Client): 원격 프로시저를 호출하는 주체
- 클라이언트 스텁(Client Stub): 클라이언트 측에서 원격 프로시저 호출을 대리하며, 매개변수를 직렬화하고 서버로 전송하는 역할을 한다.
- 서버 스텁(Server Stub): 서버 측에서 클라이언트로부터 수신한 데이터를 역직렬화하고 실제 프로시저를 호출하며, 결과를 다시 직렬화하여 클라이언트로 전송한다.
- RPC 런타임(RPC Runtime): 클라이언트와 서버 간의 통신을 관리하며, 메시지의 전송, 재전송, 라우팅 등을 처리한다.
동작과정
- 클라이언트 호출: 클라이언트는 원격 프로시저를 호출하듯이 클라이언트 스텁을 호출한다.
- 마샬링(Marshalling): 클라이언트 스텁은 전달받은 매개변수를 네트워크를 통해 전달할 수 있도록 직렬화한다.
- 메시지 전송: 직렬화된 데이터는 네트워크를 통해 서버로 전송된다.
- 언마샬링(Unmarshalling): 서버 스텁은 수신한 데이터를 역직렬화 하여 원래의 매개변수 형태로 복원한다.
- 서버 프로시저 실행: 서버 스텁은 실제 프로시저를 호출하여 작업을 수행한다.
- 결과 반환: 서버 프로시저의 결과를 클라이언트로 전송하기 위해 다시 직렬화하고, 클라이언트는 이를 수신하여 역직렬화 후 최종 결과를 획득한다.
이러한 구성 요소와 동작 과정을 통해 RPC는 분산 시스템에서의 통신을 효율적으로 처리하며, 개발자는 네트워크 통신의 복잡성을 신경 쓰지 않고 원격 함수를 호출할 수 있다.
RPC와 HTTP API 의 차이
- RPC(Remote Procedure Call)
- 개념: 클라이언트가 원격 서버의 함수를 로컬 함수처럼 호출하여 실행 결과를 얻는 방식
- 통신 방식: 일반적으로 TCP/IP를 통해 통신하며, 데이터 직렬화 형식에 따라 성능이 달라진다. 전통적인 RPC 시스템에서는 텍스트 기반의 직렬화 방식을 사용할 수 있어 데이터 크기가 커지고, 이로 인해 전송 속도가 느려질 수 있다.
- 데이터 형식: 이진 데이터 형식을 사용하여 효율적인 통신을 지원함
- HTTP API
- 개념: HTTP 프로토콜을 기반으로 클라이언트와 서버가 요청과 응답을 주고받는 방식
- 통신 방식: HTTP/1.1 또는 HTTP/2 를 사용하며, RESTful API 가 일반적이다.
- 데이터 형식: JSON 이나 XML 과 같은 텍스트 기반의 데이터를 주로 사용
전통적인 RPC 시스템에서는 직렬화 방식과 통신 프로토콜에 따라 HTTP API보다 성능이 떨어질 수 있다. gRPC와 같은 현대적인 RPC 프레임워크는 효율적인 이진 직렬화와 HTTP/2의 장점을 활용하여 높은 성능을 제공한다. 그러나, 웹 기반의 공개 API나 브라우저와의 호환성이 중요한 경우에는 여전히 RESTful API가 널리 사용되고 있다. 따라서, 시스템의 요구사항과 환경에 따라 적합한 통신 방식을 선택하는 것이 중요하다.
함께 보기 좋은 글
https://5linesys.tistory.com/34
'Backend' 카테고리의 다른 글
gRPC (1) 2024.12.09 분산 락(Distributed lock) (0) 2024.11.17