Saturday, May 21, 2011

Managed code VS Native code

기존의 JAVA 를 선두로 익히 알려진 Managed 진영에 MS의 .net framework 이 발전하면서 Managed 언어는 프로그램의 양과 질, 두 마리 토끼를 모두 취할 수 있는 좋은 방법이 되었다. 특히 많은 개발자들이 (비)상용으로 수많은 관련 library를 공개함으로써 이것은 어느덧 대세가 되었다.

그러나 굉장히 성능에 민감한 하위 레벨 엔진을 구현하는 본인로서는 Managed 보다 훨씬 가볍고 최적화가 유리한 Native C/C++ 코드를 메인 언어로 사용해 왔고, 이것에 대해 확신과 자부심을 갖고 있었다.

그러나 엔진뿐만 아니라, 모듈의 통합 및 구성, 유저 시나리오를 포함하는 콘텐츠로 이루어진 "Platform"까지 만들어야 하는 상황으로 인해 시간과 노력이라는 한계에 봉착하고 말았다. 그러던 중 Native 와 Managed Code 간 Interoperation를 알게 되었고, 하위 레벨 엔진에서부터 상위 레벨 콘텐츠까지 지원할 수 있는 진정 OOP 다운 Library를 설계할 수 있게 되었다. (Thanks for Jun)

Native Code 기반은 기존에 해왔던
  • 굉장히 성능에 민감한 엔진 : Rendering module, Volume Generating Module 등...
  • 엔진 모듈 관리
  • 현재 Managed 로 지원하지 않거나 최적화 시나리오가 난해한 Resource 관리
부분을 주로 담당하게 하였으며, 이를 바탕으로 순수히 Native 로만 하나의 플랫폼을 완성할 수도 있도록 아래의 사항에 집중을 많이 했다.
  • Volume Processing에 특화된 자료 구조의 객체화
  • 모듈을 위한 Helper Functions
  • API의  직관적 구성 및 COM 구조화
  • 모듈 추가 및 수정을 독립적으로 할 수 있도록 DLL 로 솔루션 구성
  • 모듈의 OS 및 SDK 종속성에 대한 자유도 보장을 위한 기본 자료 구조 사용
<Native & CLR Interface>

Managed code 기반에서는, 플랫폼을 구성하는 콘텐츠로 End User와 모듈 엔진을 이어 주는 Component 가 주를 이루게 하여 다음을 구현하도록 하였다.
  • Native Engine API 와 연동되는 Managed Engine Command Center (ECC)
  • ECC 기반으로 GUI 를 통해 모듈 조작을 돕는 Common Control
  • ECC 및 Common Control을 정의하기 위한 Managed 자료구조
  • ECC 및 Common Control에 User Scenario를 더한 1차적 Custom Platform 인 View

<Managed Data Structure & API>

Managed 부분의 GUI 부분은 C++ 에서 MFC 에 해당하는 WPF 기반으로 구현되었으며, 이것은 Silver Light 의 슈퍼셋으로 약간의 수정을 통해 추후 Web 기반 플랫폼으로 전이가 용이하다는 점에 굉장히 매력적 옵션이다.

이것을 생각하고 구현하는데 대략 1달이라는 시간이 소요되었으며, 이를 바탕으로 효율적인 Contents를 구성하기 위해 Managed 부분의 Function 자료구조를 생각하게 되었는데 이는 다음에 이야기하도록 하겠다.

Once again Thx for Jun

No comments: