2020.07.16

C++ 프로그래밍의 감초··· ‘인기 라이브러리 8선’

Paul Krill | InfoWorld
C++ 개발자들은 윈도우 앱, 모바일 앱, 머신러닝(ML) 및 과학 앱 등을 개발할 때 아래와 같은 라이브러리를 애용한다.

범용 시스템 프로그래밍 언어인 C++은 1979년에 설계됐다. 이제 40살도 넘었다. 그래도 열기가 식기는커녕 여전히 여러 프로그래밍 인기 지수에서 정상에 가까운 자리를 차지하고 있다.

C++ 문턱이 낮은 데에는 이유가 있다. IDE 제작자, 편집자, 컴파일러, 테스트 프레임워크, 코드 품질, 기타 도구 등에 광범위하게 지원된다. 아울러 소프트웨어 개발자들은  C++ 애플리케이션 구축에 도움이 되는 훌륭한 라이브러리도 많이 이용할 수 있다. C++ 개발자들이 필수적으로 활용하는 8가지 라이브러리를 소개한다. 
 
Image Credit : Getty Images Bank

액티브 템플릿 라이브러리
마이크로소프트에서 나온 액티브 템플릿 라이브러리(ATL)는 COM(Common Object Model) 개체 구축을 위한 C++ 클래스 모음이다. 이중 인터페이스, 표준 COM 계산자 인터페이스, 연결점, 액티브엑스(ActiveX) 컨트롤과 같은 COM 기능을 지원한다. 비주얼 스튜디오 IDE와 함께 이용 가능한 ATL은 싱글 스레드 개체와 아파트 모델 개체, 프리 스레드 모델 개체 구축에 사용할 수 있다. 아니면, 프리 스레드 개체와 아파트 모델 개체를 둘 다 구축할 때 사용할 수 있다.

Asio C++ 라이브러리
Asio C++ 라이브러리는 네트워크 및 로우레벨 I/O 프로그래밍에 사용되며 일관된 비동기 모델을 제공한다. 동시성과 C++ 네트워킹, 그리고 다른 종류의 I/O를 위한 기본 구성요소를 제공하는 Asio는 스마트폰 앱에서부터 게임, 고도의 쌍방향 웹사이트와 실시간 거래 시스템에 이르기까지 다양한 애플리케이션에 사용되어 왔다. 

Asio를 사용하는 프로젝트로는 WebSocketPP 라이브러리와 루아(Lua) 언어용 DDT3 원격 디버거 등이 있다. Asio는 부스트 소프트웨어 라이센스 하에 무료 오픈 소스로 이용 가능하며 리눅스, 윈도우, 맥OS, 프리BSD에서 지원된다.

아이젠
아이젠(Eigen)은 선형 대수(linear algebra)용 C++ 템플릿 라이브러리로서, 행렬, 벡터, 수치 해법 및 관련 알고리즘이 포함되어 있다. 작은 고정 행렬에서부터 임의적으로 큰 밀집 행렬에 이르기까지 모든 행렬 크기가 지원된다. 알고리즘은 신뢰성에 맞춰 선택된다. 표준 숫자 형식은 모두 지원된다. 

속도를 위해 아이젠은 표현식 템플릿을 통해 지능적으로 임시 파일을 제거하고 지연 연산(lazy evaluation)을 실행한다. 모질라 퍼블릭 라이센스 2 하에서 무료로 이용 가능하고 아이젠 프로젝트 페이지에서 내려 받을 수 있는 아이젠은 C++ 지지자들로부터 프로그래머들에게 자연스럽고 표현력이 좋으며 깔끔하다는 평을 받는 API로 설치되어 왔다. 아이젠의 테스트조는 신뢰성 확인을 위해 다수의 컴파일러를 대상으로 실행된 바 있다.

플로트X
플로트 익스텐디드(Float eXtended)라고도 하는 플로트X(FloatX)는 저정밀도 부동 소수점 형식 에뮬레이션을 위한 헤더 전용 라이브러리이다. C++ 컴파일러와 네이티브하게 호환되면서도 파이썬이나 포트란 같은 다른 언어로 호출할 수 있다. 부동 소수점 형식은 네이티브한 단정밀도와 배정밀도 그 이상으로 확장된다. 

제공되는 템플릿 형식으로 사용자는 부동소수점 숫자의 주요 부분 뿐만 아니라 지수에 사용되는 비트의 개수를 선택할 수 있다. 플로트X는 정밀도를 낮춘 부동소수점 형식의 에뮬레이션을 위한 플렉스플로트(FlexFloat) 라이브러리 개념을 기반으로 하고 있으나 C로 플렉스플로트 기능의 상위집합을 구현하며 C++ 래퍼(wrapper)를 제공한다. 플로트X는 오픈 트랜스프리시전 컴퓨팅 계획에서 나온 것으로 아파치 라이센스 2.0 하에서 무료로 이용가능하다. 

오픈CV
오픈소스 컴퓨터 비전 라이브러리라고도 하는 오픈CV는 컴퓨터 비전 및 ML 라이브러리로서 C++로 네이티브하게 작성되었으며 BSD 라이센스 하에서 이용가능하다. 오픈CV의 구축 목적은 컴퓨터 비전 애플리케이션용 공통 인프라를 제공하고 상용 제품에서의 기계 인식 사용에 박차를 가하는 것이다. 

안면 인식, 개체 탐지, 개체 분류, 3D 모델 추출, 이미지 검색 등등에 최적화된 알고리즘이 2,500개가 넘는 오픈CV는 4만 7,000명 이상의 사용자 커뮤니티를 구축했다. 오픈CV 프로젝트 웹사이트에서 이용 가능한 오픈CV 라이브러리는 C++, 자바, 파이썬, 매트랩 인터페이스를 제공하며, 윈도우, 리눅스, 안드로이드, 맥OS를 지원한다. CUDA 및 오픈CL 인터페이스가 개발 중이다.

Poco C++ 라이브러리
C++ 개발을 간단히 할 목적의 Poco(포터블 컴포턴트 ; Portable Components) C++ 라이브러리는 데스크톱과 서버에서부터 모바일 및 IoT 장치에 이르는 다양한 시스템에서 실행될 인터넷 및 네트워크 애플리케이션을 구축하기 위한 교차 플랫폼 C++ 라이브러리이다. ML 또는 데이터 분석용 REST API로 마이크로서비스를 구축할 때도 사용할 수 있다. Poco 라이브러리는 자바 클래스 라이브러리, 마이크로소프트 .NET 프레임워크나 애플 코코아와 개념이 유사하다.

개발자들은 Poco 라이브러리를 이용해, SQL 데이터베이스, 레디스 또는 몽고DB에 말을 거는 애플리케이션 서버를 C++으로 구축할 수 있다. 또는, 클라우드 백엔드에 말을 거는 IoT 장치용 소프트웨어를 구축할 수 있다. Poco 라이브러리 기능 중에는 캐시 프레임워크, HTML 폼 처리, 파일 전송용 FTP 클라이언트, HTTP 서버 및 클라이언트 등이 있다. Poco 라이브러리는 부스트 소프트웨어 라이센스 하에서 무료로 이용 가능하고 깃허브에서 내려 받을 수 있다

윈도우 템플릿 라이브러리
원래 마이크로소프트에서 (2004년부터) 나온 윈도우 템플릿 라이브러리(WTL)는 가벼운 윈도우 애플리케이션 및 UI 구성요소 구축을 위한 오픈소스 라이브러리이다. 마이크로소프트 파운데이션 클래스 툴킷의 대안으로 자리매김한 WTL은 ATL을 확장하며, 제어장치, 대화, 프레임 창, GDI 개체를 위한 클래스를 제공한다.

Wt
Wt는 최신 C++로 된 웹 GUI 라이브러리로서 개발자가 자바스크립트를 작성할 필요 없이 위젯으로 쌍방향 웹 UI를 구축할 수 있게 해 준다. 서버측 솔루션인 Wt는 요청 처리와 페이지 렌더링을 수행하며, 내장 보안 기능, PDF 렌더링, 2D 및 3D 페인팅 시스템, 개체 관계형 매핑 라이브러리, 차트 라이브러리, 인증 프레임워크를 제공한다. 핵심 라이브러리는 오픈 소스이며, 리눅스, 유닉스 또는 윈도우에 배치 가능한 혼합형 싱글 페이지 프레임워크를 제공한다.

소프트웨어 엔지니어링 회사 엠웹(Emweb)에서 개발한 Wt는 일반 HTML 사용자 에이전트뿐만 아니라 HTML5 및 HTML4 브라우저와 호환된다. 또한 써드파티 자바스크립트 라이브러리와 통합 가능하다. Wt를 사용하면, 애플리케이션은 푸시 버튼같은 일반 위젯에서부터 전체 블로그 위젯 같은 전문 위젯에 이르는 위젯 계층으로 정의된다. 위젯 트리는 브라우저에 HTML/자바스크립트로 렌더링 된다. Wt는 프로젝트 웹 페이지에서 내려 받을 수 있다. 오픈소스 사용 조건과 상용 사용 조건 둘 다 이용 가능하다. ciokr@idg.co.kr
 



2020.07.16

C++ 프로그래밍의 감초··· ‘인기 라이브러리 8선’

Paul Krill | InfoWorld
C++ 개발자들은 윈도우 앱, 모바일 앱, 머신러닝(ML) 및 과학 앱 등을 개발할 때 아래와 같은 라이브러리를 애용한다.

범용 시스템 프로그래밍 언어인 C++은 1979년에 설계됐다. 이제 40살도 넘었다. 그래도 열기가 식기는커녕 여전히 여러 프로그래밍 인기 지수에서 정상에 가까운 자리를 차지하고 있다.

C++ 문턱이 낮은 데에는 이유가 있다. IDE 제작자, 편집자, 컴파일러, 테스트 프레임워크, 코드 품질, 기타 도구 등에 광범위하게 지원된다. 아울러 소프트웨어 개발자들은  C++ 애플리케이션 구축에 도움이 되는 훌륭한 라이브러리도 많이 이용할 수 있다. C++ 개발자들이 필수적으로 활용하는 8가지 라이브러리를 소개한다. 
 
Image Credit : Getty Images Bank

액티브 템플릿 라이브러리
마이크로소프트에서 나온 액티브 템플릿 라이브러리(ATL)는 COM(Common Object Model) 개체 구축을 위한 C++ 클래스 모음이다. 이중 인터페이스, 표준 COM 계산자 인터페이스, 연결점, 액티브엑스(ActiveX) 컨트롤과 같은 COM 기능을 지원한다. 비주얼 스튜디오 IDE와 함께 이용 가능한 ATL은 싱글 스레드 개체와 아파트 모델 개체, 프리 스레드 모델 개체 구축에 사용할 수 있다. 아니면, 프리 스레드 개체와 아파트 모델 개체를 둘 다 구축할 때 사용할 수 있다.

Asio C++ 라이브러리
Asio C++ 라이브러리는 네트워크 및 로우레벨 I/O 프로그래밍에 사용되며 일관된 비동기 모델을 제공한다. 동시성과 C++ 네트워킹, 그리고 다른 종류의 I/O를 위한 기본 구성요소를 제공하는 Asio는 스마트폰 앱에서부터 게임, 고도의 쌍방향 웹사이트와 실시간 거래 시스템에 이르기까지 다양한 애플리케이션에 사용되어 왔다. 

Asio를 사용하는 프로젝트로는 WebSocketPP 라이브러리와 루아(Lua) 언어용 DDT3 원격 디버거 등이 있다. Asio는 부스트 소프트웨어 라이센스 하에 무료 오픈 소스로 이용 가능하며 리눅스, 윈도우, 맥OS, 프리BSD에서 지원된다.

아이젠
아이젠(Eigen)은 선형 대수(linear algebra)용 C++ 템플릿 라이브러리로서, 행렬, 벡터, 수치 해법 및 관련 알고리즘이 포함되어 있다. 작은 고정 행렬에서부터 임의적으로 큰 밀집 행렬에 이르기까지 모든 행렬 크기가 지원된다. 알고리즘은 신뢰성에 맞춰 선택된다. 표준 숫자 형식은 모두 지원된다. 

속도를 위해 아이젠은 표현식 템플릿을 통해 지능적으로 임시 파일을 제거하고 지연 연산(lazy evaluation)을 실행한다. 모질라 퍼블릭 라이센스 2 하에서 무료로 이용 가능하고 아이젠 프로젝트 페이지에서 내려 받을 수 있는 아이젠은 C++ 지지자들로부터 프로그래머들에게 자연스럽고 표현력이 좋으며 깔끔하다는 평을 받는 API로 설치되어 왔다. 아이젠의 테스트조는 신뢰성 확인을 위해 다수의 컴파일러를 대상으로 실행된 바 있다.

플로트X
플로트 익스텐디드(Float eXtended)라고도 하는 플로트X(FloatX)는 저정밀도 부동 소수점 형식 에뮬레이션을 위한 헤더 전용 라이브러리이다. C++ 컴파일러와 네이티브하게 호환되면서도 파이썬이나 포트란 같은 다른 언어로 호출할 수 있다. 부동 소수점 형식은 네이티브한 단정밀도와 배정밀도 그 이상으로 확장된다. 

제공되는 템플릿 형식으로 사용자는 부동소수점 숫자의 주요 부분 뿐만 아니라 지수에 사용되는 비트의 개수를 선택할 수 있다. 플로트X는 정밀도를 낮춘 부동소수점 형식의 에뮬레이션을 위한 플렉스플로트(FlexFloat) 라이브러리 개념을 기반으로 하고 있으나 C로 플렉스플로트 기능의 상위집합을 구현하며 C++ 래퍼(wrapper)를 제공한다. 플로트X는 오픈 트랜스프리시전 컴퓨팅 계획에서 나온 것으로 아파치 라이센스 2.0 하에서 무료로 이용가능하다. 

오픈CV
오픈소스 컴퓨터 비전 라이브러리라고도 하는 오픈CV는 컴퓨터 비전 및 ML 라이브러리로서 C++로 네이티브하게 작성되었으며 BSD 라이센스 하에서 이용가능하다. 오픈CV의 구축 목적은 컴퓨터 비전 애플리케이션용 공통 인프라를 제공하고 상용 제품에서의 기계 인식 사용에 박차를 가하는 것이다. 

안면 인식, 개체 탐지, 개체 분류, 3D 모델 추출, 이미지 검색 등등에 최적화된 알고리즘이 2,500개가 넘는 오픈CV는 4만 7,000명 이상의 사용자 커뮤니티를 구축했다. 오픈CV 프로젝트 웹사이트에서 이용 가능한 오픈CV 라이브러리는 C++, 자바, 파이썬, 매트랩 인터페이스를 제공하며, 윈도우, 리눅스, 안드로이드, 맥OS를 지원한다. CUDA 및 오픈CL 인터페이스가 개발 중이다.

Poco C++ 라이브러리
C++ 개발을 간단히 할 목적의 Poco(포터블 컴포턴트 ; Portable Components) C++ 라이브러리는 데스크톱과 서버에서부터 모바일 및 IoT 장치에 이르는 다양한 시스템에서 실행될 인터넷 및 네트워크 애플리케이션을 구축하기 위한 교차 플랫폼 C++ 라이브러리이다. ML 또는 데이터 분석용 REST API로 마이크로서비스를 구축할 때도 사용할 수 있다. Poco 라이브러리는 자바 클래스 라이브러리, 마이크로소프트 .NET 프레임워크나 애플 코코아와 개념이 유사하다.

개발자들은 Poco 라이브러리를 이용해, SQL 데이터베이스, 레디스 또는 몽고DB에 말을 거는 애플리케이션 서버를 C++으로 구축할 수 있다. 또는, 클라우드 백엔드에 말을 거는 IoT 장치용 소프트웨어를 구축할 수 있다. Poco 라이브러리 기능 중에는 캐시 프레임워크, HTML 폼 처리, 파일 전송용 FTP 클라이언트, HTTP 서버 및 클라이언트 등이 있다. Poco 라이브러리는 부스트 소프트웨어 라이센스 하에서 무료로 이용 가능하고 깃허브에서 내려 받을 수 있다

윈도우 템플릿 라이브러리
원래 마이크로소프트에서 (2004년부터) 나온 윈도우 템플릿 라이브러리(WTL)는 가벼운 윈도우 애플리케이션 및 UI 구성요소 구축을 위한 오픈소스 라이브러리이다. 마이크로소프트 파운데이션 클래스 툴킷의 대안으로 자리매김한 WTL은 ATL을 확장하며, 제어장치, 대화, 프레임 창, GDI 개체를 위한 클래스를 제공한다.

Wt
Wt는 최신 C++로 된 웹 GUI 라이브러리로서 개발자가 자바스크립트를 작성할 필요 없이 위젯으로 쌍방향 웹 UI를 구축할 수 있게 해 준다. 서버측 솔루션인 Wt는 요청 처리와 페이지 렌더링을 수행하며, 내장 보안 기능, PDF 렌더링, 2D 및 3D 페인팅 시스템, 개체 관계형 매핑 라이브러리, 차트 라이브러리, 인증 프레임워크를 제공한다. 핵심 라이브러리는 오픈 소스이며, 리눅스, 유닉스 또는 윈도우에 배치 가능한 혼합형 싱글 페이지 프레임워크를 제공한다.

소프트웨어 엔지니어링 회사 엠웹(Emweb)에서 개발한 Wt는 일반 HTML 사용자 에이전트뿐만 아니라 HTML5 및 HTML4 브라우저와 호환된다. 또한 써드파티 자바스크립트 라이브러리와 통합 가능하다. Wt를 사용하면, 애플리케이션은 푸시 버튼같은 일반 위젯에서부터 전체 블로그 위젯 같은 전문 위젯에 이르는 위젯 계층으로 정의된다. 위젯 트리는 브라우저에 HTML/자바스크립트로 렌더링 된다. Wt는 프로젝트 웹 페이지에서 내려 받을 수 있다. 오픈소스 사용 조건과 상용 사용 조건 둘 다 이용 가능하다. ciokr@idg.co.kr
 

X