많지 않지만 몇개 국내 블러그 글을 참고해서 구글 프로토콜 버퍼와 gRPC 사용법에 대해 조사했었다.


결과적으로 두개의 솔루션은 개별적으로 사용하는 것도 가능하지만 한 세트로 운용되는 솔루션으로 구글 프로토콜 버퍼 파일을 GRPC 운용이 가능한 코드 제네레이션 하는 법만 알면 쉽게 여러가지 응용이 가능한 솔루션이었다.


다만, 이종언어간 미묘한 트러블이 존재하는 것으로 보인다.


이번 프로젝트에서 활용하면서 자바 간 서버-클라이언트 환경과 C++간 서버-클라이언트 환경에서 문제 없이 동작했었지만 자바 클라이언트와 C++ 서버 사이의 연동에 문제가 발생했었다.


동일한 프로토콜 버퍼 파일을 이용해 반대의 경우인 자바 서버와 C++ 클라이언트는 정상적으로 통신이 되는 것으로 봐선 단순이 프로토콜 버퍼 양식에 문제는 아닌 것으로 보여진다.


오픈소스를 사용할때마다 제일 답답해지는 부분인데 이런 경우 정말 난감하다.


다행이도 이번 프로젝트에서는 서버 솔루션을 자바로 교체하는 것이 오히려 유리한 면이 있어서 그렇게 마무리할 수 있었지만 단순히 이종언어간의 문제 이상의 문제점이 솔루션에 존재하고 있다는 것을 의미한다고 보여진다.


프로젝트 기간이 짧았던 탓도 있었으니 좀더 테스트를 해봐야 겠다.


자바를 전문으로 개발하는 사람이 아니다 보니 조금 헤매긴했지만 생각보다 간단하게 적용이 가능한 솔루션이라 정리해둔다.



먼저 구글 프로토콜 버퍼


<Protocol Buffer>


구글에서 만든 데이터 시리얼라이즈 솔루션

데이터 형식을 지정하여 시리얼라이즈 버퍼를 생성함


구글 RPC에서는 기본으로 사용


전송효율이 좋다고 알려져 있음


결론적으로 자바는 jar 형태의 라이브러리만 적용하면 되지만 test.proto 와 같은 프로토콜 버퍼 코드 생성을 위한 고유의 문법이 적용된 파일을 생성하여 해당 언어에 맞는 코드 제너레이션이 필요하다.


.proto 파일을 컴파일해서 코드 제너레이션을 위한 유틸리티인  protoc 가 필요하다.


윈도우에선 java에서 사용이 가능한 코드를 얻기 위해선 일단 protoc.exe를 다운받아사용하면 된다.


protoc 최종 릴리즈 버젼

https://github.com/protocolbuffers/protobuf/releases


protoc를 이용해 생성한 코드는 시리얼라이즈만 가능한 코드가 생성된다.


<GRPC-java>


GRPC는 기존의 RPC 개념을 확장해서 구글 프로토콜 버퍼를 이용해 간단한 메시지나 스트리밍 전송에 대한 솔루션을 제공한다.


GRPC를 위한 Stub 생성을 위한 코드 제너레이션을 위해선 자바용 제너레이션 생성도구 protoc-gen-grpc-java-1.17.1-windows-x86_64.exe 를 plug-in으로 이용해 코드를 생성해야한다.


$ protoc --plugin=protoc-gen-grpc-java \

  --grpc-java_out="$OUTPUT_FILE" --proto_path="$DIR_OF_PROTO_FILE" "$PROTO_FILE"



위와 같은 형태로 grpc 플러그인을 사용해 코드를 생성하면 GRPC용 Stub가 포함된 소스코드가 생성된다.


이후 사용법은 GRPC 예제를 참조하면 된다.


'Java' 카테고리의 다른 글

자바에서 날짜/시간 계산 & 변경  (0) 2015.02.13
Posted by 휘프노스
,