Configurations

Riverbed Modeler에서 외부 라이브러리 사용 설정

본 포스트에서는 [외부 라이브러리 빌드]와 같은 과정으로 얻은 외부 라이브러리 파일들을 Riverbed Modeler에서 사용 설정하는 방법에 대해 설명하고자 한다. Riverbed Modeler에서도 [Visual Studio에서 외부 라이브러리 사용 설정]과 같이, 다음 폴더에 포함된 파일들에 대해 사용 설정을 해주어야 한다. 헤더: include 폴더 동적 라이브러리: bin 폴더 정적 라이브러리: lib 폴더 먼저 아래 그림과 같이 Riverbed Modeler를 실행한다. 다음으로 ‘Edit > Preferences’를 선택해서, 아래와 같이 새로운 창을 연다. 헤더 파일 사용 설정을 위해, ‘Compilation Flags for All Code’를 검색해서 ‘/W3 /DOP_ODK_APIS /D_CRT_SECURE_NO_DEPRECATE’ 뒤에 다음과 같이 입력해준다. ‘/I{헤더 파일 경로}’ 헤더 파일 사용 설정 후, 정적 라이브러리 경로 지정을 위해 ‘Common Network Repositories Flags’를 검색해서 다음과 같이 입력해준다. ‘/LIBPATH:{정적 라이브러리 경로}’ 또한, 정적 라이브러리 경로를 Path에 추가한다. 다음으로, ‘Common Network Repository Libraries’를 검색해서 사용하고자 하는 정적 라이브러리의 이름(lib 폴더 내부에서 먼저 확인 필요)을 지정해준다. 사용하고자 하는 정적 라이브러리 파일이 여러 개일 경우, 파일 이름들은 띄어쓰기로 구분된다. 마지막으로, 동적 라이브러리 경로에 있는 dll 파일들을 다음 경로에 복사한다. 32비트 환경: {Riverbed Modeler 설치 경로}\{설치된 Riverbed Modeler 버전}\sys\pc_intel_win32\bin 64비트 환경: {Riverbed Modeler 설치 경로}\{설치된 Riverbed Modeler 버전}\sys\pc_amd_win64\bin [Riverbed Modeler 컴파일러 선택 유의사항]에서 확인할 수 있듯이, Riverbed Modeler(구 OPNET Modeler)는 Visual Studio 2013 이하 버전을 지원한다. 따라서, 외부 라이브러리 사용을 위해 위와 같은 번거로운 과정을 거칠 필요가 있다. 그러나, [Riverbed Modeler 18.10.0 발표]에서 Visual Studio 2015 이상을 지원한다는 내용을 확인했다. 이는 [vcpkg를 이용한 외부 라이브러리 사용 설정]에 작성한 vcpkg 사용을 위한 준비사항을 만족한다. 위 근거를 바탕으로, 필자는 Riverbed Modeler에서도 vcpkg를 이용한 외부 라이브러리 사용 설정이 가능할 것으로 생각하지만, 추후 테스트를 통해 확인이 필요하다.

vcpkg를 이용한 외부 라이브러리 사용 설정

[vcpkg]는 마이크로소프트에서 개발한 크로스 플랫폼 오픈 소스 패키지 관리자이다. vcpkg를 이용할 경우, 외부 라이브러리를 사용하기 위해 [외부 라이브러리 빌드] 및 [Visual Studio 프로젝트에서 외부 라이브러리 사용 설정]와 같은 번거로운 과정을 거칠 필요 없다. 본 포스트에서는 vcpkg를 설치하고, 이를 이용하여 원하는 패키지를 설치 및 사용 설정하는 과정에 대해 설명하고자 한다. [vcpkg 설치 및 사용 가이드]의 확인 결과, vcpkg를 설치 및 사용하기 위해 다음과 같은 준비가 필요하다. Windows 7 이상의 운영체제 [Git] 설치 [Visual Studio] 2015 Update 3 이상의 IDE 위 사항이 준비된 이후, 윈도우 커멘드 창을 열어 다음과 같이 입력한다. git clone https://github.com/Microsoft/vcpkg.git .\vcpkg\bootstrap-vcpkg.bat 다음으로, 배치파일 실행 이후 생성된 vcpkg.exe의 경로를 Path에 추가해야 한다. vcpkg.exe는 C:\Users\{사용자 계정 폴더명}\vcpkg에 포함되어 있으며, 윈도우 11 기준으로 다음과 같은 과정을 거쳐 Path에 추가할 수 있다. ‘내 PC’ 아이콘 우클릭 후, ‘속성’ 버튼 클릭 ‘시스템 > 정보’에서 ‘고급 시스템 설정’ 버튼 클릭 ‘환경 변수’ 버튼 클릭 ‘시스템 변수’에서 Path 편집창 열기 ‘새로 만들기’ 버튼 클릭 vcpkg.exe 경로 입력 ‘확인’ 버튼 클릭 이제 vcpkg가 설치되었으며, 사용 가능하다. 사용하고자 하는 패키지를 설치 및 사용하기 위해, 윈도우 커멘드 창을 다시 열어 다음과 같이 입력한다. vcpkg install {설치할 패키지 이름}:x64-windows vcpkg integrate install 필자는 64비트 환경을 사용하기 때문에, vcpkg install 명령어 및 설치할 패키지 이름 이후에 :x64-windows를 붙여주었다. 하지만, 32비트 환경을 사용할 경우에는 설치할 패키지 이름까지만 입력하면 된다. vcpkg integrate install 명령어를 입력하면, 추후 별도의 라이브러리 사용 설정 없이 패키지 사용이 가능하다. 설치된 외부 라이브러리는 C:\Users\{사용자 계정 폴더명}\vcpkg\installed\x64-windows 또는 C:\Users\{사용자 계정 폴더명}\vcpkg\installed\x86-windows 폴더 내에서 관리된다.

VIsual Studio에서 외부 라이브러리 사용 설정

본 포스트에서는 [외부 라이브러리 빌드]와 같은 과정으로 얻은 외부 라이브러리 파일들을 Visual Studio 프로젝트에서 사용 설정하는 방법에 대해 설명하고자 한다. 라이브러리는 다음과 같이 폴더별로 저장된다. 헤더: include 폴더 동적 라이브러리: bin 폴더 정적 라이브러리: lib 폴더 따라서, Visual Studio에서 외부 라이브러리를 사용하기 위해서는 위 폴더에 포함된 파일들에 대해 사용 설정을 해주어야 한다. 먼저 아래 그림과 같이 프로젝트 속성창을 연다. 다음으로, ‘C/C++’ 또는 ‘C/C++ > 일반’에서 ‘추가 포함 디렉터리’의 편집창을 열어 헤더 경로를 지정해준다. 필자는 일반적으로 include 폴더의 경로를 지정해주면 되는 것으로 알고있다. 하지만, [Mongo C Driver 사용 가이드]를 참조하여, 아래 그림과 같이 include 폴더 내부 libbson-1.0 및 libmongoc-1.0 폴더의 경로를 지정했다. 헤더 경로를 지정한 후, ‘디버깅’에서 ‘환경’을 다음과 같이 편집해서 동적 라이브러리의 사용 설정을 수행한다. path={동적 라이브러리 경로};%PATH% 헤더 및 동적 라이브러리와는 달리, 정적 라이브러리 사용 설정을 위해서는 경로 및 파일명을 모두 지정해주어야한다. 먼저, 다음 그림과 같이 ‘링커’ 또는 ‘링커 > 일반’에서 ‘추가 라이브러리 디렉터리’의 편집창을 열어 경로를 지정해준다. 마지막으로, 다음 그림과 같이 ‘링커 > 입력’에서 ‘추가 종속성’의 편집창을 열어 사용하고자 하는 정적 라이브러리의 이름(lib 폴더 내부에서 먼저 확인 필요)을 추가 지정해준다.

외부 라이브러리 빌드

본 포스트에서는 윈도우에서 CMAKE와 Visual Studio를 이용해서 MongoDB C Driver를 빌드하는 과정을 예로, IDE에서 기본 제공하지 않는 외부 라이브러리를 빌드하는 과정에 대해 설명하고자 한다. 기본 준비사항은 다음과 같다. [Visual Studio] 설치 [CMAKE] 설치 [MongoDB C Driver] 소스코드 다운로드 위 사항들이 준비되면 먼저 다운로드한 MongoDB C Driver의 압축을 해제하고, 아래 그림과 같이 cmake_build 폴더를 생성한다. 다음으로, CMAKE를 실행시켜 다음 설명 및 그림과 같이 빌드를 위한 경로를 설정한다. ‘Where is the source code’: MongoDB C Driver의 압축해제 경로 ‘Where to build the binaries’: 위에서 생성한 cmake_build 폴더의 경로 ‘Generate’ 클릭 아래 그림과 같이 컴파일러를 선택하기 위한 창이 생성되면, 설치된 Visual Studio 버전에 맞는 컴파일러를 선택한 후에 ‘Finish’를 클릭한다. 위와 같은 과정을 거친 결과, 다음과 같이 에러 화면을 확인할 수 있었다. CMAKE 윈도우 버전에서는 빌드 옵션을 토글 및 입력 가능한 창을 제공한다. 따라서, ‘CMAKE_INSTALL_PREFIX’ 및 ‘MONGOC_TEST_USE_CRYPT_SHARED’를 기본값과 다르게 설정했다. 필자가 설정한 빌드 옵션들은 다음과 같은 의미를 갖는다. ‘CMAKE_INSTALL_PREFIX’: 빌드 결과가 생성될 경로 ‘MONGOC_TEST_USE_CRYPT_SHARED’: 클라이언트 암호화 테스트를 위해 crypt_shared 라이브러리를 다운로드하여 사용, Python 3를 필요로 하기 때문에 Disabled로 설정 에러 창 확인 및 빌드 옵션 재설정 후에 다시 ‘Generate’를 클릭하면, 다음 그림과 같이 cmake_build 폴더 내부에 ‘ALL_BUILD.vcxproj’와 ‘INSTALL.vcxproj’가 생성된 모습을 확인할 수 있다. 이 두 파일을 열어서 각각 ‘빌드’ 및 ‘다시 빌드’한다. 드라이버 빌드가 완료되면, 아래 그림과 같이 ‘CMAKE_INSTALL_PREFIX’에서 설정한 경로에 라이브러리가 생성된 모습을 확인할 수 있다.

Riverbed Modeler에서 터레인 모델 임포트

본 포스트에서는 [터레인 모델 다운로드]와 같이 다운로드한 DTED 파일을 Riverbed Modeler에 임포트하여 사용하는 방법에 대해 설명하고자 한다. 아래 그림은 Riverbed Modeler 18.9 버전에서 새로운 프로젝트 및 시나리오를 생성한 뒤, 한국 지도를 확대한 화면을 나타낸다. 위 화면에서 ‘Topology > Terrain > Manage Terrain Specifications…‘을 선택하면, 아래와 같이 새로운 창이 열리게 된다. 다음으로, 새로운 터레인 명세를 생성하기 위해 ‘Create New Terrain Specification…‘을 선택한 뒤, 생성할 명세의 이름을 작성해준다. 터레인 명세가 생성되면, 아래와 같이 ‘Add Source…‘를 클릭해서 DTED 파일의 경로를 입력해준다. 아래 그림은 터레인 명세 관리 메뉴에서 DTED 파일의 경로가 입력된 화면을 나타내며, ‘Apply Changes and Close’를 선택한다. 지형정보 기반 시뮬레이션을 수행하기 위해서, 앞서 생성한 명세를 시뮬레이션 시나리오에 적절한 형태로 적용하는 과정이 필요하다. 이를 위해 ‘Topology > Terrain > Set Elevation Maps…‘를 선택하고, 아래와 같은 과정으로 지형정보의 이름을 포함한 각종 내용을 입력한다. 시나리오에 적용하기 위한 형태로 구성된 지형정보를 선택하면, 아래 그림과 같이 한국 지형이 나타난 화면을 확인할 수 있다.

터레인 모델 다운로드

터레인 모델은 지형을 나타내기 위해 위치에 따른 고도 정보를 가지고 있어, 다양한 분야에서 유용하게 사용될 수 있다. 특히, 터레인 모델을 적용하여 네트워크 모델링 및 시뮬레이션을 수행할 경우, 전파가 지형에 의해 반사, 굴절 또는 회절되는 보다 현실적인 환경에 대해 모의할 수 있다. 대표적인 터레인 모델은 Digital Terrain Elevation Data (DTED)와 Digital Elevation Model (DEM)이 있으며, [터레인 모델별 설명]에서 이들에 대한 설명을 확인할 수 있다. 본 포스트에서는 [미국 지질조사국]에서 DTED 파일을 얻는 방법에 대해 설명하고자 한다. 아래 그림은 미국 지질조사국에서 터레인 모델을 다운로드 할 수 있는 화면을 나타낸다. 터레인 모델을 다운로드 하기 위해서는 간단한 정보를 입력하여 회원가입 후, 이메일 인증이 필요하다. 화면은 크게 터레인 모델의 위도 및 경도 정보를 입력하는 구역(왼쪽)과 세계지도에서 지역 선택 정보를 확인할 수 있는 구역(오른쪽)으로 구분된다. 반대로 오른쪽 구역에서 관심 범위를 선택할 경우, 왼쪽 구역에서 이 내용을 확인 가능하다. 아래 그림에서 한반도에 대한 터레인 모델을 다운로드 하기 위해 범위를 선택한 모습을 확인할 수 있다. 이후, 아래 그림과 같이 왼쪽 구역에서 ‘Data Sets’ 탭으로 이동하고, ‘Digital Elevation’ > ‘SRTM’ > ‘SRTM 1 Arc-Second Global’을 선택한 뒤에 ‘Results’ 탭으로 이동하면 터레인 모델을 다운로드 할 수 있는 화면이 나온다. ‘Results’ 탭에서는 사용자가 선택한 지역에 대해 위도 및 경도로 구분되는 터레인 정보를 확인할 수 있다. 아래 그림과 같이 선택하여 ‘View Item Basket’ 버튼을 클릭하면 선택된 모델을 한번에 다운로드 할 수 있으나, 일정 시간을 기다려야 하는 것으로 보인다. 반면, 아래 그림과 같이 터레인 정보를 일일히 선택하여 DTED 파일을 다운로드 할 수도 있다. 상기 선택된 범위를 적용할 경우 DTED 파일은 총 57개로, 모두 다운로드 하기 위해 비교적 번거로운 과정을 반복해야 한다.

블로그 호스팅 환경 및 HTTPS 리다이렉션 설정

[블로그 저작 환경 구축]에 작성한 바와 같이, 네이티브하게 블로그를 호스팅 하기로 결정했다. 시놀로지에서 웹 스테이션을 실행할 경우, web이라는 이름을 가진 공유폴더에 정적 페이지 빌드 결과를 업로드하는 것 만으로 웹 서비스를 제공할 수 있다. 보안을 위해 많은 웹페이지는 리다이렉션을 통해 HTTPS로만 접속할 수 있도록 한다. 시놀로지에는 기본적으로 웹 서비스를 위해 [Nginx]가 설치되어 있으나, 다음과 같은 이유로 [Apache HTTP Server]를 설치하기로 결정했다. [시놀로지에서 Nginx 기반 웹페이지 리다이렉션 설정]를 참조하여 설정한 결과, 리다이렉션이 되지 않고 시놀로지 디스크 스테이션에도 접속이 되지 않았다. 이후, SSH로 접속하여 mustache 파일을 복원해준 결과, 디스크 스테이션에 정상적으로 접속할 수 있었다. 이 결과로, 시놀로지 디스크 스테이션에서 접근할 수 없는 파일을 수정하여 리다이렉션을 수행하는 것은 다른 서비스에도 영향을 미칠 수 있음을 인지했다. Apache HTTP Server는 [.htaccess 파일 기반의 리다이렉션]이 가능하다. Apache HTTP Server를 설치한 후, 웹 스테이션에서 HTTP 백엔드 서버를 바꿨다. (Nginx –> Apache HTTP Server) 다음으로, SSH로 시놀로지에 접속하여, 관리자 권한으로 web 폴더 내부에 .htaccess 파일을 생성한 후에 다음과 같이 작성했다. RewriteEngine on RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 참조한 블로그에서는 역방향 프록시도 설정해주었으나, [역방향 프록시를 적용한 리다이렉션 구조]를 확인한 결과, 구축하는 서비스가 Docker의 컨테이너 내부에서 동작하는 것이 아니기 때문에, 별도로 설정해주지 않았다.

블로그 저작 환경 구축

[블로그 저작 도구 선택]에 작성한 바와 같이, [Hugo]를 기반으로 개인 지식정리 블로그를 작성하기로 결정했다. 개인 PC 또는 시놀로지에 [Docker]를 설치하여 Hugo 기반 블로그 저작 환경을 구축할 수 있었는데, 다음과 같은 이유로 개인 PC에 블로그 저작 환경을 구축하기로 했다. 개인 지식 정리 블로그이기 때문에, 외부에서 포스트를 작성하는 경우가 없다. 정적 페이지 빌드 결과를 시놀로지에 업로드해서 블로그를 호스팅 할 계획이다. 시놀로지에서 [네이티브하게 블로그 호스팅]이 가능하다. 시놀로지 내부 Docker를 실행시켜 호스팅하는 방식은 네이티브하게 호스팅하는 방식보다 웹 서비스 성능이 떨어질 것으로 예상된다. (웹 서비스가 컨테이너 내부에서 동작하기 때문) Docker에서 [xdevbase/hugo-builder] 이미지를 기반으로 컨테이너를 만들었기 때문에, 블로그 저작 환경 구축에 특별한 어려움은 없었다. 다만, 블로그 저작 결과를 임시로 확인하기 위해서, 컨테이너에서 실행되고 있는 서버에 호스트의 웹 브라우저가 접속할 수 있도록 만들어줘야 했다. [컨테이너 내부에 Apache 서버가 실행되는 경우]에는 호스트에서 바인딩된 포트번호로 접속이 가능하다. 하지만, Hugo 서버를 일반적인 명령어 (hugo server -D)로 실행할 경우, 호스트에서 접속할 수 없다. 따라서, [호스트에서 접속 가능하도록 Hugo 서버를 실행시키는 방법]을 참조하여, 다음과 같은 명령어로 Hugo 서버를 실행시켰다. hugo server –baseURL “http://localhost” -p {컨테이너에서 바인딩된 포트번호} –bind {컨테이너의 IP주소} 호스트 웹 브라우저의 주소창에는 다음과 같이 입력해서 컨테이너에서 실행되는 Hugo 서버에 접속할 수 있다. http://localhost:{호스트에서 바인딩된 포트번호}

블로그 저작 도구 선택

최근에 자료 정리를 위해 시놀로지 NAS를 이용하여 파일서버를 구축했다. 시놀로지 NAS에 지식 정리를 위한 블로그 또한 구축하고자 마음먹었는데, HTML, CSS, Javascript 등의 웹 언어를 이용하여 서비스를 구축하기에는 많은 노력이 필요하다고 판단했다. 따라서, 비교적 간편하게 블로그를 구축하기 위한 도구를 다음 두 가지로 분류하여 비교했다. Contents Management System (CMS): WordPress, Shopify, Joomla 등… Static Site Generator: Jykill, Hugo 등… WordPress를 이용하여 블로그를 구축해본 경험이 있는데, 본인이 경험하거나 예상하는 CMS의 문제점을 다음과 같이 정리할 수 있었다. 보안이 취약하다. (WordPress 한정) 예를 들어, 기본 설정상태에서는 (URL)/wordpress/wp-admin.php 페이지로 접근하면 로그인을 시도할 수 있다. 또한, wp-config.php 파일에서는 DB명, 관리자ID, 암호 등을 모두 평문으로 관리한다. 이외에도, 제로데이 취약점이 발견된 경우에 공격이 들어올 수 있다. 플러그인과 소스코드 수정 등으로 위 취약점 일부를 보완할 수 있으나, 개인 블로그를 구축에 많은 노력을 기울이긴 어렵다고 판단했다. 웹 서비스를 위해 DBMS를 사용한다. 잘 관리하지 않으면, 보안이 취약할 수 있다. 시놀로지 OS 업데이트시, DB가 꼬이는 등의 문제로 인해 웹 서비스가 마비될 수 있다. 웹페이지 파일 뿐만 아니라 DB 파일 등도 모두 백업해야 하기 때문에, 백업 과정이 복잡하다. 백업 플러그인이 대부분 유료거나 부분유료이다. 반면, Static Site Generator는 다음과 같은 장점을 가진다. 오픈소스 기반인 도구가 많다. 무료로 제공하는 테마가 많다. 많은 사용자가 기능 추가 방법을 정리해두었다. 마크다운 위주의 컨텐츠 작성이 가능하다. 웹 서비스를 위해 DBMS가 필요하지 않다. 테마에서 제공하는 간단한 컨텐츠 작성 방법이 존재한다. 이외에도, 많은 사용자가 정리한 기능 추가 방법을 사용할 수 있다. 빌드 결과가 정적 페이지들로 이루어져있다. 비교적 보안 관리가 용이하다. 블로그 백업이 용이하다. Github Pages, Netlify 등의 정적 페이지 호스팅 서비스도 활용 가능하다. 위와 같은 분석 결과를 근거로, 블로그 저작에 Static Stie Generator를 사용하기로 했다. Static Site Generator 중 Hugo를 선택한 이유는 다음과 같이 정리할 수 있다. Hugo가 Jykill보다 빌드 속도가 빠르다. (대규모의 웹페이지를 작성하는 것이 아니기 때문에, 저작 도구 선택에 큰 영향은 미치지 않았다.) Hugo와 Jykill의 테마를 확인해본 결과, Hugo Refresh가 가장 마음에 들었다.