안경잡이개발자

728x90
반응형

C++ Boost.Asio 개요 및 개발환경 구축하기

나동빈


※ C++ Boost.Asio 개요 ※


  분산 소프트웨어컴퓨터 네트워크를 통해 통신하는 애플리케이션을 의미합니다. 흔히 클라이언트가 서버로 정보를 요청(Request)하고, 서버는 그러한 정보를 응답(Response)하는 '서버 클라이언트 구조'가 대표적인 분산 소프트웨어의 형태입니다.


  분산 소프트웨어를 개발할 때 가장 많이 사용되는 프로토콜은 TCP와 UDP입니다. TCP는 신뢰성 있는 프로토콜로 자체적인 오류 처리 매커니즘을 포함합니다. 반면에 UDP는 신뢰성이 없는 프로토콜로 통신하기 전에 연결을 수립하지 않아도 빠른 통신이 가능합니다.


  이러한 배경에서 등장한 Boost.AsioC++로 개발된 네트워크 프로그래밍 라이브러리입니다. 다양한 플랫폼에 분산형 애플리케이션을 개발하기 위한 목적으로 적용할 수 있습니다. Boost.Asio를 사용하면 비동기 IO 프로그래밍을 쉽게 구현할 수 있으며 소스코드는 간결하되 성능이 우수하다는 장점이 있습니다. 결과적으로 고성능 네트워크 프로그램을 개발하고자 할 때 자주 사용되는 기술 스택이라고 이해할 수 있습니다.


※ C++ Boost.Asio 개발환경 구축하기 ※


  윈도우(Windows) 운영체제를 기준으로 C++ Boost.Asio 개발환경을 구축하는 방법에 대해 소개하고자 합니다.


  ◇ Boost 라이브러리 공식 웹 사이트: https://www.boost.org



  공식 웹 사이트에 접속한 뒤에 'Downloads' 영역에서 최신 버전의 링크로 들어갈 수 있습니다.



  이후에 최신 버전의 Boost 라이브러리의 압축 파일을 다운로드 받습니다.



  저는 위와 같이 C 드라이브 내에 압축을 풀어주었습니다.



  이후에 Boost Asio 라이브러리를 빌드(Build)하기 위해 먼저 부트스트랩 프로그램을 실행합니다.



  부트스트랩 프로그램을 실행하면 빌드 전용 실행 파일은 b2.exe가 생성됩니다. 이제 빌드를 수행해주면 됩니다.


b2 -j4 toolset=msvc-14.1 address-model=64 variant=debug,release link=static threading=multi  stage

b2 -j4 toolset=msvc-14.1 address-model=32 variant=debug,release link=static threading=multi  stage


  위와 같이 빌드를 진행해주시면 64비트 전용 및 32비트 소프트웨어에 모두 적용할 수 있는 라이브러리가 생성됩니다. 또한 참고로 toolset에 들어가는 인자 값은 Visual Studio의 버전에 따라서 조금씩 차이가 있습니다.


  Visual Studio 2012: msvc-11.0

  Visual Studio 2013: msvc-12.0

  Visual Studio 2015: msvc-14.0

  Visual Studio 2017: msvc-14.1




  빌드가 모두 진행되면 다음과 같이 stage 폴더에 lib 폴더 및 라이브러리 파일들이 생성됩니다.



  이제 Visual Studio에서 생성된 Boost 라이브러리 파일들을 사용할 수 있도록 설정해봅시다.



  프로젝트를 생성하고, 프로젝트 이름을 클릭한 뒤에 '보기' -> '속성 페이지' 탭을 열어줍니다.



  먼저 '링커' -> '추가 라이브러리 디렉터리'에서 라이브러리를 넣어서 /stage/lib 폴더를 링크해주시면 됩니다.



  이후에 전체 Boost 라이브러리 폴더 자체를 참조 디렉터리로 넣어주셔야 합니다.



  'VC++ 디렉터리' -> '포함 디렉터리'에 전체 라이브러리 폴더를 넣어주시면 됩니다.



  이제 라이브러리가 모두 적용이 되었으므로 Visual Studio에서 이를 이용할 수 있습니다.


※ Boost.Asio 라이브러리 Hello World 예제 ※


#include <iostream>

#include <boost/asio.hpp>

#include <boost/date_time/posix_time/posix_time.hpp>


int main()

{

boost::asio::io_service io;

boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));

t.wait();


std::cout << "Hello, world!" << std::endl;

system("pause");


return 0;

}


  위 예제는 5초간 타이머(Timer) 기능으로 동작을 멈춘 뒤에 'Hello World'를 출력하는 예제입니다. 실행 결과는 다음과 같습니다.


728x90
반응형