✅ RPC(Remote Procedure Call)란?
RPC는 “원격 프로시저 호출”이라고 하며, 마치 내 컴퓨터 안에서 함수(또는 메서드)를 호출하듯이, 네트워크에 연결된 다른 컴퓨터(서버)의 함수를 호출하는 방식이다.
✅ 왜 필요한가?
기본적으로 우리가 일반적인 프로그래밍을 할 때는, 같은 메모리 공간 안에서 함수나 메서드를 호출한다. 그런데 서버와 클라이언트가 분리된 시스템에서는, 서버의 기능을 클라이언트에서 사용하려면 네트워크 통신을 해야 한다. 이때 직접 소켓 통신을 구현하면 너무 복잡하고 번거롭기 때문에, 마치 함수를 부르듯 간단하게 서버의 기능을 호출할 수 있도록 만든 개념이 바로 RPC이다.
✅ 작동 방식
- 클라이언트가 함수를 호출한다.
- 이때, 이 함수는 실제로는 로컬에 없고 서버에 존재한다.
- RPC 시스템이 함수 호출을 감지하고 네트워크 메시지로 바꾼다.
- 이 과정을 직렬화(Serialization) 라고 한다.
- 함수 이름, 파라미터, 호출 정보 등을 네트워크 메시지로 포장한다.
- 서버가 메시지를 받아 해당 함수(또는 메서드)를 실행한다.
- 결과를 다시 클라이언트로 보낸다.
- 이 과정에서도 결과를 네트워크 메시지로 바꾸고 다시 역직렬화한다.
- 클라이언트는 결과를 반환값처럼 받아 사용한다.
- 마치 내 코드에서 함수를 실행하고 그 결과를 받은 것처럼 느껴진다
✅ 예시
# 클라이언트 코드
result = add(1, 2) # 마치 이 함수가 내 코드에 있는 것처럼 호출
# 실제로는 서버에 있는 add 함수가 호출되어 계산되고 결과가 돌아온다
위 코드는 평범한 함수 호출처럼 보이지만, 실제로는 서버에 있는 add 함수가 호출된 것이다. 이게 바로 RPC의 마법이다.
✅ 실제 사용 예
- gRPC (구글에서 만든 고성능 RPC 프레임워크)
- Java RMI (Java 기반 RPC)
- Python의 xmlrpc, jsonrpc 모듈
- 웹 개발에서 내부 시스템 간의 서비스 호출 (예: 마이크로서비스 아키텍처)
✅ 장점
- 간단함: 마치 로컬 함수를 부르듯 사용 가능
- 캡슐화: 통신 세부 사항을 숨기고 추상화함
- 재사용성: 서버의 기능을 여러 클라이언트에서 호출 가능
✅ 단점
- 복잡한 디버깅: 네트워크를 통해 함수가 호출되기 때문에 문제 원인 추적이 어려움
- 느린 응답: 로컬 함수 호출보다 네트워크 오버헤드가 있음
- 버전 문제: 서버 함수의 변경이 클라이언트에 영향을 줄 수 있음
교수님이 RPC를 설명하실 때 "결혼 중매 회사"처럼 동작한다고 하셨다.
내가 원하는 조건(함수 이름과 인자들)을 중매 회사(RPC 시스템)에 전달하면, RPC는 그에 맞는 상대방(서버의 함수)을 찾아서 연결해주고, 서버가 실행한 결과(예: 매칭 결과)를 다시 나에게 전달해준다.
'CS > Operating System' 카테고리의 다른 글
| [OS] 공유 자원과 임계 구역 (0) | 2025.04.24 |
|---|