1. OpenDDS란?
미들웨어 중에 DDS라는 녀석이 있다.
Publisher-Subscriber 모델을 사용하며, 상당히 신뢰도가 높아 국방체계에도 사용되는 미들웨어다.
RTI DDS가 비싸도 널리 사용되는 것 같고, 이 외에도 OpenSplice DDS, 국산인 스마트DDS, 구름DDS도 있다.
DDS도 다른 기술들과 마찬가지로 표준화가 이루어져 오픈소스 버전도 만들어져 깃허브에서 관리되고 있다.
깃허브에서 소스가 관리되는 DDS는 위에 언급된 OpenSplice DDS 외에도 OpenDDS가 있다.
이 중 OpenDDS를 윈도우 환경에서 적용해보기로 했다.
2. 윈도우 환경과 기타 환경의 미묘한 차이
우리나라에서 프로그램을 개발할 때는 당연히 유니코드를 적용해서 개발해야 한다.
호환성 때문에 멀티바이트 개발을 지원하긴 하지만, 윈도우 OS 자체가 유니코드 기반인 지금 멀티바이트 개발은 낡은 방식이다.
하지만, 이건 비영어권 국가에서의 얘기고 영미권으로 가면 아직 멀었다.
그들에겐 별 문제 없으니까 유니코드를 제대로 적용하지 않는 경우가 많다.
애초에 오픈 소스 환경들은 분위기상 여전히 기본 문자형으로 char를 사용하는 경우가 많기도 하고.
OpenDDS 역시 마찬가지인데, 기본 설정만으로는 wchar_t를 사용하도록 만들 수가 없다.
살짝 손을 대줘야 wchar_t를 사용할 수 있다.
3. 개인적 성향?
개인적인 성향이겠지만, Visual Studio Runtime Library를 사용하도록 개발하는 것이 좋은 방식은 아니라고 본다.
물론 대규모 프로젝트를 개발할 때야 다르지만, 창 몇 개짜리 프로그램을 위해 런타임을 설치하는 건 배보다 배꼽이 크다.
메모장2를 포함한 이 블로그에서 공개하는 프로그램들이 모두 최소한의 실행파일로만 구성된 것이 바로 그 이유에서다.
그런데, 여기서 좀 미묘한 문제가 발생한다.
OpenDDS는 static 모드로도 컴파일할 수 있다.
즉, 선택하기에 따라서는 dll 파일 없이 실행 파일 하나에 모든 라이브러리가 들어가도록 할 수도 있는 것이다.
이를 간단하게 OpenDDS의 static 모드와 dll 모드라고 불러보자.
비주얼 스튜디오에서 개발을 할 때도 비슷한 선택을 해야 한다.
MFC를 공유 DLL모드 또는 정적 라이브러리 MFC에서 사용하는지를 선택해야 하는 것이다.
이게 전술했던 최소한의 실행파일 얘기인데, 나는 말했듯이 정적 라이브러리 MFC를 사용하는 것을 선호한다.
뭐가 문제냐면 OpenDDS의 static/dll 모드와 MFC의 static/dll 모드를 무조건 맞춰야 한다는 점이다.
이 점이 제대로 설명된 부분이 없어서 찾아내는데 꽤 긴 시간을 허비해야만 했다.