* 확실하지 않은 단어나 용어는 그냥 영문으로 적습니다. _ 언제나처럼 초날림 번역이므로 너무하다 싶은 분은 게시판에 항의(?)해주세요~ ^.^a
- ACE가 무엇인지 궁굼하신 분들에게 조금이나마 도움이 되었음 합니다. ^^;
- 원문링크 :
http://www.cs.wustl.edu/~schmidt/ACE-overview.html
ACE의 개요 #
ADAPTIVE Communication Environment(ACE)는 동시처리방식의(concurrent) 통신 소프트웨어의 많은 핵심 패턴들을 구현한, 공개로 배포되는 오픈소스기반의 객체지향 프레임워크입니다. 또한 ACE는 크로스플렛폼 기반의 재사용가능한 C++ wrapper facade 클래스들과 일반적인 통신 소프트웨어 상에서 실행되는 프레임워크 요소들의 모음입니다. (역주 - wrapper facade는 기존의 API함수들이 존재하는 시스템일 경우 좀더 객체지향적으로 에러처리나 함수의 정리등을 해놓은 클래스 패턴을 말합니다. Win32 API의 대표적인 wrapper facade는 MFC를 들 수 있습니다.)
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는 상업적으로는
Riverace를 통하여 오픈소스 비지니스 모델을 사용하여 지원되고 있습니다. 게다가 현재까지 ACE 개발팀의 많은 맴버들이 The ACE ORB (TAO)를 구현하기위해 노력하고 있습니다.
Riverace를 통하여 오픈소스 비지니스 모델을 사용하여 지원되고 있습니다. 게다가 현재까지 ACE 개발팀의 많은 맴버들이 The ACE ORB (TAO)를 구현하기위해 노력하고 있습니다.
ACE를 사용하는데 있어 잇점은? #
ACE를 사용하면 얻을 수 있는 많은 잇점들중 몇가지는 다음과 같습니다.
- 이식성의 증가 - ACE 컴퍼넌트들은 하나의 운영체계상에서의 동시처리방식의 네트워크 어플리케이션들을 작성하기 쉽게 해주며, 수많은 다른 운영체계로 그것을 포팅하는 작업을 손쉽게 해줍니다. 게다가, ACE는 오픈소스이고 공짜이기 때문에 여러분은 특별한 운영체계나 컴파일러 설정에 제한받을 것을 우려할 필요도 없습니다.
- 소프트웨어 품질의 증가 - ACE 컴퍼넌트는 통신 소프트웨어의 핵심 품질요소(융통성, 확장성, 재사용성, 모듈화등등)들을 향상시키기 위해 많은 핵심 패턴을 사용해서 디자인되었습니다.
- 효율과 예측력(predictability)의 증가 - ACE는 넓은 분야의 어플리케이션 QoS 요구를 지원하기 위해 조심스럽게 디자인되었습니다. 이런 요구에는 딜레이에 민감한 어플리케이션을 위한 낮은 지연(latency), 대역폭에 민감한 어플리케이션을 위한 높은 성능, 실시간 어플리케이션을 위한 예측능력등이 있습니다.
- 높은 수준의 표준 미들웨어로써 일찌기 변화를 시도 -- ACE는 The ACE ORB (TAO)에서 사용된 재사용가능한 컴퍼넌트와 패턴들을 제공합니다. TAO는 실시간 시스템과 고성능에 최적화된 CORBA의 오픈소스 표준을 따르는 구현물입니다. 따라서, 협력적인 미들웨어 솔루션을 제공할 목적으로 ACE와 TAO는 서로 궁합이 잘맞도록 구현되어있습니다.
ACE OS 어뎁터 레이어 #
이 레이어는 직접적으로 C로 작성된 고유 운영체계 API들의 최상위에 존재합니다. 이것은 "POSIX 호환" OS 어뎁터 계층을 제공합니다. 이 계층의 역할은 다음과 같은 운영체계 API들과 관련된 플렛폼-의존적인 특성들로부터 ACE내의 다른 레이어와 컴퍼넌트들을 보호하는 것 입니다.
- 동시처리와 동기화 - 멀티쓰레딩, 멀티프로세싱, 동기화에 관련된 운영체계 API
- 프로세스간 통신(IPC)와 공유 메모리 - 지역(local)/원격(remote) IPC와 공유 메모리에 대한 운영체계 API
- 이벤트 다중수신 체계 - 동기적/비동기적인 입출력 다중수신, 타이머, 시그널, 동기화의 이벤트들을 위한 운영체계 API
- 명시적 동적 링킹 - 어플리케이션 서비스들이 설치시 혹은 실행시간에 재설정하는 것을 허락하는 기능
- 화일 시스템 구조 - 화일이나 디렉토리를 관리하기 위한 시스템 API
- 모든 Win32 운영체계 - 심지어 WinCE도 가능. VC, C++ Builder, Visual Age에서 가능
- Mac OS X
- 거의 모든 UNIX 계열 운영체계 - Solaris, SGI IRIX, DG/UX, HP-UX, Tru64UNIX, AIX, DG/UX, UnixWare, SCO, Debian Linux, RedHat Linux, FreeBSD, NetBSD 등등
- 실시간 운영체제 - LynxOS, VxWorks, ChorusOS, QnX Neutrino, RTEMS, OS9, PSoS
- 기타 운영체제 - OpenVMS, MVS OpenEdition, CRAY UNICOS
운영체계 인터페이스를 위한 C++ Wrapper Facade #
위에서는 ACE의 운영체계 어뎁테이션 계층덕분에 이식가능한 C++ 어플리케이션을 개발하는 것이 가능하다는 것을 보았을 것 입니다. 어쨌거나, 대부분의 ACE 프로그래머들은 위 그림에 나타나있는 C++ wrapper facade 계층을 사용합니다. ACE C++ wrapper facade들은 내장 운영체계의 동시처리, 통신, 메모리관리, 이벤트 다중수신, 동적 링킹, 화일시스템 API들을 개선하고 추상화시킨 안전한 C++ 인터페이스를 제공함으로써 소프트웨어 개발을 단순화 시켜줍니다. 어플리케이션은 다음에 나열한 컴퍼넌트들을 선택적으로 상속받거나 조합하거나 인스턴스화하는 것에 의해 이 wrapper들을 결합하거나 조립할수 있습니다:
- 동시처리(Concurrency), 동기화(synchronization) 컴퍼넌트 - ACE abstracts native OS multi-threading and multi-processing mechanisms like mutexes and semaphores to create higher-level OO concurrency abstractions like Active Objects and Polymorphic Futures.
- IPC and filesystem components -- The ACE C++ wrappers encapsulate local and/or remote IPC mechanisms, such as sockets, TLI, UNIX FIFOs and STREAM pipes, and Win32 Named Pipes. In addition, the ACE C++ wrappers encapsulate the OS filesystem APIs.
- Memory management components -- The ACE memory management components provide a flexible and extensible abstraction for managing dynamic allocation and deallocation of interprocess shared memory and intraprocess heap memory.
여기에 덧붙여서 수행상의 과부하를 최소화하거나 제거하기위한 많은 테크닉을 채택하고 있습니다. 예를 들어, ACE는 메서드 호출 과부하를 제거하기 위해 광범위하게 C++ inline을 사용하고 있습니다. 실행상의 중요한 wrapper들(소켓의 send/recv등등)에는 가상 메소드의 사용을 피하는 것도 한 예라고 할 수 있습니다.
프레임워크 #
ACE는 저수준의 C++ wrapper facade들을 개선하고 통합하는 또한 보다 높은 레벨의 네트워크 프로그래밍 프레임워크를 가지고 있습니다. 이 프레임워크는 동시처리방식의 분산된 서비스의 동적 환경 설정을 어플리케이션에게 제공합니다. ACE의 프레임워크 부분은 다음 컴퍼넌트들을 담고 있습니다 :
- 이벤트 다중수신 컴퍼넌트 - ACE의 Reactor와 Proactor는 확장가능한, 객체지향 다중수신 장치들입니다. 이들은 I/O기반, 시그널기반, 동기화 객체 기반의 다양한 형태의 응답에 대응하는 어플리케이션에서 정의한 핸들러들을 디스패칭합니다.
- 서비스 초기화 컴퍼넌트 - ACE의 Acceptor와 Connector 컴퍼넌트들은 한번 초기화가 끝난 통신 서비스가 실행하는 어플리케이션 고유의 처리 업무들로부터 능동적인/수동적인 초기화 역할을 담고 있습니다.
- 서비스 설정(configuration) 컴퍼넌트 - The ACE Service Configurator는 초기화때/실행중에 동적으로 결합된 서비스들의 설정기능을 제공합니다.
- 계층체제의 스트림 컴퍼넌트 - The ACE Streams components은 계층형 서비스들로 구성된 유저레벨 프로토콜 스택과 같은 통신 소프트웨어 어플리케이션의 개발을 단순화시켜줍니다.
- ORB 어답터 컴퍼넌트 - ACE는 단일쓰레드 또는 멀티쓰레드 기반의 CORBA 구현과 ORB 어답터를 사용하여 변경없이 통합하는 것이 가능합니다.
- C++ 언어 기능들(템플릿, 상속, 동적 바인딩)
- 디자인 패턴(추상화 팩토리, 전략, 서비스 설정자등등)
- OS 기능 (동적 링킹, 멀티쓰레딩등등)
분산 서비스들과 구성요소들 #
In addition to its OS adaptation layer, C++ wrapper facades, and framework components, ACE provides a standard library of distributed services that are packaged as self-contained components. Although these service components are not strictly part of the ACE framework library, these service components play two roles in ACE:
- Factoring out reusable distributed application building blocks -- These service components provide reusable implementations of common distributed application tasks such as naming, event routing, logging, time synchronization, and network locking.
- Demonstrating common use-cases of ACE components -- The distributed services also demonstrate how ACE components like Reactors, Service Configurators, Acceptors and Connectors, Active Objects, and IPC wrappers can be used effectively to develop flexible, efficient, and reliable communication software.
상위레벨 분산컴퓨팅 미들웨어 컴퍼넌트 #
광범위하고 확장가능하며 효율적인 통신 어플리케이션을 개발하는 것은 ACE와 같은 통신 프레임워크를 사용한다 할지라도 도전적인 분야라고 할 수 있습니다. 특별하게도, 개발자들은 아직 이와 같은 여러개의 복잡한 운영체계와 통신 개념을 마스터해야만 합니다:
- 네트워크 주소체계와 서비스 식별(identification)
- 제시된 변환들(presentation conversions) - 암호화, 압축, 네트워크 바이트 정렬 변환등등
- 프로세스와 쓰레드의 생성 및 동기화
- 원격 IPC(interprocess communication)를 인터페이스하는 함수 및 라이브러리 루틴
- 인증(authentication), 공증(authorization), 데이타 보안
- 서비스 배치 및 바인딩
- 서비스 등록 및 활성화(activation)
- 이벤트에 응답하기위한 다중수신 및 디스패칭
- TCP와 같은 바이트스트림 기반의 통신 프로토콜보다 상위의 메세지 프레임을 구현하기
- 네트워크 바이트 정렬 및 인자 마샬링과 관계된 내부구조 변환
- ACE ORB (TAO) - TAO 는 ACE에 의해 구현된 프레임워크 컴퍼넌트와 패턴을 사용하여 구축된 CORBA의 실시간 구현물입니다. TAO는 네트워크 인터페이스, OS, 통신 프로토콜, CORBA 미들웨어 컴퍼넌트 및 특징들을 담고 있습니다. TAO는 표준 OMG CORBA 레퍼런스 모델에 기초하여 구현되었으며, 고성능 실시간 어플리케이션을 위해 전통적인 ORB들의 결점을 보완하기위해 디자인된 개선점들을 가지고 있습니다. TAO는 ACE와 마찬가지로 오픈 소스 소프트웨어이며 완전히 공개입니다.
- JAWS -- JAWS는 ACE에 의해 구현된 프레임워크 컴퍼넌트와 패턴을 사용하여 구축된 고성능의 adaptive 웹서버입니다. JAWS는 프레임워크들의 프레임워크로써 구성되어있다. 전반적인 JAWS 프레임워크는 다음 컴퍼넌트과 프레임워크들을 가지고 있습니다.
- Event Dispatcher
- Concurrency Strategy
- I/O Strategy
- Protocol Pipeline
- Protocol Handlers
- Cached Virtual Filesystem
각 프레임워크들은 ACE내에서 조합 및 확장함으로써 구현된 상호협동적인 객체들의 집합으로서 구성되어 있습니다. JAWS 역시 오픈 소스 소프트웨어이며 완전히 공개로 배포됩니다.








