개발

gRPC가 무엇인가요?

조용한닭 2023. 12. 12. 08:54
728x90
반응형

 

 

gRPC(구글 Remote Procedure Call)는 Google에서 개발한 오픈 소스 RPC(원격 프로시저 호출) 프레임워크입니다. 이는 HTTP/2를 기반으로 하며 Protocol Buffers를 사용하여 강력하고 효율적인 통신을 지원합니다. 여기서 몇 가지 주요 특징을 설명하겠습니다:

  1. IDL (Interface Definition Language): gRPC는 서비스 간 통신을 위한 인터페이스 정의를 위해 Protocol Buffers 기반의 IDL을 사용합니다. 이것은 서비스와 메시지에 대한 명세를 작성할 수 있게 해주며, 언어 간에 서로 다른 클라이언트 및 서버에서 일관된 인터페이스를 사용할 수 있게 합니다.
  2. 다양한 언어 지원: gRPC는 여러 프로그래밍 언어(C++, Java, Python, Go, Ruby, C#, 등)에서 사용할 수 있습니다. Protocol Buffers를 사용하기 때문에, 이러한 다양한 언어 간에 데이터를 쉽게 공유할 수 있습니다.
  3. HTTP/2 기반 통신: gRPC는 기본적으로 HTTP/2를 사용하며, 이는 여러 면에서 이점을 제공합니다. 이는 단일 연결에서 다중 요청 및 응답을 처리할 수 있으며, 헤더 압축과 함께 성능 향상을 가져옵니다.
  4. 양방향 스트리밍: gRPC는 양방향 스트리밍을 지원합니다. 클라이언트와 서버 간에 동시에 여러 메시지를 주고 받을 수 있습니다. 이는 실시간 통신이나 데이터 스트리밍에 유용합니다.
  5. 자동 코드 생성: Protocol Buffers로 정의된 서비스와 메시지를 기반으로, gRPC는 클라이언트 및 서버 코드를 자동으로 생성할 수 있습니다. 이는 개발자가 일관된 API를 사용하고, 런타임 오류를 줄이며, 코드의 유지보수를 쉽게 만듭니다.
  6. 보안 기능 제공: gRPC는 기본적으로 SSL/TLS를 지원하여 통신의 보안성을 유지할 수 있습니다.

gRPC는 주로 마이크로서비스 아키텍처 및 다양한 분산 시스템에서 사용되며, 효율적이고 강력한 RPC를 구현하기 위한 강력한 도구로 인정받고 있습니다.

 

 

장점

  1. 성능: gRPC는 바이너리 프로토콜인 Protocol Buffers를 사용하고, HTTP/2를 기반으로 하기 때문에 데이터의 효율적인 직렬화와 네트워크 전송에 있어서 효율적입니다. 특히 HTTP/2의 다중 스트림 및 헤더 압축 등의 특성으로 인해 성능이 향상됩니다.
  2. 다양한 언어 지원: gRPC는 Protocol Buffers를 사용하기 때문에 여러 프로그래밍 언어에서 지원되며, 자동 코드 생성을 통해 클라이언트 및 서버 코드의 작성이 쉽습니다.
  3. 양방향 스트리밍: gRPC는 양방향 스트리밍을 지원하여 클라이언트와 서버 간에 동시에 여러 메시지를 주고 받을 수 있습니다. 이는 실시간 통신이나 대량의 데이터를 처리하는 데 효과적입니다.
  4. 자동 코드 생성: Protocol Buffers로 정의된 메시지와 서비스에 대한 코드를 자동으로 생성할 수 있습니다. 이는 클라이언트 및 서버 코드의 일관성을 유지하고, 런타임 오류를 줄이며, 개발자의 생산성을 향상시킵니다.
  5. 확장성: gRPC는 다수의 클라이언트와 서버 간에 효율적으로 통신할 수 있도록 설계되어 있어, 대규모 분산 시스템에서 확장성이 좋습니다.
  6. 보안 기능 제공: gRPC는 기본적으로 SSL/TLS를 지원하여 통신의 보안성을 제공합니다.
  7. 인터셉터 및 미들웨어: gRPC는 인터셉터를 통해 요청과 응답을 조작할 수 있는 기능을 제공합니다. 이를 통해 각종 미들웨어를 쉽게 적용할 수 있습니다.
  8. 많은 기능 지원: gRPC는 헤더 압축, 플로우 제어, 타임아웃 등 다양한 기능을 지원하여 복잡한 시스템에서 필요한 요구사항을 충족시킬 수 있습니다.

단점

  1. 학습 곡선: gRPC와 Protocol Buffers는 처음에는 익숙하지 않을 수 있습니다. 특히, 이를 처음 도입하는 팀이나 개발자에게는 학습 곡선이 있을 수 있습니다.
  2. 디버깅 어려움: gRPC의 통신은 이진 형식이기 때문에 텍스트 기반의 프로토콜인 HTTP보다 디버깅이 어려울 수 있습니다. 특히, 브라우저에서의 쉬운 디버깅은 어렵습니다.
  3. 사람이 읽을 수 없는 메시지 포맷: Protocol Buffers는 사람이 직접 읽기 어려운 이진 형식의 포맷을 사용합니다. 이는 디버깅이나 특정 상황에서 메시지를 해석하기 어려울 수 있습니다.
  4. 서버 부하: 양방향 스트리밍과 같은 특정한 기능을 사용할 때는 서버 부하가 증가할 수 있습니다. 특히, 많은 연결이 동시에 발생할 경우 이를 효과적으로 처리해야 합니다.
  5. 커스텀 헤더 처리의 제한: HTTP와 달리 gRPC는 헤더를 매번 새로 만들어야 하므로, 커스텀 헤더를 효과적으로 처리하기 어려울 수 있습니다.
  6. 단일 벤더 종속성: gRPC는 Google에서 개발한 기술이기 때문에 해당 기술에 대한 단일 벤더 종속성이 발생할 수 있습니다.
  7. REST의 보편성과의 비교: 현재까지 REST는 매우 보편적이며, gRPC를 사용하려면 클라이언트와 서버가 동일한 프로토콜을 지원해야 합니다. 기존의 REST 서비스와 통합할 때 어려움이 있을 수 있습니다.
728x90
반응형