안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
RPC (Remote Procedure Call) 란?
직역하면 "원격 프로시저 호출" 이다.
이름에서 알 수 있듯이 RPC는 다른 주소 공간에서 *함수나 *프로시저를 실행할 수 있게 하는 프로세스 간의 통신 기술이다.
* 함수란
- input에 따른 Output 발생을 목적으로 함
- Return 값 필수
* 프로시저란
- Output 값에 집중하기 보단 명령 단위가 수행하는 절차를 목적으로 함
정말 쉽게 예를 들어서 설명해보자면,
A 컴퓨터에서 '더하기' 기능을 실행하려고 하는데 해당 기능은 B 컴퓨터에 구현이 되어있다고 가정해보자.
- A 컴퓨터 → B 컴퓨터에게 "야 B 컴퓨터! '더하기' 기능을 실행해줘!" 라고 요청 (RPC를 통해)
- 해당 요청을 받은 B 컴퓨터는 '더하기' 기능 실행
- B 컴퓨터 → A 컴퓨터에게 "옛다. '더하기' 기능 결과 값이다" 라며 해당 함수 결과 값을 전송 (RPC를 통해)
위의 예제를 통해 알 수 있듯,
RPC를 이용하면 서로 다른 컴퓨터 혹은 운영체제에서 실행되는 프로그램들을 마치 로컬에서 실행하는 것처럼 사용할 수 있다.
RPC 사용 이유
1. 코드 재사용성
- 한 시스템에 공통으로 사용할 함수 등을 정의하여 여러 프로그램에서 재사용 가능
2. 여러 프로그래밍 언어 간 통신 가능
- 다양한 언어와 플랫폼을 연결해주므로 클라이언트와 서버가 다른 언어로 작성되었더라도 RPC를 통해 통신 가능
3. 로컬과 비슷한 개발 경험
- 네트워크나 통신의 복잡성을 배제하고 원격으로 작업을 수행하는 코드를 쉽게 작성 가능 (원격 서버에서 함수 호출하면 되므로)
4. 유연성과 확장성
- 새로운 서버가 추가되더라도 호출을 통해 쉽게 호출 가능
RPC 활용 분야
1. 분산 시스템
- 분산 시스템에선 여러 대의 컴퓨터에서 실행되는 프로그램 간의 통신이 필요하므로 RPC를 이용해 각 프로그램 간의 통신 처리 가능
2. 원격 프로시저 호출
3. 마이크로서비스 아키텍처
- 마이크로서비스 아키텍처에선 각각의 마이크로서비스가 독립적으로 실행되므로 각 마이크로서비스 간 통신 처리 가능
4. IoT
- 여러 대의 디바이스가 서로 연결되어 데이터를 주고 받는 환경
- 각 디바이스 간의 통신 처리 가능
5. 클라우드 컴퓨팅
- 여러 대의 서버가 분산되어 실행되는 클라우드 컴퓨팅
- 서버 간의 통신 처리 가능
이제 RPC에 대한 개념을 이해했다면, 동작 방식에 대해 알아보도록 하자.
동작 원리
RPC의 동작 방식 - IDL 사용 X
- Client가 일반적인 방식으로 파라미터를 넘겨
Client Stub Procedure
호출
(이 때, Clinet Sub는 클라이언트를 소유한 주소의 공간 내 거주) Client *Stub
에서 매개변수를 메세지로 *Marshalling 함Client Stub
은 Marshalling한 메세지를전송 계층 (transport layer - 원격 서버 머신으로 메세지를 보내는 계층)
으로 보냄Server 전송 계층
은 Clinent에서 받은 Marshalling 메세지를Server Stub
으로 보내줌Server Stub
은 매개변수를 *Unmarshalling 한 후 호출 메커니즘을 이용해 요구된 서버 루틴 호출- 서버 프로시저가 완료될 때, 서버 프로시저는
Server stub
으로 반환 Server Stub
은 결과 값들을 모아 메세지로 Marshalling 함Server 전송 계층
은 결과 메세지를Client 전송 계층
으로 보냄Client 전송 계층
은Server 전송 계층
으로부터 받은 결과를Client Stub
에 전달Client Stub
은 Unmarshalling 후 리턴 값을 호출자에게 반환
* Stub
- RPC에서 클라이언트와 서버 간의 통신을 추상화하고 단순화하는 데 사용되는 코드 조각
- 클라이언트, 서버 모두 존재
- 호출 및 반환 과정을 처리하는 역할
* Marshalling
- 데이터를 바이트로 쪼개서 TCP/IP 같은 통신 채널을 통해 전송될 수 있는 형태로 바꿔주는 과정
* Unmarshalling
- 전송받은 바이트를 원래의 형태로 복원하는 과정
RPC 동작방식 - IDL 사용
- *IDL을 사용하여 서버의 호출 규약 정의
- 함수명, 인자, 반환값에 대한 데이터 형이 저장된 IDL 파일을 rpcgen 컴파일러를 이용해 stub 코드 자동 생성
- Stub은 원시소스코드 (C코드 등)의 형태로 생성되므로 클라이언트 / 서버프로그램에 포함하여 빌드
- Client는 일반적인 방식으로 stub에 정의된 함수 호출
- Client Stub 코드는 데이터형을 *XDR 형식으로 변환하여 RPC 호출 실행
* 변환이유: 기본 데이터 타입에 대한 메모리 저장 방식이 CPU 아키텍쳐별로 다르며, 네트워크 전송과정에서 바이트 전송 순서 보장하기 위함 - Server Stub 코드는 수신된 함수 / 프로시저 호출에 대한 처리 후, 결과 값을 XDR 형식으로 변환하여 반환
- Client는 서버 결과 값을 반환 받음
* IDL (Interface Definition Language)
- 어느 한 언어에 국한되지 않은 언어 중립적인 방법으로 인터페이스 표현
- 같은 언어를 사용하지 않는 소프트웨어 컴포넌트 사이의 통신을 가능하게 함
- 다른 두 개의 시스템을 연결하는 다리 역할
* XDR (External Data Representation) 형식
- 컴퓨터 네트워크 프로토콜과 같은 용도로 사용되는 표준 데이터 직렬화 형식
- 다양한 종류의 컴퓨터 시스템 간에 데이터 전송 가능
다소 복잡해 보일 순 있겠지만 천천히 읽다보면 이해가 될 것이다.
RPC는 IDL를 기반으로 하냐 안하냐 두 가지로 나뉘게 되는데, IDL에 대해 알고 있다면 무슨 차이가 있는지 파악 가능할 것이다.
각 서비스들이 동일한 언어 및 환경이거나 여러 가지 처리 (네트워크 프로토콜, 데이터 직렬화 형식)를 직접 해야하는 경우, IDL를 사용하지 않아도 된다.
하지만 만일, 각 서비스들이 서로 다른 언어 및 환경인 경우에는 IDL를 사용해야한다.
동작 자체는 크게 다른 건 없지만, 환경이 다른 원격지와의 통신을 위해 거쳐야 하는 과정이 추가된다.
참고 사이트
https://change-words.tistory.com/entry/RPC
https://myyblog.tistory.com/entry/RPC%EB%9E%80
https://medium.com/@delivalue100/rpc-remote-procedure-call-82ec0b897ded
'CS' 카테고리의 다른 글
CS) gRPC란? (4) | 2024.11.15 |
---|