프로토콜/gRPC

    [gRPC] Protocol Buffer란?

    [gRPC] Protocol Buffer란?

    1. 프로토콜 버퍼(Protocol Buffer)란? gRPC에서 사용되는 .proto를 사용하기에 앞서 프로토콜 버퍼에 대한 이해가 선행되어야 하는데, 프로토콜 버퍼는 흔히 볼수 있는 XML, JSON과 유사한 직렬화 데이터 구조이며 보통 protobuf로 줄여서 부릅니다. 직렬화란, 데이터 표현을 바이트 단위로 변환하는 작업을 의미합니다. 문자열 직렬화를 예로 들자면, hello라는 문자를 16진수로 인코딩을 해서 68 65 6C 6C 6F와 같은 형태로 표현하는 것을 말합니다. 위 그림은 json과 Protocol buffer를 사용한 직렬화의 차이를 나타낸 것인데 json: 82byte protocol buffer: 33 byte 와 같은 차이가 납니다. .proto 파일은 위와 같이 프로토콜 버..

    [C#] gRPC Server(Sevice)

    [C#] gRPC Server(Sevice)

    C# gRPC Server C#에서는 gRPC Server를 ASP.NET과 .NET Core기반으로 지원하고 있습니다. 따라서 비쥬얼 스튜디오를 사용하고 계시다면 ASP.NET, .NET Core를 설치를 해주셔야 합니다. gRPC가 HTTP2를 사용하기 때문에 웹 서버 기반인 ASP.NET, .NET Core를 설치를 해야 합니다. 1. gRPC 서비스 프로젝트 생성 새 프로젝트 만들기 – 템플릿 검색(grpc) gRPC 서비스를 선택하고 프로젝트를 생성해주면 됩니다. 2. gRPC 서버 구현 gRPC 서비스를 생성하게 되면 아래와 같은 파일들이 자동적으로 생성이 됩니다. 가장 신경 써야 할 부분은 서버 측이기 때문에 클라이언트에게 Return해줄 Service의 내부 코드를 작성해주어야 한다는 것과..

    [C#] gRPC Client

    [C#] gRPC Client

    계속해서 gRPC를 공부하며 포스팅을 진행하는데요. 현재 진행하고 있는 프로젝트가 Client가 C# 기반이고, Server가 Java 기반이어서 Http통신의 REST API를 사용하는 구조이다 보니 서버 측의 모델과 클라이언트 측의 모델을 각각 따로 구현해야 하는 불편함이 생기더라구요. Json이 아닌 proto타입으로 주고 받을 수 있는 RPC 기반의 gRPC를 사용하면 이런 불편함이 조금 해소되지 않을까, 찾아보면서 포스팅을 진행하고 있습니다. 앞에서 포스팅 했던 Java와 같이 C#에서도 gRPC를 구현할 수 있는데, C#이 더욱 쉽습니다(?) 1. Nuget 설치 저는 C# 콘솔 기반의 프로젝트를 생성했구요. (굳이 GUI를 만들것 까지는 없으니까...) 프로젝트에 Nuget 패키지 관리자 콘..

    [Java] gRPC Maven

    [Java] gRPC Maven

    gRPC를 실제로 Java 기반에서 구현해보기 위한 순서를 포스팅해봅니다. 다른 분들은 Spring Framework를 사용했는데, 저는 그냥 일반 Maven Project를 사용해서 구현해보았습니다. 결과적으로 Maven을 Build해서 IDL에 해당하는 proto파일을 컴파일 해주는 것은 같습니다. 다음에 기회가 되면 Spring과 일반 Maven Project와의 차이점에 대해서도 공부를 해서 포스팅 하도록 하겠습니다. gRPC를 사용하기 위해 가장 중요한 것은 서버와 클라이언트의 IDL로서 사용하기 위한 proto파일을 컴파일 하는 것입니다.(사실 이부분에 가장 애를 먹었습니다.) gRPC를 검색하면 나오는 자료는 다 github에 올라와 있는데 정작 .proto 파일을 컴파일 하는 부분에 대해서..

    gRPC란?

    gRPC란?

    GRPC(Google Remote Procedure Call) RPC의 개념 먼저 gRPC를 설명하기 전에 RPC의 기본적인 개념부터 알고 가야합니다. RPC는 프로세스간 통신을 위한 기법입니다. 별도의 원격 제어 없이 프로세스 간의 함수나 프로시저를 호출할 수 있도록 하는 통신 기술입니다. - 클라이언트가 서버의 특정 메소드를 호출할때, 마치 같은 컴퓨터에 있는 것처럼 호출할 수 있는 구조 - 클라이언트와 서버간에 각자가 일반 로컬 메소드를 호출하는 것처럼 사용할 수 있음 - 다양한 언어환경에 제약없이, 플랫폼 제약없이 사용할 수 있음 Caller(클라이언트)와 Callee(서버)는 IDL(Interface define Language)를 통해 서로의 인터페이스를 명세합니다. Caller가 RPC + ..