RPC
개요
Remote Procedure Call
원격 프로시저 호출
간단하게 말하자면, A 컴퓨터에서 B 컴퓨터에 있는 함수를 호출하는 것.
조금 더 상세하게 말하자면 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게 하는 프로세스 간 통신 기술.
흔히 한 서버의 로직이 과부하된다면 그 로직의 일부를 다른 서버에서 실행하는 대안을 생각해볼 수 있을 것이다.
이때 다른 서버가 단순한 http 요청을 받아서 처리하는 방식으로도 구현할 수 있겠지만, 그보다 더 좋은 건 해당 로직을 실행하고 결과만 네트워크를 타고 돌려주는 방식일 것이다.
그러니까 네트워크 요청 상에서 귀찮은 곁다리 과정 다 생략하고 안 속 내용물만 취할 수 있는 좋은 전략인 것.
Micro Service Architecture 환경에서 아주 적합한 기술 중 하나일 수밖에 없다.
특징
언어에 독립적
일단, 언어에 종속적이지 않다.
즉, 파이썬으로 만든 코드에서 자바의 함수를 실행할 수 있게 해준다는 것.
이게 가능한 원리는 바로 IDL에 있다.
Interface Definition Language
인터페이스만 정의된 언어
rpc를 지원하기 위해 모든 언어에서 이 방식을 지원한다.
이 IDL에 맞게만 코드를 작성하면 rpcgen이란 컴파일러가 stub이라는 코드로 만들어준다.
이놈은 우리가 사용하는 언어와 다른 녀석이기 때문에 서로 rpc를 사용할 게 확실하기만 하다면 언어에 구애받지 않고 사용이 가능해진다!
다른 컴퓨터의 리소스를 활용
이게 RPC를 사용하는 주 이유가 될 것이다.
위의 가상 시나리오처럼, 로직을 분할하여 실행할 때 매우 유용한 툴이 된다.
다른 방법도 많겠지만, 이 녀석은 매우 빠르다는 장점이 있다.
원리
- 클라이언트에서 요청을 보낸다.
- 해당 요청은 스텁으로 만들어진다.
- 런타임을 타고 상대 런타임으로 간다.
- 이 중간 과정에서 컴퓨터 아키텍쳐로부터 자유롭기 위해 XDR이라 하는 표준 인코딩을 거친다.
- 상대 런타임에서 스텁을 뜯어보고 실행한다.
- 결과를 다시 스텁으로 만든다.
- 돌려보내면 클라쪽에서 스텁을 언팩하고 받는다.
조금 더 상세하게 보면 좋겠지만, 당장은 이정도로만 보고 넘기도록 하겠다.