RPC란?
Remote Procedure Call의 약자로, 원격에 있는 함수를 호출해주는 기능을 말합니다.
별도의 원격제어를 위한 코딩 없이 다른 주소 공간에서 리모트의 함수나 프로시저를 실행 할 수 있게 해주는 프로세스간 통신입니다.
RPC는 일반적으로 , request parameter와 response parameter를 알아야하기 때문에, 양쪽의 인터페이스 규약을 IDL 등의 언어로 정의한 후, 해당 프로그래밍 언어가 부를 수 있는 형태의 코드로 생성을 해줘야하는데, 이를 Skeleton과 Stub코드라고 합니다.
분산 컴퓨팅 환경에서 많이 사용되어 왔으며 현재에는 MSA(Micro Service Architecture)에서 마이크로 서비스간에도 많이 사용되는 방식입니다. 서로 다른 환경에서도 서비스간의 프로시저 호출을 가능하게 해줌에 따라 언어에 구애받지 않고 환경에 대한 확장이 가능하며, 좀더 비즈니스 로직에 집중하여 생산성을 증가시킬 수 있습니다.
- 동작 과정
- 우선 IDL(Interface Definition Language)를 통해 호출에 대한 인터페이스를 정의합니다.(프로토콜은 서버와 클라이언트가 정보를 주고 받는 규칙이고, IDL이란 정보를 저장하는 규칙입니다.)
- IDL에 의해 정의된 인터페이스는 client의 stub과 server의 skeleton 생성의 기반이 되며, rcpgen(유틸리티)를 통해 각각의 stub과 skeleton을 생성합니다.
- client는 리모트의 프로시저를 사용하기 위해 설계된 스텁의 프로시저를 호출하고, 프로시저 호출에 필요한 인자와 비즈니스 로직에 필요한 메소드를 호출합니다. 클라이언트는 RPC호출시 XDR 형식으로 변환하여 호출합니다.
- stub은 서버가 이해할 수 있는 형태로 데이터의 캐스팅 진행하고, 서버 측 RPC로 호출을 진행합니다.
- 서버는 수신된 호출에 대한 데이터를 처리합니다. 이 때 역시 서버는 결과값을 XDR 변환하여 반환합니다.
- 서버츨 RPC 프로토콜은 처리된 데이터를 캐스팅하여 client로 응답합니다.
- 목표
- 클라이언트 - 서버 간의 커뮤니케이션에 필요한 상세정보는 최대한 감춥니다.
- 클라이언트는 일반 메소드를 호출하는 것처럼 원격지의 프로시져를 호출할 수 있습니다.
- 서버도 마찬가지로 일반 메소드를 다루는 것처럼 원격 메소드를 다룰 수 있습니다.
RPC의 장점
1. 고유 프로세스 개발에 집중이 가능합니다.
2. 프로세스 간의 통신 기능을 비교적 쉽게 구현하고 정교한 제어가 가능합니다.
RPC의 단점
1. 호출 실행과 반환 시간이 보장되지 않습니다.(네트워크 구간을 통하여 RPC 통신을 하는 경우, 네트워크가 끊겼을 때 치명적 문제 발생)
2. 보안이 보장되지 않습니다.
gRPC란?
구글에서 만든 RPC 플랫폼이며 protocol buffer와 RPC를 사용합니다. gRPC를 사용하면 원격에 있는 어플리케이션의 메서드를 로컬 메서드인 것처럼 직접 호출할 수 있기 때문에 분산 어플리케이션과 서비스를 보다 쉽게 만들 수 있습니다.
IDL에는 3가지 존재하는데
XML, JSON, Protocol buffers가 있습니다. gRPC는 이 중 Protocol buffers를 사용합니다.
Protocol buffer란 직렬화 데이터 구조입니다. 어떤 언어나 플랫폼에서도 통신 프로토콜이나 데이터 저장을 사용할 때, 구조화된 데이터를 전환하게 해주는 방법입니다.(XML이나 JSON도 직렬과 데이터 구조입니다.)
gRPC특징
1. 높은 생산성과 다양한 언어 및 플랫폼 지원
gRPC는 서비스와 메시지를 정의하기 위해 Protocol Buffers를 사용합니다. Protocol buffer의 ID만 정의하면 서비스와 메세지에 대한 소스코드가 자동으로 생성되고 데이터를 주고받을 수 있습니다.
2. HTTP/2 기반의 양방향 스트리밍
gRPC는 HTTP/2 기반으로 통신합니다. HTTP/2는 하나의 TCP 연결이 여러 개의 양방향 스트리밍을 지원합니다.
3. 성능 이점
gRPC는 HTTP/2 레이어 위에서 Protocol buffers 를 사용해 직렬화된 바이트 스트림으로 통신하여 JSON 기반의 통신보다 더 가볍고 통신 속도가 빠릅니다. 때문에 laytency 감소와 더 많은 트래픽을 처리할 수 있는 성능의 이점이 있습니다.
'CS > 네트워크' 카테고리의 다른 글
[네트워크] 도메인주소와 EC2서버가 연결되는 과정 (0) | 2022.04.11 |
---|