본문 바로가기
CS

CS) RPC란?

by 박채니 2024. 11. 15.
SMALL

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.

 

RPC (Remote Procedure Call) 란?

직역하면 "원격 프로시저 호출" 이다.

이름에서 알 수 있듯이 RPC는 다른 주소 공간에서 *함수나 *프로시저를 실행할 수 있게 하는 프로세스 간의 통신 기술이다.

 

* 함수란

- input에 따른 Output 발생을 목적으로 함

- Return 값 필수

 

* 프로시저란

- Output 값에 집중하기 보단 명령 단위가 수행하는 절차를 목적으로 함

 

 

정말 쉽게 예를 들어서 설명해보자면,

A 컴퓨터에서 '더하기' 기능을 실행하려고 하는데 해당 기능은 B 컴퓨터에 구현이 되어있다고 가정해보자.

  1. A 컴퓨터 → B 컴퓨터에게 "야 B 컴퓨터! '더하기' 기능을 실행해줘!" 라고 요청 (RPC를 통해)
  2. 해당 요청을 받은 B 컴퓨터는 '더하기' 기능 실행
  3. B 컴퓨터 → A 컴퓨터에게 "옛다. '더하기' 기능 결과 값이다" 라며 해당 함수 결과 값을 전송 (RPC를 통해)

위의 예제를 통해 알 수 있듯,

RPC를 이용하면 서로 다른 컴퓨터 혹은 운영체제에서 실행되는 프로그램들을 마치 로컬에서 실행하는 것처럼 사용할 수 있다.

출처=educative.io

RPC 사용 이유

1. 코드 재사용성

- 한 시스템에 공통으로 사용할 함수 등을 정의하여 여러 프로그램에서 재사용 가능

 

2. 여러 프로그래밍 언어 간 통신 가능

- 다양한 언어와 플랫폼을 연결해주므로 클라이언트와 서버가 다른 언어로 작성되었더라도 RPC를 통해 통신 가능

 

3. 로컬과 비슷한 개발 경험

- 네트워크나 통신의 복잡성을 배제하고 원격으로 작업을 수행하는 코드를 쉽게 작성 가능 (원격 서버에서 함수 호출하면 되므로)

 

4. 유연성과 확장성

- 새로운 서버가 추가되더라도 호출을 통해 쉽게 호출 가능

RPC 활용 분야

1. 분산 시스템

- 분산 시스템에선 여러 대의 컴퓨터에서 실행되는 프로그램 간의 통신이 필요하므로 RPC를 이용해 각 프로그램 간의 통신 처리 가능

 

2. 원격 프로시저 호출

 

3. 마이크로서비스 아키텍처

- 마이크로서비스 아키텍처에선 각각의 마이크로서비스가 독립적으로 실행되므로 각 마이크로서비스 간 통신 처리 가능

 

4. IoT

- 여러 대의 디바이스가 서로 연결되어 데이터를 주고 받는 환경

- 각 디바이스 간의 통신 처리 가능

 

5. 클라우드 컴퓨팅

- 여러 대의 서버가 분산되어 실행되는 클라우드 컴퓨팅

- 서버 간의 통신 처리 가능

 

 

이제 RPC에 대한 개념을 이해했다면, 동작 방식에 대해 알아보도록 하자.

동작 원리

RPC의 동작 방식 - IDL 사용 X

  1. Client가 일반적인 방식으로 파라미터를 넘겨 Client Stub Procedure 호출
    (이 때, Clinet Sub는 클라이언트를 소유한 주소의 공간 내 거주)
  2. Client *Stub에서 매개변수를 메세지로 *Marshalling
  3. Client Stub은 Marshalling한 메세지를 전송 계층 (transport layer - 원격 서버 머신으로 메세지를 보내는 계층) 으로 보냄
  4. Server 전송 계층은 Clinent에서 받은 Marshalling 메세지를 Server Stub으로 보내줌
  5. Server Stub은 매개변수를 *Unmarshalling 한 후 호출 메커니즘을 이용해 요구된 서버 루틴 호출
  6. 서버 프로시저가 완료될 때, 서버 프로시저는 Server stub으로 반환
  7. Server Stub은 결과 값들을 모아 메세지로 Marshalling 함
  8. Server 전송 계층은 결과 메세지를 Client 전송 계층으로 보냄
  9. Client 전송 계층Server 전송 계층으로부터 받은 결과를 Client Stub에 전달
  10. Client Stub은 Unmarshalling 후 리턴 값을 호출자에게 반환

 

* Stub

- RPC에서 클라이언트와 서버 간의 통신을 추상화하고 단순화하는 데 사용되는 코드 조각

- 클라이언트, 서버 모두 존재

- 호출 및 반환 과정을 처리하는 역할

 

* Marshalling

- 데이터를 바이트로 쪼개서 TCP/IP 같은 통신 채널을 통해 전송될 수 있는 형태로 바꿔주는 과정

 

* Unmarshalling

- 전송받은 바이트를 원래의 형태로 복원하는 과정

 

RPC 동작방식 - IDL 사용

  1. *IDL을 사용하여 서버의 호출 규약 정의
    1. 함수명, 인자, 반환값에 대한 데이터 형이 저장된 IDL 파일을 rpcgen 컴파일러를 이용해 stub 코드 자동 생성
  2. Stub은 원시소스코드 (C코드 등)의 형태로 생성되므로 클라이언트 / 서버프로그램에 포함하여 빌드
  3. Client는 일반적인 방식으로 stub에 정의된 함수 호출
  4. Client Stub 코드는 데이터형을 *XDR 형식으로 변환하여 RPC 호출 실행
    * 변환이유: 기본 데이터 타입에 대한 메모리 저장 방식이 CPU 아키텍쳐별로 다르며, 네트워크 전송과정에서 바이트 전송 순서 보장하기 위함
  5. Server Stub 코드는 수신된 함수 / 프로시저 호출에 대한 처리 후, 결과 값을 XDR 형식으로 변환하여 반환
  6. Client는 서버 결과 값을 반환 받음

* IDL (Interface Definition Language)

- 어느 한 언어에 국한되지 않은 언어 중립적인 방법으로 인터페이스 표현

- 같은 언어를 사용하지 않는 소프트웨어 컴포넌트 사이의 통신을 가능하게 함

- 다른 두 개의 시스템을 연결하는 다리 역할

 

* XDR (External Data Representation) 형식

- 컴퓨터 네트워크 프로토콜과 같은 용도로 사용되는 표준 데이터 직렬화 형식

- 다양한 종류의 컴퓨터 시스템 간에 데이터 전송 가능

 

 

다소 복잡해 보일 순 있겠지만 천천히 읽다보면 이해가 될 것이다.

RPC는 IDL를 기반으로 하냐 안하냐 두 가지로 나뉘게 되는데, IDL에 대해 알고 있다면 무슨 차이가 있는지 파악 가능할 것이다.

 

각 서비스들이 동일한 언어 및 환경이거나 여러 가지 처리 (네트워크 프로토콜, 데이터 직렬화 형식)를 직접 해야하는 경우, IDL를 사용하지 않아도 된다.

하지만 만일, 각 서비스들이 서로 다른 언어 및 환경인 경우에는 IDL를 사용해야한다.

 

동작 자체는 크게 다른 건 없지만, 환경이 다른 원격지와의 통신을 위해 거쳐야 하는 과정이 추가된다.

 

 

 

참고 사이트

https://change-words.tistory.com/entry/RPC

 

RPC(Remote Procedure Call) 통신이란?

RPC란? RPC(Remote Procedure Call, 원격 프로시저 호출)는 다른 네트워크에 위치한 컴퓨터에서 실행되는 프로시저나 함수를 로컬 컴퓨터에서 실행하는 것처럼 사용할 수 있게 하는 통신 방식입니다. 쉽

change-words.tistory.com

https://myyblog.tistory.com/entry/RPC%EB%9E%80

 

RPC란?

RPC란? RPC(Remote Procedure Call)는 분산 시스템에서 프로세스 간 통신을 위한 프로토콜이다. RPC는 클라이언트와 서버 사이에서 원격으로 함수나 프로시저를 호출하는 방법을 제공한다. 클라이언트는

myyblog.tistory.com

https://velog.io/@mochafreddo/%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%89%AC%EC%9A%B4-RPC%EC%99%80-Stub-%EC%84%A4%EB%AA%85

 

이해하기 쉬운 RPC와 Stub 설명

원격 프로시저 호출(RPC)과 Stub에 대해 이해하기 쉽게 설명합니다. 클라이언트와 서버 간 통신을 추상화하는 Stub의 역할 및 원리를 예시와 함께 알아보세요.

velog.io

https://medium.com/@delivalue100/rpc-remote-procedure-call-82ec0b897ded

 

RPC (Remote Procedure Call)

RPC가 뭐에요?

medium.com

 

LIST

'CS' 카테고리의 다른 글

CS) gRPC란?  (4) 2024.11.15