(TIL) 2025-01-22
(TIL) 2025-01-22
원격 프로시저 호출 (RPC, Remote Procedure Call)
네트워크를 통해 분산된 시스템에서 다른 컴퓨터나 서버에서 실행 중인 프로시저(함수)를 호출하는 방법을 의미한다. 즉, 클라이언트가 로컬에서 프로시저를 호출하듯이, 원격 서버에서 실행 중인 프로시저를 호출할 수 있는 기술이다.
RPC는 분산 시스템에서 서버와 클라이언트 간의 통신 프로토콜로서, 여러 컴퓨터가 서로 다른 위치에서 실행되고 있을 때 서버와 클라이언트가 효율적으로 서로의 기능을 호출할 수 있게 해준다.
1.RPC의 기본 개념
RPC는 로컬 함수 호출처럼 동작하지만, 호출 대상이 원격 서버에 있다. 클라이언트는 마치 로컬 함수처럼 원격 함수를 호출하지만, 실제 함수는 원격 서버에서 실행된다.
- 클라이언트: 원격 서버에서 실행되는 프로시저를 호출하는 쪽.
- 서버: 클라이언트의 요청을 받아 원격에서 실행되는 프로시저를 처리하는 쪽.
- 통신 채널: 클라이언트와 서버 간의 데이터를 주고받는 네트워크 채널.
- 스텁 (Stub): 클라이언트와 서버에서 각각 사용하는 코드로, 원격 호출을 로컬 호출처럼 처리할 수 있도록 도와준다.
2. RPC 동작 방식
- 클라이언트 측에서 프로시저 호출
- 클라이언트가 원격 프로시저를 호출할 때, 실제로는 해당 함수에 대한 “스텁”을 호출한다.
- 스텁은 클라이언트 측에서 서버 측의 프로시저 호출을 가짜로 만들어 호출할 수 있도록 한다.
- 스텁의 역할
- 클라이언트 스텁: 클라이언트에서 호출된 함수 호출을 네트워크를 통해 서버로 전달합니다. 스텁은 호출되는 함수의 이름, 인수 등을 직렬화하여 네트워크로 전송한다.
- 서버 스텁: 서버에서 클라이언트의 요청을 받아, 네트워크에서 받은 데이터를 역직렬화하여 실제 함수 호출을 처리한다.
- 서버에서 함수 실행
- 서버 측에서 받은 데이터를 바탕으로 실제 함수가 실행되고, 실행 결과를 다시 클라이언트로 전달한다.
- 결과 반환:
- 서버에서 실행된 함수의 결과를 클라이언트에 반환하며, 이 역시 직렬화된 형태로 네트워크를 통해 전송된다.
- 클라이언트는 서버로부터 받은 응답을 역직렬화하여 로컬 변수로 처리한다.
3. RPC의 구성 요소
- 클라이언트와 서버: 클라이언트는 요청을 보내고 서버는 요청을 처리한다.
- 스텁 (Stub): 클라이언트와 서버에서 각각 존재하는 가짜 함수로, 네트워크를 통해 실제 원격 프로시저 호출을 처리하는 데 필요한 데이터를 직렬화하고 역직렬화하는 역할을 한다.
- 통신 프로토콜: 클라이언트와 서버 간에 데이터를 주고받기 위한 프로토콜입니다. HTTP, gRPC, SOAP 등이 사용될 수 있다.
- 직렬화 (Serialization): 클라이언트가 요청하는 데이터를 바이트 스트림으로 변환하여 네트워크를 통해 전송하고, 서버는 이를 다시 역직렬화하여 사용한다.
4. RPC의 장점
- 투명성: 클라이언트는 로컬 함수 호출처럼 원격 서버에 있는 함수나 메서드를 호출할 수 있기 때문에, 호출 방식이 투명하다. 즉, 원격 서버에 있는지 로컬에 있는지 신경 쓸 필요가 없다.
- 분산 시스템 개발 용이: 여러 컴퓨터 시스템 간의 연동을 쉽게 할 수 있습니다. 클라이언트와 서버가 분리된 환경에서도 서로 기능을 호출하고 데이터를 교환할 수 있다.
- 네트워크 기반의 함수 호출: 네트워크를 통해서도 원격 함수 호출이 가능하여, 분산된 환경에서 여러 시스템 간의 상호작용을 지원한다.
5. RPC의 단점
- 성능 이슈: 네트워크를 통한 호출이기 때문에, 로컬 함수 호출에 비해 성능이 떨어질 수 있다. 데이터 직렬화 및 역직렬화, 네트워크 지연 등으로 인해 성능이 저하될 수 있다.
- 에러 처리 복잡성: 네트워크 오류나 서버의 가용성 문제 등 다양한 이슈가 발생할 수 있다. 따라서 에러 처리 및 예외 관리가 복잡할 수 있다.
- 디버깅 어려움: 원격 시스템에서 발생한 문제는 클라이언트에서 직접 확인하기 어려운 경우가 많아 디버깅이 복잡할 수 있다.
원격 프로시저 호출(RPC)은 분산 시스템에서 네트워크를 통해 다른 서버나 컴퓨터에서 실행되는 프로시저를 호출하는 메커니즘이다. 이를 통해 서버와 클라이언트 간에 서로 다른 물리적 위치에서 로컬 함수처럼 원격 함수를 호출할 수 있다. RPC는 네트워크 기반의 분산 시스템을 구축하는 데 매우 유용하며, gRPC, SOAP, XML-RPC 등 다양한 기술로 구현될 수 있다.
This post is licensed under CC BY 4.0 by the author.