Rust is a multi-paradigm system programming language focused on safety, especially safe concurrency. Rust is syntactically similar to C++, but is designed to provide better memory safety while maintaining high performance(wikipedia, 2019). Rust 컴파일러는 Rust로 작성한다.
러스트는 인터넷에서 실행되는 서버 및 클라이언트 프로그램을 개발하는데 적합한 언어를 목표로 설계되었다. 이 목표에 따라 러스트는 안전성과 병행 프로그래밍, 그리고 메모리 관리의 직접 제어에 초점을 맞추고 있다. 또한 성능 면에서는 C++와 비슷한 수준을 목표로 하고 있다(ibid). 모질라 재단에서 개발하고 있으며, 차기 웹 브라우저 엔진 프로젝트인 서버(Servo)를 개발하는 데에 쓰인다.
Native C/C++의 DLL을 C#에서 호출하여 사용하는 간단한 예제이다. 사용환경은 Visual Studio 2019, .NET Core 3.0을 선택하였고 모두 64bit로 빌드하였다. 주의할 점은 C++, C# 모두 x64이거나 x86으로 같이 맞추어야 에러가 나지 않는다.
C++ 예제의 함수는 숫자를 반환하는 Add, 문자열을 반환하는 TestString 두 개고 작성 후 C#(.NET Core) 콘솔 프로그램에서 호출하여 사용한다. 아래는 전체 소스이다. 참고로 Project1.dll 파일은 C# 프로젝트의 실행 파일이 있는 곳에 복사한다.
gRPC는 모든 환경에서 실행할 수 있도록 Google이 만든 최신 오픈소스 RPC 프레임워크이다. 대부분 언어와 플랫폼을 지원한다. 무엇보다 경량이며 Protobuf binary serialization 통해 네트워크 사용량을 감소하도록 한다. WCF(XML WebServices), WebAPI를 사용해 본 개발자라면 더 쉽게 접근할 수 있다. 기본적으로 gRPC는 구조화된 데이터를 직렬화하기 위해 Protocol Buffers를 사용한다. 확장자가 ‘.proto’인 일반텍스트 파일에 name-value 행태의 논리적 레코드를 작성한다.
사용법은 Intro to gRPC in C# - How To Get Started 동영상 강좌를 보거나 Microsoft의 gRPC 소개 문서를 참고한다. 이번 글에서는 사용법보다는 리눅스 서버와 윈도우 클라이언트로 개발할 때 SSL/TLS 이슈를 정리하였다. 기본 예제가 ‘https’로 대부분 되어있는데 ‘http’로 서버를 설정하고 콘솔 클라이언트에서 데이트를 호출하였다. 아래 소스는 Visual Studio 2019, .NET Core 3.0 - gRPC 프로젝트에서 기본 생성한 예제를 그대로 사용하였다.