RPC (Remote Procedure Call)¶
RPC(원격 프로시저 호출)는 별도의 원격 제어를 위한 복잡한 코딩 없이, 다른 주소 공간(일반적으로 다른 네트워크 상의 서버)에서 함수나 프로시저를 실행할 수 있게 하는 프로세스 간 통신(IPC) 기술입니다.
마치 로컬 함수를 호출하는 것처럼 원격 서버의 함수를 호출할 수 있게 해주는 것이 핵심입니다.
1. 동작 원리¶
사용자(Client)가 함수를 호출하면, RPC 프레임워크가 내부적으로 네트워크 통신을 처리하여 서버에 전달하고 결과를 받아옵니다.
- Client Stub: 클라이언트 측에서 함수 호출을 가로채서 매개변수를 네트워크로 보낼 수 있는 형태(Marshalling)로 변환합니다.
- RPC Runtime: 변환된 데이터를 네트워크를 통해 서버로 전송합니다.
- Server Stub: 서버 측에서 받은 데이터를 다시 원래의 매개변수 형태로 변환(Unmarshalling)하고 실제 서버 함수를 호출합니다.
- Result: 실행 결과는 역순으로 클라이언트에게 전달됩니다.
2. 주요 개념¶
- Marshalling (마샬링): 데이터를 전송하기 위해 적절한 형태(예: JSON, Protocol Buffers, XML 등)로 직렬화하는 과정입니다.
- IDL (Interface Definition Language): 서버와 클라이언트가 서로 어떤 인터페이스를 가지고 있는지 정의하는 언어입니다. (예: gRPC의
.proto파일)
3. 장단점¶
장점¶
- 개발 생산성: 네트워크 통신의 세부 사항을 몰라도 원격 서비스를 쉽게 이용할 수 있습니다.
- 추상화: 비즈니스 로직에 집중할 수 있도록 통신 계층을 캡슐화합니다.
단점¶
- 네트워크 의존성: 로컬 호출보다 속도가 느리고, 네트워크 장애 시 예외 처리가 중요합니다.
- 강한 결합: IDL을 통해 클라이언트와 서버가 연결되므로 인터페이스 변경 시 양쪽 모두 갱신이 필요할 수 있습니다.
4. 현대의 RPC 사례¶
- gRPC: Google에서 개발한 고성능 RPC 프레임워크 (HTTP/2, Protocol Buffers 기반)
- Apache Thrift: Facebook에서 개발한 가변적 다언어 서비스 개발 프레임워크
- JSON-RPC / XML-RPC: 경량 RPC 프로토콜