C++ Boost.Asio 개요 및 개발환경 구축하기
C++ Boost.Asio 개요 및 개발환경 구축하기
나동빈
※ C++ Boost.Asio 개요 ※
분산 소프트웨어란 컴퓨터 네트워크를 통해 통신하는 애플리케이션을 의미합니다. 흔히 클라이언트가 서버로 정보를 요청(Request)하고, 서버는 그러한 정보를 응답(Response)하는 '서버 클라이언트 구조'가 대표적인 분산 소프트웨어의 형태입니다.
분산 소프트웨어를 개발할 때 가장 많이 사용되는 프로토콜은 TCP와 UDP입니다. TCP는 신뢰성 있는 프로토콜로 자체적인 오류 처리 매커니즘을 포함합니다. 반면에 UDP는 신뢰성이 없는 프로토콜로 통신하기 전에 연결을 수립하지 않아도 빠른 통신이 가능합니다.
이러한 배경에서 등장한 Boost.Asio는 C++로 개발된 네트워크 프로그래밍 라이브러리입니다. 다양한 플랫폼에 분산형 애플리케이션을 개발하기 위한 목적으로 적용할 수 있습니다. 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'를 출력하는 예제입니다. 실행 결과는 다음과 같습니다.
'C++ Boost.Asio' 카테고리의 다른 글
C++ Boost.Asio를 활용한 동기식 TCP 날짜 출력 프로그램 (0) | 2018.08.15 |
---|---|
C++ Boost.Asio를 위한 기초 지식 학습하기 (0) | 2018.08.15 |