[Tip,C#] protobuf 메시지 정의 나누어 배포하기
관련링크
본문
서버간 메시지 정의나 클라이언트에 노출시키고 싶지 않은 메시지/데이터 정의들을 따로 관리하고 싶을 때 다음과 같이 해주시면 약간이나마 편하게 하실 수 있습니다.
1. 메시지 정의용 lib 프로젝트를 생성하고 Nuget 에서 Google.Protobuf 와 Grpc.Tools 를 추가해줍니다.
이 때, Visual Studio 상에서 구분된 프로젝트를 만들어주는데 프로젝트 파일의 위치는 동일 위치로 해줍니다. 다음과 같이요.
그리고 proto 파일들을 생성해주고 해당 프로젝트에서 필요한 것은 속성에서 Build Action 은 Protobuf compiler 로, (gRPC 를 쓰지 않는다면) gRPC Stub Classes 는 Do not generate 로 바꿔줍니다.
프로젝트에 포함될 필요가 없는 proto 파일은 우클릭후 "프로젝트에서 제외" 를 클릭해 프로젝트에서 빼줍니다. (그냥 놔둬도 빌드액션이 정의가 안되면 무관하긴 하지만...)
2. msg.proto , server.proto 두 개의 proto 파일을 작성했고 서버간 메시지 정의는 server.proto 에만 담았다고 가정해 보겠습니다.
빌드 후에 dll 들을 DotPeeker 로 열어보면 다음과 같이 각각 잘 구별되서 담겨 있는 것을 확인할 수 있습니다.
Messages.dll
Messages.Server.dll
클라이언트에는 Messages.dll 을 배포하고 서버에는 Messages.Server.dll 을 배포하면 됩니다.