Network FrameWork ACE Overview

Adaptive Communication Environment( 이하 ACE )라는 네트워크 관련 프레임워크 모듈이 있습니다. Schmidt라는 Vanderbilt 대학 전자공학 및 컴퓨터과학 교수가 이론적인 것을 거의 완벽하게 구현을 했다고합니다.

redpixel님이 번역하신 Overview of ACE를 참고했습니다.

ACE

동시처리방식 네트워크의 핵심 패턴들을 구현한 오픈소스기반의 크로스플렛폼 객체지향 프레임워크입니다. wrapper facade 패턴을 사용해서 재사용가능한 클래스들과 일반적인 네트워크 상에서 실행되는 프레임워크 요소들의 모음입니다.

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의 핵심 컴포넌트들과 종속관계


  • OS Adaptation Layer, C++ Wrappers - 장점에서 나왔던 이식성의 증가와 관련이 있습니다. 각 OS별로 다른 네트워크 API들을 잘 포장하고 추상화를 해놨습니다. ACE사용자는 이것을 통해서 OS가 Win32인지, Mac OS X인지 또는 Unix계열인지 몰라도 작업이 가능합니다. 단지 OS Adaptation Layer는 C Api로 처리한 것에 비해 C++ Wrappers는 이름대로 C++ 컴포넌트 객체로 구성이 되어있습니다. 객체로 처리함에 있어서 컴파일 타임때 오류를 감지하는 이점이나 메서드 호출 과부하를 최소화 하기위해 inline을 사용, 실행상에 중요한 wrapper들(소켓 send/recv등)에는 가상 함수의 사용을 피하는 등의 최적화가 되어 있습니다. 일단 아래의 플렛폼 의존적인 API들을 처리하는 것이죠.
    • 동시처리와 동기화 - 멀티쓰레딩, 멀티프로세싱, 동기화와 관련된 OS API.
    • 프로세스간 통신( IPC )와 공유 메모리 - 지역/원격 IPC와 공유 메모리에 대한 OS API.
    • 이벤트 다중수신 체계 - 동기/비동기적인 입출력 다중수신, 타이머, 시그널, 동기화의 이벤트들을 위한 OS API.
    • 명시적 동적 링킹 - 어플리케이션 서비스들이 설치 또는 실행시 재설정하는 것을 허락.
    • 파일 시스템 구조 - 파일, 디렉토리를 관리하기 위한 API.
  • Frameworks - C++ Wrapper facade들을 개선하고 통합하는 컴포넌트들로 이루어진 네트워크 프레임워크입니다. 동시처리방식의 분산된 서비스의 동적 환경 설정을 제공합니다.
    • 이벤트 다중수신 컴포넌트 - Reactor와 Proactor는 확장가능한, 객체지향 다중수신 장치들입니다. I/O기반, 시그널기반, 동기화 객체 기반의 다양한 형태의 응답에 대응하는 어플리케이션에서 정의한 핸들러들을 디스패칭합니다.
    • 서비스 초기화 컴포넌트 - Acceptor와 Connector컴포넌트들은 한번 초기화가 끝난 통신 서비스가 실행하는 어플리케이션 고유의 처리 업무들로부터 능동/수동적인 초기화 역활을 담고 있습니다.
    • 서비스 설정 컴포넌트 - 초기화나 실행중 동적으로 결합된 서비스들의 설정기능을 제공합니다.
    • ORB 어뎁터 컴포넌트 - 단일쓰레드 또는 멀티쓰레드 기반의 CORBA구현과 ORB어뎁터를 사용하여 변경없이 통합하는 것이 가능합니다.
  • 분산 서비스들과 구성요소들 - 번역이 안되서 비워둡니다 ㅎ;;;
  • 상위레벨 분산 컴퓨팅 미들웨어 컴포넌트 - CORBA, DCOM, 자바RMI 상위레벨 분산 컴퓨팅 미들웨어 컴포넌트를 채용 되어있습니다. 클라이언트와 서버사이에 위치하며 분산 어플리케이션 개발에 있어 에러가 나기 쉬운 측면들을 자동화 시켜주고 개발 복잡성을 다소 경감시켜줍니다. 다음과 같은 특성들을 가지고 있습니다.
    • 인증, 공증, 데이터 보안.
    • 서비스 배치 및 바인딩.
    • 서비스 등록 및 활성화.
    • 이벤트에 응답하기위한 다중수신 및 디스패칭.
    • TCP와 같은 바이트 스트림 기반의 통신 프로토콜보다 상위의 메세지 프레임을 구현하기.
    • 네트워크 바이트 정렬 및 인자 마샬링과 관계된 내부구조 변환.

정리하다보니까 거의 redpixel님 글을 가져왔네요 ㅎ;;;;; 아무튼 대충이라도 ACE가 뭐다라는건 감이 오네요. 아직 모르는 전문용어도 많고 하지만....

간단히 정리를 해보겠습니다.


장점
  • 호환성이 높다.
  • 이식성이 좋다.
  • 나이스한 구조.
  • 크로스플랫폼.

단점
  • 덩치가 크다. 단순 소켓 라이브러리 정도가 아니라는 것.
  • 설계에 기본 지침인 각종 패턴들에 대한 완벽한 이해가 없다면...
  • 초반 접근성이 떨어질듯.
정도 되겠네요. 프레임워크가 잘 구성되어 있어 좋지만 사용하기에는 버겁다. 성능이 무거워서 버거운게 아니고, 닭잡는데 소잡는칼 쓰는 격이라고 비유라고 하면 될려나요? 그래서 다음 이시간에는 Lite한지 모르겠지만 일단 ACE를 한번 더 포장?한 HalfNetwork를 리서치 해볼까 합니다.

만약 현 프로젝트에서 ACE를 선택하지 않는다고 해도 따로 혼자 공부해도 괜찮은 녀석 같네요.

관련링크
redpixel님 위키

관련 서적
C++ Network Programming Volume1 : ACE와 패턴을 사용한 객체지향 네트워크 프로그래밍 - 절판입니다. 대신 이 곳 또는 이 곳에서 pdf 문서를 볼 수 있습니다. 단 영문 크리..;;
C++ Network Programming Volume 2 : ACE와 프레임워크를 이용한 체계적인 재사용 기법
ACE 프로그래머 가이드 : 네트워크 시스템 프로그래밍을 위한 실용적인 디자인 패턴 활용

댓글

이 블로그의 인기 게시물

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

goorm IDE에서 node.js 프로젝트로 Hello World Simple Server 만들어 띄워보기

애드센스 수익을 웨스턴 유니온으로 수표대신 현금으로 지급 받아보자.