프로토콜

    [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 파일은 위와 같이 프로토콜 버..

    [Java] Netty Client

    [Java] Netty Client

    Netty Client 1. Maven Depedency 추가 io.netty netty-all 4.1.16.Final Netty 라이브러리를 이용하기 위한 디펜던시를 추가합니다. 2. Client Netty Client를 구성하기 위해 3가지 기초 설정이 필요합니다. EventLoopGroup 생성과 Bootstrap 생성 및 구성, ChannelInitializer 생성입니다. Netty Server를 구성하기 위한 설정과 많이 비슷합니다. public NettyClient() throws InterruptedException { EventLoopGroup group = new NioEventLoopGroup(); try { Bootstrap clientBootstrap = new Bootstrap(..

    [Java] Netty Server

    Netty Server 1. Maven Depedency 추가 io.netty netty-all 4.1.16.Final Netty 라이브러리를 이용하기 위한 디펜던시를 추가합니다. 2. Server Netty 서버를 구성하기 위해 3가지 기초 설정이 필요합니다. EventLoopGroup 생성과 ServerBootstrap 생성 및 구성, ChannelInitializer 생성입니다. public class NettyServer { public NettyServer() throws InterruptedException { EventLoopGroup group = new NioEventLoopGroup(); try{ ServerBootstrap serverBootstrap = new ServerBootst..

    Netty 파이프라인

    Netty 파이프라인

    Netty 파이프라인 각 Netty SocketChannel에는 ChannelPipeline이 있고, ChannelPipeline에 ChannelHandler 인스턴스 목록이 포함 됩니다. ChannelHandler인터페이스는 두 개의 서브 인터페이스를 가지고 있습니다. ChannelInboundHandler와 ChannelOutboundHandler가 존재합니다. 처음으로 데이터가 수신되면 SocketChannel에서 ChannelInboundHandler으로 데이터가 전달됩니다. ChannelInboundHandler에서 데이터가 처리가 되면 그 다음 ChannelInboundHandler로 전달되며 마지막에 Application에 도달합니다. ChannelInboundHandler는 파이프 라인의 ..

    [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 + ..

    Netty란?

    Netty란?

    Netty란? 기존의 소켓 프로그래밍은 클라이언트가 접속하게 되면 스레드를 할당해야 하는데(1:1관계), 정말 많은 클라이언트가 접속을 하게 될 경우 그 숫자만큼 스레드를 생성해야 해서 리소스의 낭비로 이루어지고, 문맥 교환과 관련된 문제와 입력이나 출력 데이터에 관련한 무한 대기 현상이 발생하는 문제가 있었습니다. 이러한 네트워크 문제 때문에 개발된 방법이 자바의 NIO 방식(Non-Blocking Input Ouput)입니다. 핵심으로는 네트워크 리소스 사용률을 세부적으로 제어하는 Non-Blocking 호출이 포함되어 있는 것으로, 내부적으로 시스템의 이벤트 통지 API를 이용해 논 블록킹 소켓을 등록하면 해당 소켓의 정보를 확인할 수 있습니다. 즉 무한 대기 현상을 회피할 수 있게 되는 것이지요...

    [SOAP] Simple Object Access Protocol이란?

    [SOAP] Simple Object Access Protocol이란?

    [SOAP] Simple Object Access Protocol이란? 1. SOAP(Simple Object Access Protocol) SOAP(Simple Object Access Protocol)은 일반적으로 널리 알려진 HTTP, HTTPS, SMTP 등을 통해 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜입니다. 간단하게 객체를 접근할 수 있는 프로토콜이란 의미입니다. SOAP은 웹 서비스에서 기본적인 메시지를 전달하는 기반이 되는데, SOAP에는 몇가지 형태의 메시지 패턴이 있지만, 보통의 경우 원격 프로시져 호출(Remote Procedure Call:RPC) 패턴으로, 네트워크 노드(클라이언트)에서 다른 쪽 노드(서버)로 메시지를 요청 하고, 서버는 메시지를 즉시 응답..