'네트워크'에 해당되는 글 1건

  1. 2009.09.03 ACE(ADAPTIVE Communication Environment)
1. 개요
ADAPTIVE Communication Environment(ACE)는 네트웍 어플리케이션에서의 동시성(Concurrent)과 I/O를 효율적이고 유연하게 제어하기 위한 많은 핵심 패턴들을 제공해주는 오픈소스 기반 크로스 플랫폼 C++ 객체지향 프레임워크 입니다.

(The ADAPTIVE Communication Environment (ACE) is a freely available, open-source object-oriented (OO) framework that implements many core patterns for concurrent communication software. ACE provides a rich set of reusable C++ wrapper facades and framework components that perform common communication software tasks across a range of OS platforms. The communication software tasks provided by ACE include event demultiplexing and event handler dispatching, signal handling, service initialization, interprocess communication, shared memory management, message routing, dynamic (re)configuration of distributed services, concurrent execution and synchronization.)

ACE에 의해 제공되는 네투웍 소프트웨어 기능들은 다음과 같습니다.

  • 이벤트 다중수신 (event demultiplexing)
  • 이벤트 핸들러 디스페칭 (event handler dispatching)
  • 시그널 핸들링 (signal handling)
  • 서비스 초기화 (service initialization)
  • 프로세스간 통신 (interprocess communication)
  • 공유메모리 관리 (shared memory management)
  • 메세지 라우팅 (message routing)
  • 분산 서비스들에 대한 동적 (재)설정 (dynamic (re)configuration of distributed services)
  • 동시실행과 동기화 (concurrent execution and synchronization) 

ACE는 고성능 실시간 통신 서비스와 어플리케이션을 개발하는 데에 촛점이 맞춰져 있습니다. 이것은 프로세스간 통신, 이벤트 다중수신, 명시적 동적 링킹, 동시처리방식의 객체지향 네트워크 어플리케이션과 서비스의 개발을 단순하게 만들어줍니다. 이에 더하여 ACE는 시스템 설정과 동적으로 연결된 서비스들에 의한 실시간 재설정, 프로세스와 쓰레드상에서 서비스들을 실행하는 것을 자동화해주기 까지 합니다.

원문 링크: http://www.cs.wustl.edu/~schmidt/ACE-overview.html



2. ACE 빌드하기
먼저 ACE의 공식 사이트에서 ACE를 다운로드 받습니다. 다운로드 받은 파일을 압축을 풀고 내용은 보면 아래와 같은 화면을 볼 수 있습니다.


ace라는 폴더로 들어가 아래와 같이 config.h라는 파일을 추가해 줍니다.


config.h파일은 내용은 다음과 같습니다.
//#define ACE_AS_STATIC_LIBS 1
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
//#define ACE_NO_INLINE 1
#include "ace/config-win32.h"
ACE_AS_STATIC_LIBS는 ACE를 정적 라이브러리로 빌드할때 필요한 플래그 입니다.
ACE를 STL과 함께 사용하기 위해 ACE_HAS_STANDARD_CPP_LIBRARY 플래그를 정의합니다.
ACE_NO_INLINE 는 메소드 인라인처리를 무효화하기 위한 플래그 입니다.
config.h파일에서 include하는 파일은 빌드 시스템에 따라 다른데 여기서는 Windows에서 빌드하므로 config-win32.h를 추가합니다.
다시 상위폴더로 돌아와 Visual Studio 솔루션 파일을 열어 소스코드를 빌드할 준비를 합니다.
예제에서는 ACE_vc8라는 솔루션 파일을 오픈합니다.(프로젝트가 엄청 많아서 솔루션을 오픈하는데도 상당한 시간이 걸립니다.)
솔루션 파일을 열면 아래 그림과 같은 많은 프로젝트가 존재하는데 가장 위에서 ACE라는 프로젝트를 발견할 수 있습니다.
자 이제 ACE프로젝트를 빌드하면 됩니다.
빌드가 성공적으로 이루어지면 아래 그림과 같이 lib라는 폴더에 공유라이브러리가 성공적으로 생성된 것을 확인할 수 있습니다.
(d접미사가 붙은 라이브러리는 디버그용임을 나타냅니다.)

3.  ACE에 대한 개인적인 느낌
ACE는 크로스플랫폼 시스템 어플리케이션을 개발하는데 많은 도움을 줄 수 있는 매우 유용한 프레임워크 입니다. ACE는 운영체제의 다양한 시스템 API를 ACE 프레임워크 내부로 감추고 외부로 표준화된 인터페이스를 제공합니다. 일반적으로 많은 시스템 어플리케이션들은 각 운영체제에 매우 종속적이기 때문에 다른 플랫폼으로 이식하는 작업은 상당히 어려운데 ACE의 표준화된 인터페이스를 사용해 작성된 시스템 어플리케이션은 별도의 수정없이 다른 플랫폼으로의 이식이 가능하다라는 장점이 있습니다. 이것은 마치 Java의 JVM과 비슷하게 보일 수 있습니다. (하지만 ACE는 Java의 JVM과는 완전히 다른 개념을 가지며 서로 비교할 수 있는 대상이 아닙니다.) 때로는 운영체제간의 차이로 인해 특정 기능을 지원하는 시스템이 존재할 수 있습니다. 이런 경우 ACE는 자체적으로 특정 기능을 수행하기 위한 시뮬레이션 코드를 실행하게 되며 이것은 마치 시스템에서 해당 기능이 수행되는것과 같은 효과를 보입니다.(물론 이럴경우 퍼포먼스는 떨어지게 마련입니다.) 

또한 ACE 자체는 검증된 수많은 패턴으로 이루어진 객체지향 프레임워크로서 시스템 아키텍쳐를 학습하기 위한 훌륭한 레퍼런스로 활용될 수 있습니다. ACE가 담고있는 수많은 패턴과 철학은 Pattern-Oriented Software Architecture Volume 2에 집약되 있는데... 문제는 이 책을 읽어내기가 엄청나게 어렵습니다... ㅠ

ACE가 많은 장점을 지니고 있는 훌륭한 객체지향 프레임워크임에는 누구도 부인할 수 없을 것입니다. 다만, 이런 훌륭한 ACE를 실무에 사용하기 위해서는 사전 배경지식이 만만치 않으며 초반 학습곡선이 매우 가파르기 때문에 쉽게 익숙해지기가 어렵습니다. 게다가 국내에 소개된 ACE서적은 단 3권으로, ACE의 매우 방대한 내용을 생각해볼 때 단 3권의 서적으로 ACE의 많은 내용을 담아내기에는 무리가 있습니다.






'프로그래밍 > 오픈소스' 카테고리의 다른 글

SQLite with Eclipse  (1) 2010.05.06
SWF파일 분석 도구  (0) 2010.04.13
boost library 설치  (0) 2010.03.17
libcurl 사용하기  (0) 2010.03.15
SQLite  (3) 2009.09.11
ACE(ADAPTIVE Communication Environment)  (0) 2009.09.03
MySQL++  (0) 2009.08.21
C++ 암복호화 라이브러리 Crypto++  (0) 2009.08.20
C/C++ XML Parser TinyXml  (1) 2009.08.20
HttpClient와 Jericho Parser를 이용한 HTML 파싱  (0) 2009.07.28
GeoIP를 이용한 IP대역별 국가코드 검색  (1) 2009.07.07
Posted by devop

댓글을 달아 주세요