[Tip,C#] protobuf 메시지 정의 나누어 배포하기

본문 바로가기
사이트 내 전체검색

로그인
회원가입
IT Note

[Tip,C#] protobuf 메시지 정의 나누어 배포하기
3

View 11,248  | 작성일2019.09.18 11:21

본문

서버간 메시지 정의나 클라이언트에 노출시키고 싶지 않은 메시지/데이터 정의들을 따로 관리하고 싶을 때 다음과 같이 해주시면 약간이나마 편하게 하실 수 있습니다. 

 

1. 메시지 정의용 lib 프로젝트를 생성하고 Nuget 에서 Google.Protobuf 와 Grpc.Tools 를 추가해줍니다.

0eb86ebe329eb09897da7a92164c49f4_1568772861_3474.PNG 

 

이 때, Visual Studio 상에서 구분된 프로젝트를 만들어주는데 프로젝트 파일의 위치는 동일 위치로 해줍니다. 다음과 같이요.

 

0eb86ebe329eb09897da7a92164c49f4_1568772494_4737.PNG

 

그리고 proto 파일들을 생성해주고 해당 프로젝트에서 필요한 것은 속성에서 Build Action 은 Protobuf compiler 로, (gRPC 를 쓰지 않는다면) gRPC Stub Classes 는 Do not generate 로 바꿔줍니다.

 

0eb86ebe329eb09897da7a92164c49f4_1568773047_5544.PNG
 

프로젝트에 포함될 필요가 없는 proto 파일은 우클릭후 "프로젝트에서 제외" 를 클릭해 프로젝트에서 빼줍니다. (그냥 놔둬도 빌드액션이 정의가 안되면 무관하긴 하지만...)

 

2. msg.proto , server.proto 두 개의 proto 파일을 작성했고 서버간 메시지 정의는 server.proto 에만 담았다고 가정해 보겠습니다.

 

0eb86ebe329eb09897da7a92164c49f4_1568772401_1163.PNG
 

 

빌드 후에 dll 들을 DotPeeker 로 열어보면 다음과 같이 각각 잘 구별되서 담겨 있는 것을 확인할 수 있습니다.

 

Messages.dll

0eb86ebe329eb09897da7a92164c49f4_1568772657_8732.PNG

 

Messages.Server.dll
0eb86ebe329eb09897da7a92164c49f4_1568772657_9266.PNG
 

클라이언트에는 Messages.dll 을 배포하고 서버에는 Messages.Server.dll 을 배포하면 됩니다. 

[이 게시물은 리틀캔들님에 의해 2019-09-18 13:28:26 잡담게시판에서 이동 됨]

댓글목록

꼭 proto 파일에만 해당 하는건 아니고 일반적인 cs 클래스 역시 마찬가지로 관리하면 됩니다.
결국 한줄 요약하면 '프로젝트를 동일한 경로에 위치시켜라' 입니다. ..
tip 이라고 하기도 좀 그런... 별거 없죠 'ㅅ'a

IT Tip&Tech 목록

게시물 검색

접속자집계

오늘
807
어제
1,963
최대
6,399
전체
976,583
Copyright © LittleCandle All rights reserved.
문의메일 : littlecandle99@gmail.com
모바일 버전으로 보기