본문 바로가기

grpc

[grpc] 1. grpc의 기반기술 - RPC

[grpc] 1. grpc의 기반기술 - RPC

목차

1. https://dlwnsdud205.tistory.com/326 [grpc] 1. grpc의 기반기술 - RPC

2. https://dlwnsdud205.tistory.com/327 [grpc] 2. grpc의 기반기술 - HTTP/2.0 

3. https://dlwnsdud205.tistory.com/328 [grpc] 3. grpc의 기반기술 - Protocol Buffers와 성능 테스트 

4. https://dlwnsdud205.tistory.com/329 [grpc] 4. grpc - Java

 

grpc를 공부하기위해선 우선 grpc의 몇가지 기반 기술들을 알아야한다. 이번 포스팅에서 알아볼 것은 RPC이다.


1. RPC가 무엇인가?

RPC (Remote procedure call) 는 원격 서버의 프로시저를 local 프로시저 처럼 호출하는 프로토콜로 이때, 다른 서버의 네트워크정보를 상세히 알 필요 없이 호출이 가능하다. 

* 이 글을 읽는데 크게 문제는 없지만, 프로시저와 함수의 차이를 읽고 넘어가자. 

* 함수는 프로세스를 수행하기 위한 작업이다. 즉 함수가 모여 하나의 프로세스를 수행한다.

* 프로시저는 프로세스의 명세이다. 함수가 모여 프로시저를 구성한다.

* 또한, 설계영역에서 함수는 반환값을 갖고있으며 내부의 상태를 변경하지 않는다. 반면 프로시저는 반환값이 없으며 내부의 상태를 변경하* 는 특징이 있다.


2. RPC의 동작과정

RPC는 IDL을 명세하는것으로 시작할수있다.

IDL(Interface Defination Lagunage) 이란 '인터페이스 정의 언어'로 '서버끼리의 통신 규약'이다. 이 IDL은 한 언어에 국한되지 않은 언어이며, IDL에 명시된 인터페이스를 통해 서버끼리의 통신이 일어난다.

IDL 컴파일러는 IDL에 명시된 인터페이스를 읽고 이를 각 언어(Java, C++, js...)에 맞는 Stub으로 만들어준다.

Stub은 RPC통신에서 각 서버의 창구역할을 하는 개념으로 request server가 remote server의 프로시저를 호출시 request server의 stub이 프로시저 호출을 받고 remote server의 stub(프로시저 호출을 받는 쪽 stub을 skeleton 이라고 부르기도 한다.)에 메시지를 전달한다. remote server는 받은 메시지를 타겟 프로시저로 전달하고, 결과를 응답한다.(응답과정은 호출과정의 역순으로 동일하다) 

 

RPC의 동작 아키텍쳐를 그려보면 아래와 같다.

devxb

RPC의 전체적인 흐름을 이해했다면 이제, RPC통신과정을 목차를 따라 알아보자.

 

1. Client Server가 remote procedure를 호출한다.

2. Client Server측의 Stub이 remote procedure요청을 packing하고 메시지를 보내기위해 System call을 한다. 이 메시지 packing 과정을 'marshalling' 이라고 부른다.

3. Client와 서버가 3-way-handshaking을 하고 동적 포트를 통해 RPC연결을 맺는다.

4. Client의 OS가 Client의 machine에서 원격서버의 machine으로 메시지를 전송한다.

5. remote server의 OS는 들어오는 패킷을 remote 서버측의 Stub으로 전달한다.

6. remote server측의 stub은 받은 메시지를 unpacking한다. 이 과정을 'unmarshalling'이라고 한다.

7. remote server의 procedure가 끝나면, server stub을 호출하고, 호출받은 server stub은 변환결과를 marshalling한다.

8. remote server에서 client server로 stub을 전송하고 client stub은 결과를 unmarshalling한 후, 요청함수에 전달함으로 과정이 마무리 된다.

이런 RPC는 정해진 구현 규약이 없고 많은 구현체가 있는데 앞으로 알아볼 grpc가 그 중 하나이다.

(참고로 grpc는 HTTP/2기반으로 동작한다.)

grpc말고 json-rpc등등 여러가지가 있는데, 프레임워크마다 많은 차이가 있는거 같으니 grpc가 아닌 다른 구현체가 궁금한 사람들은 따로 알아보는것도 좋을것같다.


RPC의 장. 단점

RPC의 이점

1. Client가 자신의 고유한 방식으로 Server와 통신할 수 있도록 도와준다. 즉, 네트워크 호출하듯이 아닌 local procedure를 호출하듯이 동작하도록 할 수 있다.

2. message가 전달되는 과정과 packing되는 과정을 유저에게 숨긴다.

3. 성능 향상을 위해 많은 프로토콜 계층을 생략한다. 참고로 RPC는 OSI 7계층중에 Session layer에 속해있는데, 이는 전송계층(TCP, UDP)바로 다음에 속한 계층이다. 어쨌든 이 프로토콜 계층 생략이 성능향상에 많은 도움을 준다고 한다.

위 와 같은 특성들 때문에 distributed system (MSA와 같은)에서 효율적이며 자주 사용된다.

 

RPC의 단점

1. Client와 Server는 서로 다른 자원을 가지고 통신한다. 일반적으로 다른서버의 리소스 사용은 local 리소스를 사용하는것 보다 더 복잡하며 결과적으로 RPC는 많은 양의 데이터를 전송하는데 적합하지 않다.

2. RPC호출은 synchronous가 발생하는것을 명심해야 한다. Client 서버의 요청 스레드는 remote 서버와 RPC 통신을 할때, remote서버에게 요청이 돌아올때까지 작업을 멈추게 된다. 물론 구현에따라 asynchronous하게 동작하도록 만들 수 있지만, remote server와 client server의 동기,비동기 구현 협약을 충분히 해야 에러 상황을 피할 수 있다.

3. OSI 7계층중 session layer에 속하며 이는 ssl이 속한 presentation layer보다 하위 계층이다. 이 말은 보안이 보장되지 않는다는것을 의미한다.


참고 문서:

https://www.techtarget.com/searchapparchitecture/tip/The-architectural-impact-of-RPC-in-distributed-systems

 

The architectural impact of RPC in distributed systems

A look at the role of remote procedure call (RPC), including the specific challenges of implementing RPC in distributed systems.

www.techtarget.com

https://www.techtarget.com/searchapparchitecture/definition/Remote-Procedure-Call-RPC

 

What Is Remote Procedure Call (RPC)? Definition from SearchAppArchitecture

Read the definition for Remote Procedure Call (RPC), a client-server communication protocol where clients call remote systems as if they were local.

www.techtarget.com

https://docs.microsoft.com/ko-kr/windows/client-management/troubleshoot-tcpip-rpc-errors

 

RPC(원격 프로시저 호출) 오류 문제 해결 - Windows Client Management

WMI(Windows Management Instrumentation), SQL Server 또는 원격 연결 중에 RPC(원격 프로시저 호출) 오류를 해결하는 방법을 알아봅니다.

docs.microsoft.com