코딩관계론

MSA에서는 gRPC를 왜 선호할까? 본문

개발/SPOT

MSA에서는 gRPC를 왜 선호할까?

개발자_티모 2024. 4. 1. 01:07
반응형

 gRPC란?

gRPC를 이해하기 위해서는 먼저 RPC의 개념을 이해해야 합니다. RPC는 Remote Procedure Call의 약자로, 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게 하는 프로세스 간 통신 기술을 의미합니다.

 

일반적으로 프로세스는 자신의 주소 공간 안에 존재하는 함수만 호출하여 실행할 수 있지만, RPC를 통해 네트워크를 통해 자신과 다른 주소 공간에서 동작하는 프로세스의 함수를 실행할 수 있습니다.

 

동작 방식은 다음과 같습니다:

  • 클라이언트는 stub에 정의된 함수를 호출합니다. 이 stub 코드는 데이터 타입을 XDR 형식으로 변환하여 RPC 호출을 실행합니다.
  • 서버는 수신된 함수에 대한 처리를 *Stub을 통해 처리 완료 후 결과값을 XDR로 변환하여 반환합니다.
  • 최종적으로 클라이언트 프로그램은 서버가 반환한 결과값을 전송 받습니다.

 

결국 gRPC는 Google이 개발하고 오픈 소스로 공개한 원격 프로시저 호출(Remote Procedure Call; RPC) 프레임워크입니다. 

 

 gRPC 특징은?

1. HTTP/2기반의 통신을 사용합니다.

  * HTTP/2기반의 통신을 사용하는 이유는 다양하지만 주요한 이유 중 하나는 멀티플렉싱을 통해 여러 개의 RPC 호출을 동시에 처리할 수 있기 때문입니다. 이는 규모의 분산 시스템에서 성능과 효율성을 향상시키는 데 도움이 됩니다.

 

2. Protocol Buffer(Prottobuf)를 사용합니다

 * Protocol Buffer(Prottobuf)를 사용하는 이유는 효율적인 직렬화, 강력한 스키마등이 있지만 주된 이유는 다양한 언어를 지원하기 때문이라고 생각합니다. 각 언어에 맞는 생성 도구를 지원하기 때문에 다양한 환경에서의 상호 운용성을 보장하고, 클라이언트 및 서버 간의 통신을 간편하게 합니다.

 

MSA에서의 이점

  1. 효율성 및 성능:
    • gRPC는 Protocol Buffers를 사용하여 데이터를 직렬화하고 전송하기 때문에 JSON보다 훨씬 효율적입니다. Protocol Buffers는 이진 형식으로 데이터를 표현하고 압축하기 때문에 더 작은 크기의 패킷으로 데이터를 전송할 수 있습니다.
    • JSON은 텍스트 형식으로 데이터를 표현하기 때문에 불필요한 공백이나 인코딩 오버헤드가 발생할 수 있습니다. 또한, JSON은 키와 값이 문자열로 표현되기 때문에 크기가 커질 수 있습니다.
  2. 속도와 응답 시간:
    • gRPC는 HTTP/2 기반으로 동작하며, HTTP/2는 멀티플렉싱을 지원하여 여러 개의 요청과 응답을 동시에 처리할 수 있습니다. 이는 클라이언트와 서버 간의 통신을 더 효율적으로 만들어 응답 시간을 단축시킵니다.
    • JSON을 사용하는 경우에는 HTTP/1.1과 같은 이전 버전의 프로토콜을 사용해야 하므로, 한 번에 하나의 요청과 응답만을 처리할 수 있습니다.
  3. 상호 운용성:
    • gRPC는 Protocol Buffers를 사용하여 메시지를 정의하고, 이를 기반으로 서버 및 클라이언트 코드를 생성할 수 있습니다. 이러한 코드 생성을 통해 각 서비스 간의 통신이 보다 일관되고 안정적으로 이루어질 수 있습니다.
    • JSON은 스키마가 없는 텍스트 형식이기 때문에 데이터의 구조가 일관되지 않을 수 있습니다. 따라서 JSON을 사용하는 경우에는 서비스 간의 통신을 위한 추가적인 검증이 필요할 수 있습니다.

 

* Stub을 통해 처리 완료 후 결과값을 XDR로 변환하는 이유는 

 RPC(원격 프로시저 호출)에서는 클라이언트와 서버 간의 통신이 네트워크를 통해 이루어집니다. 이때 클라이언트와 서버는 서로 다른 시스템에서 실행되므로, 데이터의 표현 방식이나 형식이 서로 다를 수 있습니다. 따라서 클라이언트와 서버 간에 데이터를 전송할 때는 특정 형식으로 데이터를 직렬화하고, 다시 해당 형식으로 역직렬화하여 데이터를 읽어야 합니다.

 이렇게 함으로써, 클라이언트와 서버 간에 서로 다른 프로그래밍 언어나 플랫폼을 사용하더라도 데이터를 효율적으로 전송할 수 있습니다. 또한, XDR은 네트워크 상에서의 데이터 전송에 있어서 효율적이고 안정적인 포맷으로 널리 사용됩니다.

 

반응형