본문 바로가기
잡(job)기술/gRPC

visual studio에서 사용할 수 있는 gRPC 개발 환경 만들기

by 무니이구나 2022. 6. 27.

이 문서의 최신 버전은 다음에서 관리한다.

https://craftsmanship.tistory.com/112

 

visual studio에서 사용할 수 있는 gRPC 개발 환경 만들기

이 문서의 최신 버전은 다음에서 관리한다. gRPC 툴을 빌드하는 설명은 아래의 링크에서 확인할 수 있다. https://github.com/grpc/grpc/blob/master/BUILDING.md#build-from-source GitHub - grpc/grpc: The C ba..

craftsmanship.tistory.com

 

gRPC 툴을 빌드하는 설명은 아래의 링크에서 확인할 수 있다.

https://github.com/grpc/grpc/blob/master/BUILDING.md#build-from-source

 

GitHub - grpc/grpc: The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)

The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#) - GitHub - grpc/grpc: The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)

github.com

비주얼 스튜디오를 이용해서 빌드하는 방법을 설명하고 있지만, 과정이 복잡하고 번거롭다. 그래서 다른 방법을 툴과 라이브러리를 빌드하는 방법을 채택했다. 그 방법은 바로 vcpkg를 사용하는 것이다.

vcpkg로 gRPC 설치

vcpkg를 설치하는 방법은 다음 문서에 잘 설명되어 있다.

https://github.com/microsoft/vcpkg/blob/master/README_ko_KR.md#%EB%B9%A0%EB%A5%B4%EA%B2%8C-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-windows

 

GitHub - microsoft/vcpkg: C++ Library Manager for Windows, Linux, and MacOS

C++ Library Manager for Windows, Linux, and MacOS. Contribute to microsoft/vcpkg development by creating an account on GitHub.

github.com

여기에 grpc 패키지만 추가로 설치하면 된다.

 

vcpkg install grpc

 

vcpkg를 설치한 위치를 ${vcpkg_root} 라고 하면, grpc 플러그인은 ${vcpkg_root}/installed/x64-windows/tools/grpc, protoc 은 ${vcpkg_root}/installed/x64-windows/tools/protobuf 에 위치한다. 이 툴은 proto 파일을 grpc와 protobuf를 사용할 수 있는 코드를 언어별로 변환해준다.

vcpkg이 visual studio 에 대해 가지는 장점은 헤더 연결 및 라이브러리 링크 작업을 쉽게 할 수 있다는 것이다.

vcpkg integrate install

사용자 지정 빌드 도구 설정

 ${vcpkg_root}/installed/x64-windows/tools/protobuf 에 protoc 과  ${vcpkg_root}/installed/x64-windows/tools/grpc 에 있는 플러그인을 이용해서 proto 파일을 c++ 코드로 변환해줘야 한다. visual studio 에서 c++ 코드는 빌드를 하게 되면 c++ 컴파일러를 통해서 컴파일 하도록 되어 있지만, proto 파일에 대해서는 아무런 반응을 하지 않는다. 그러므로, 사용자 지정 빌드 도구를 통해서 proto 파일을 컴파일 하는 작업을 정의해줄 필요가 있다.

우선, proto 파일을 프로젝트에 추가한다. 추가한 proto 파일에 오른쪽 마우스 누르고 속성으로 진입한다. 항목 형식이라는 설정값을 확인할 수 있는데 이것을 '사용자 지정 빌드 도구'로 선택하고 확인을 누른다.

이 후, 프로젝트 속성에 '사용자 지정 빌드 도구'라는 메뉴가 추가된다.

proto 파일을 사용자 지정 빌드에 연결

앞의 프로젝트 속성 설정 그림에서 알 수 있듯이, 명령줄, 출력 등을 설정해서 proto 파일이 적절하게 컴파일 되도록 할 수 있다.

명령줄은 protoc 를 실행하도록 입력한다.

$(VcpkgRoot)\installed\x64-windows\tools\protobuf\protoc \
    --grpc_out $(ProjectDir)  --cpp_out $(ProjectDir) -I $(ProjectDir)protos \
    --plugin=protoc-gen-grpc=$(VcpkgRoot)\installed\x64-windows\tools\grpc\grpc_cpp_plugin.exe \
    %(Filename)%(Extension)

grpc나 proto 를 사용하기 위해 생성되는 파일의 위치는 --grpc_out 과 --cpp_out 을 통해 정의된다. 입력이 되는 proto 파일의 위치는 -I 옵션을 이용한다. proto 파일의 위치는 c++ 코드와 분리해서 관리하는 것이 좋을 것이라 판단하여 $(projectDir)protos로 지정했다. 출력 파일을 c++ 코드를 생성할 것이기 때문에 --plugin은 cpp plugin으로 지정했다. $(ProjectDir) 이나 $(VcpkgRoot) 등의 값은 명령줄 설정 중에 매크로 버튼을 눌러서 확인하면 된다. 마지막으로 입력 파일이름은 %(Filename)%(Extension) 로 지정해서 등록한 proto 파일 이름으로 자동으로 넘겨지도록 했다.

출력은 명령줄을 실행해서 결과로 나오는 파일을 지정하면 된다. 만약 입력으로 사용하는 proto 파일이 업데이트 되어서 출력파일보다 최신이 되면 visual studio는 빌드 시 자동으로 명령줄을 실행하게 된다.

$(ProjectDir)%(Filename).pb.h
$(ProjectDir)%(Filename).pb.cc
$(ProjectDir)%(Filename).grpc.pb.h
$(ProjectDir)%(Filename).grpc.pb.cc

생성 파일을 프로젝트에 추가

우선 프로젝트 빌드를 실행한다. 이전에 지정한 $(ProjectDir)에 protoc 명령줄의 결과 파일이 생성된다. 이 결과 파일들을 프로젝트에 다시 추가한다. 이유는 이 코드를 visual studio에서 컴파일되도록 하기 위해서이다. 이 후에는 proto 파일을 변경하면, 자동으로 pb.h/cc 가 업데이트되고, 이에 따라 다시 c++ 컴파일러를 통해 코드를 빌드하게 된다.

winsock2 링크

안타깝게도 바로 빌드에 성공하지 않을 것이다. grpc를 사용하기 위해서는 winsock2 가 필요한 것으로 보인다. 프로젝트 링커 설정에 ws2_32.lib를 추가해줘야 한다.

Github에 예제 코드 공유

이 글을 작성하면서 예제로 작성한 코드는 다음 링크를 통해서 확인할 수 있다. 코드는 gRPC github 소스에서 examples 디렉토리 내에 있는 helloworld 프로젝트의 것을 이용했다.

https://github.com/moonyl/grpcHelloworldWin

 

GitHub - moonyl/grpcHelloworldWin: visual studio 에서 grpc 개발 환경을 만들기 위한 예제 코드이다.

visual studio 에서 grpc 개발 환경을 만들기 위한 예제 코드이다. Contribute to moonyl/grpcHelloworldWin development by creating an account on GitHub.

github.com