RPC 개념과 작동 원리
KUKJIN LEE • 3주 전 작성
RPC(Remote Procedure Call)는 네트워크 상에서 원격 시스템의 프로시저(함수)를 로컬에서 호출하듯이 호출할 수 있는 기술입니다. 복잡한 분산 시스템을 간단하게 구현하기 위해 많은 개발자들이 사용됩니다.
RPC란 무엇인가?
RPC(Remote Procedure Call)는 로컬 함수를 호출하는 것처럼 간단하게 분산 환경에서 코드를 실행할 수 있도록 하는 기술입니다. 일반적으로 클라이언트와 서버 간 통신을 쉽게 구현하는 데 사용되며, 네트워크의 복잡성을 추상화하여 개발자가 함수 호출만으로 네트워크를 통한 작업을 수행할 수 있게 합니다.
RPC는 서버 측에 구현된 함수(프로시저)를 클라이언트가 호출하는 형태로 사용됩니다. 예를 들어, 데이터베이스 서버에 접근하여 데이터를 가져오거나, 다른 시스템에서 실행해야 할 특정 작업을 요청할 때 주로 사용됩니다.
RPC와 일반적인 API 호출의 차이점
-
개념적 접근: 일반적인 API 호출은 주로 리소스 중심의 CRUD 작업을 처리하는 방식입니다. 즉, 데이터를 생성(Create), 읽기(Read), 갱신(Update), 삭제(Delete)하는 작업에 초점을 맞춥니다. 반면, RPC는 서버의 특정 함수나 작업을 호출하는 데 중점을 둡니다. 클라이언트는 원격 서버의 특정 함수를 호출하고, 그 결과를 반환받는 방식으로, 마치 로컬 함수처럼 서버 측 기능을 호출하는 것입니다.
-
표현 방식: API 호출은 RESTful API와 같은 자원(URL) 기반의 접근을 사용하며, HTTP 메서드(GET, POST 등)를 통해 요청합니다. 반면에 RPC는 서버에서 제공하는 함수의 이름과 매개변수를 사용하여 호출하는 방식으로, 함수 호출에 대한 추상화가 더 명확하게 드러납니다.
RPC의 작동 원리
-
Client Stub: 클라이언트에서 호출된 함수는 먼저 클라이언트 스텁으로 전달됩니다. 스텁은 호출된 함수와 파라미터를 직렬화하여 네트워크를 통해 전달할 준비.
-
네트워크 전송: 클라이언트 스텁에서 직렬화된 데이터는 네트워크를 통해 서버로 전송.
-
Server Stub: 서버 측에서는 이 데이터를 수신하여 역직렬화하고, 요청된 함수를 호출.
-
결과 반환: 함수가 실행된 결과를 서버 스텁이 직렬화하여 네트워크를 통해 클라이언트로 반환.
-
클라이언트 처리: 클라이언트 스텁이 서버로부터 전달받은 결과를 역직렬화하고 클라이언트 프로그램에 전달.
-
Stub은 클라이언트 서버 간 통신을 도와주는 역할을 합니다.
-
직렬화는 네트워크 전송을 위해 이진 형식 또는 문자열 형식을 변환하는 과정입니다. (예를 들어, 객체를 JSON 문자열로 변환)
-
역직렬화는 데이터를 원래의 형태로 복원하는 과정입니다.
-
직렬화, 역직렬화가 필요한 이유는 효율적인 통신을 위함입니다.
RPC의 장점과 단점
장점
-
개발 편의성: RPC를 사용하면 네트워크 통신 부분을 추상화하여 코드의 복잡성을 줄일 수 있습니다. 개발자는 마치 로컬 함수를 호출하듯 원격 함수를 호출할 수 있습니다.
-
일관된 인터페이스: 함수 호출 방식이 일관되어 클라이언트와 서버 간의 통신이 쉽게 이루어집니다.
단점
-
네트워크 의존성: 네트워크 상태에 따라 호출이 지연되거나 실패할 수 있습니다. 네트워크 문제를 고려하여 에러 처리 로직을 추가해야 합니다.
-
플랫폼 종속성: 일부 RPC 구현은 특정 플랫폼이나 언어에 종속적일 수 있습니다. 이를 해결하기 위해 gRPC와 같은 크로스 플랫폼 프레임워크가 많이 사용됩니다.