Tech.

  • gRPC 시작하기

    gRPC란?

    gRPC는 구조화된 데이터 직렬화에 적합하도록 설계된 Protocol Buffer 기반의 인터페이스 정의 언어(IDL; Interface Definition Language)를 사용하여 물리적 혹은 논리적으로 분산되어 있는 다수의 프로세스 사이에서의 고속 통신을 위한 원격 프로시저 호출(RPC; Remote Procedure Call) 프레임워크입니다.

    gRPC의 특징

    확장된 형식의 Protocol Buffer를 이용하여 메시지의 구조와 통신 메서드의 파라미터 및 반환 타입 등을 정의하므로 gRPC는 기본적으로 아래에 기술된 Protocol Buffer의 고유한 장점과 단점을 모두 가지게 됩니다.

    • Protocol Buffer의 장점
      • 사전에 정의된 형식을 이용하므로 애플리케이션 간의 통신에서 활용되는 메시지의 엄격한 타입 정의가 가능합니다.
      • 바이너리로 직렬화된 메시지를 교환하므로 텍스트 기반의 JSON, XML 등에 비해 그 크기가 작습니다.
    • Protocol Buffer의 단점
      • 메시지의 구조를 별도로 정의하여 관리해야 하고, 명세를 미리 정의하고 소프트웨어를 개발하는 계약 우선(Contract-First) 방식이 권장되므로 개발 조직 특성에 따라서 도입이 쉽지 않을 수 있습니다.
      • 메시지의 구조가 급격히 변경되면 이를 활용하는 클라이언트와 서버 코드를 다시 생성해야 하며, 이는 지속적 통합(CI; Continuous Integration)에 포함되어야 하므로 전체 개발 프로세스의 복잡도를 가중시킬 수 있습니다.

    Protocol Buffer 기반의 IDL을 이용하여 명세된 서비스 정의를 통해 gRPC의 저수준 통신 구현이 추상화된 서버 스켈레톤과 클라이언트 스텁 코드를 자동으로 생성할 수 있으며, 개발자는 이를 이용하여 구현하는 소프트웨어에서 필요한 시점에 원격 프로시저를 간단하게 호출할 수 있습니다.

    특히, gRPC는 특정 프로그래밍 언어에 종속되지 않도록 설계되어 있을 뿐만 아니라, Protocol Buffer 기반의 서비스 정의를 제공하므로 다양한 언어에서 작동가능한 Polyglot한 특성을 가집니다.

    또한, gRPC는 고성능의 양방향 메시지 전송을 지원하는 HTTP/2 프로토콜을 사용하므로 서버와 클라이언트 사이의 메시지 교환을 위해 다양한 통신 방법을 활용할 수 있습니다.

    gRPC 통신 패턴

    gRPC는 다음의 네 가지 통신 방법을 제공합니다. Protocol Buffer로 정의된 메시지를 전달하므로 이를 발신하는 쪽(일반적으로 클라이언트 사이드)에서는 마샬링(Marshaling)을 수행하고, 수신하는 쪽(일반적으로 서버 사이드)에서는 언마샬링(Unmarshaling)을 수행하게 됩니다.

    • Unary RPC: 클라이언트에서 단일 요청이 발생하면 서버에서 단일 응답을 반환합니다. (일반적인 HTTP Request-Response 구조와 유사함.)
    • Server-Streaming RPC: 클라이언트에서 단일 요청이 발생하면 서버에서 연속적인 스트림 응답을 반환합니다. 클라이언트는 EOF에 도달할 때까지 스트림 데이터를 수신합니다.
    • Client-Streaming RPC: 클라이언트에서 연속적인 스트림 요청을 전송하면 서버는 단일 응답을 반환합니다. 서버는 EOF에 도달할 때까지 스트림 데이터를 수신하며, 수신 도중에 스트림을 취소하여 클라이언트의 메시지 전송을 조기에 중지할 수도 있습니다.
    • Bidirectional-Streaming RPC: 클라이언트와 서버 모두 독립적으로 동작하는 수신 스트림과 발신 스트림을 이용하여 서로에게 EOF에 도달할 때까지 연속적인 스트림을 전달할 수 있습니다.

  • 서버 세팅 끝~

    석사과정 시절부터 계속 미루던 라즈베리파이4B 3대를 활용한 개인 서버 구축을 며칠 사이에 마무리했다.

    이력서를 비롯한 포트폴리오는 lattechiffon.com에 작업할 예정이고, tech.lattechiffon.com은 개발 블로그로 운영할 생각이다.

    이제부터 개발하거나 공부한 내용들을 이곳에 충실히 남기도록 노력해야지.

    시간 날 때 서버를 구축한 방법부터 차근차근 남기기 시작해야겠다.