일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- docker
- #스웨거
- 모두의캠퍼스
- Redux
- 프로세스
- 쿠버네티스 컨트롤러
- React.js
- 쿠버네티스
- #Swagger
- IP
- Site Reliability engineering
- #Swagger-editor
- server
- 카카오게임즈
- #Swagger-codegen
- 기술PM
- 북딜
- SRE
- action
- javascript
- AWS
- #api 문서화
- #Swagger-ui
- fluentd
- React
- ecs
- 모캠
- Reducer
- Kubernetes
- 프로세스 통신
- Today
- Total
탕구리's 블로그
RPC(Remote Procedure call)에 대해 알아보자! 본문
RPC란 무엇일까?
RPC(Remote Procedure call)이란, 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 리모트의 함수나 프로시저를 실행 할 수 있게 해주는 프로세스간 통신입니다. 즉, 위치에 상관없이 RPC를 통해 개발자는 위치에 상관없이 원하는 함수를 사용할 수 있습니다.
운영체제를 공부하다 보며 프로세스간 통신을 위해 IPC(inter-Process Communication)을 이용하는 내용을 볼 수 있는데요, RPC는 IPC 방법의 한 종류로 원격지의 프로세스에 접근하여 프로시저 또는 함수를 호출하여 사용하는 방법을 말합니다.
기존에는 프로세스간 통신을 위해 소켓통신, RPC 같은 방식이나 RPC를 활용한 CORBA, RMI 같은 방식을 많이 사용했다면 현재는 웹기술의 발달로 인한 SOAP, REST 등과 같은 방식들이 대세를 이루고 있다고 합니다. 2015년 구글에서는 RPC와 웹기술을 혼합한 gRPC를 처음 발표하기도 했고 많은 사람들의 관심을 받기도 했었죠
RPC 모델은 분산컴퓨팅 환경에서 많이 사용되어왔으며, 현재에는 MSA(Micro Software Archtecture)에서 마이크로 서비스간에도 많이 사용되는 방식입니다. 서로 다른 환경이지만 서비스간의 프로시저 호출을 가능하게 해줌에 따라 언어에 구애받지 않고 환경에 대한 확장이 가능하며, 좀 더 비지니스 로직에 집중하여 생산성을 증가시킬 수 있습니다.
프로시저와 함수?
RPC를 설명하다 보니 Procedure라는 개념이 소개 되었는데, "프로시저 또는 함수를 호출한다" 라는 내용을 보면 함수와 프로시저에 차이점에 대해서 궁금하실 수 있는데, 함수의 경우 일반적으로 "인풋에 대비한 아웃풋이 발생을 목적"으로 하며, 프로시저는 결과값에 집중하기 보단 "명령 단위가 수행하는 절차"를 의미하는 것을 목적으로 합니다.
RPC의 동작은 어떻게 이루어질까?
RPC를 사용하므로서 이루어지는 전체적인 과정은 어떻게 이루어질까요?
RPC가 작동하는 전체적인 과정은 일반적으로 위의 그림과 같습니다. RPC는 Client/Server 구조를 기반으로 작동하며 각각의 클라이언트와 서버는 리모트 콜을 하기 위한 프로시저에 대한 인터페이스를 통해 서로의 요청에 대한 이해를 할 수 있습니다.
동작과정
(1) 우선 IDL(Interface Definition Language)를 통해 호출에 대한 인터페이스를 정의합니다.
(2) IDL에 의해 정의된 인터페이스는 client의 stub과 server의 skeleton 생성의 기반이 되며, rcpgen(유틸리티)를 통해 각각의 stub과 skeleton을 생성합니다.
(3) 클라이언트는 리모트의 프로시저를 사용하기 위해 설계된 스텁의 프로시저를 호출하고, 프로시저 호출에 필요한 인자와 비지니스에 로직에 필요한 메소드를 호출합니다.
(4) 스텁은 서버가 이해할 수 있는 형태로 데이터의 캐스팅 진행하고, 서버 측 RPC로 호출을 진행합니다.
(5) 서버는 수신된 호출에 대한 데이터를 처리합니다.
(6) 서버측 RPC 프로토콜은 처리된 데이터를 캐스팅하여 클라이언트로 응답합니다.
설명
(1) IDL(Interface Definition Language)이란 말그대로 인터페이스에 대한 정의를 진행하는 언어이며, 각각의 시스템을 연결하는 고리가 됩니다. RPC를 사용하는 Client와 Server간에 같은 형태의 언어를 사용할 수도, 그렇지 않을 수도 있습니다. 다른 언어간의 프로시저가 서로의 요청에 대해서 이해하기 위해서는 인터페이스를 통해 규칙을 명세해두고 각자의 시스템이 이해할 수 있는 형태로의 변형이 필요합니다.
(2) 정의된 IDL을 기반으로 rcpgen이라는 rpc 프로토콜 컴파일러를 통해 코드(stub)가 생성됩니다. 스텁을 통해 Client는 프로시저 호출을 위한 참조자가 생겼고, Server는 프로시저 이해를 위한 참조가 생기게 됩니다.
(3) RPC 호출을 위해 필요한 파라메터를 넣어 호출을 진행합니다.
(4) 작성된 코드를 통해 생성된 데이터는 RPC 프로토콜의 XDR 필터를 통해 인코딩되어(데이터 캐스팅) 서버로 전송됩니다.
(5) 서버측 RCP 프로토콜은 클라이언트로부터 전달 받은 데이터를 디코딩하고 데이터를 처리합니다.
(6) 서버에서는 처리된 데이터를 XDR 필터를 통해 인코딩하고 클라이언트에게 전달하여 줍니다. 데이터를 전달 받은 클라이언트는 인코딩된 데이터를 다시 디코딩하고 결과 값을 받아보게 됩니다.
마무리
RPC가 무엇인지 어떤 과정으로 프로시저간의 통신이 발생하는지 정리해 보았는데, 내용이 생각처럼 그렇게 와닿지 않는 것 같아 이해한 부분이 맞게 이해했는지 알수가 없네요 ㅇ.ㅇ....
참조
'Conception' 카테고리의 다른 글
인증서와 프로비저닝 프로파일(Provisioning profile)의 상관관계는? (수정본) (0) | 2020.09.17 |
---|---|
형상관리(Configuration Management) (0) | 2020.08.03 |
Redis & memcached 정리 (0) | 2019.10.28 |
OAuth2.0에 대해서 알아보자! (2) | 2019.10.17 |
스트림과 버퍼에 대해 알아보자! (4) | 2018.12.17 |