예전에 올라온 글 정리인데 출처를 모르겠다 ㅜ.ㅜ
지
난 2000년 6월 포럼 2000에서 처음 발표된 닷넷은 MS가 추진하고 있는 서비스 중심의 통합 플랫폼이라는 거대 전략이다.
모노(Mono Project)는 닷넷 프레임워크를 오픈소스로 구현하려는 프로젝트이다. 그 동안 서른 번의 릴리즈에도 불구하고
말도 안 되는 실현 불가능한 일이라 여겼는지 아니면 눈에 띄는 뚜렷한 결과물, 이를테면 비주얼 스튜디오 닷넷(이하
VS.NET)과 같이 눈에 착착 달라붙고 보여줄 수 있는 닷넷 개발 환경을 무작정 기대한 것일까. GUI 환경의 많은 Gtk#
애플리케이션들이 나왔지만 국내에선 일부 MS와 관련한 비판만 있었을 뿐 그다지 큰 반향을 일으키지는 못한 것 같다. 그럼 먼저
최근 활발히 개발되고 있는 MonoDevelop 모노 IDE(Integrated Development Environment)를
소개해 본다.
리눅스에서 새로운 통합개발환경
[화면 1]의 MonoDevelop은 Gtk#
기반의 통합개발환경(이하 IDE)로서 모노 기술로만으로 만들어진 C# 프로그램이다. Gtk#은 리눅스에서 사용자를 위한 편리하고
화려한 데스크탑 환경을 제공하는 그놈(GNOME)을 C# 바인딩한 것으로 최근 2.6이 발표된 그놈의 눈부신 발전에 힘입어
리눅스에서 미려한 각종 GUI 컨트롤을 쉽게 만들 수 있는 기반이 된다. 아직 몇 달 안 된 프로젝트이지만 신세대 IDE라면
갖추어야 할 코드 인텔리전스([화면 2]), 디버깅, 플러그인 기능을 내장하였다. 물론 2001년부터 시작하여 지금은 IBM을
비롯한 수십 개의 회사가 지원하는 경쟁자 이클립스가 있긴 하다. 자바로 만든 이클립스는 한번 더 언급하기로 하고 일단
MonoDevelop과 함께 선보인 멋진 발표 현장을 가 보자.
|
[화면 1] MonoDevelop 실행 화면 |
|
[화면 2] Intellisense 기능 |
Novell BrainShare 2004
지
난 3월에 있었던 노벨 세미나에서 미겔(Miguel de Icaza)과 에릭(Erik Dasque)은 리눅스에서 애플리케이션
개발을 얼마나 쉽고 빠르게 할 수 있는지 단적으로 보여주었다. 진행자의 신호에 빨간색 모노 티를 입은 미겔과 에릭이 등장했고
발표는 MonoDevelop을 띄워 놓고 진행되었다.우선 새로운 Glade# 프로젝트를 선택하자 기본적인 코드가 생성되었다.
그놈 UI 디자이너 Glade를 실행하고 버튼, 텍스트 입력 컨트롤 그리고 Gecko 웹 컨트롤을 배치하여 UI를 구성했다.
관련 닷넷 어셈블리 등록을 마치고 [리스트 1]과 같은 코드를 간단히 몇 줄 추가함으로서 웹 브라우저가 완성이 됐다.
|
using System;
using Gtk;
using Glade;
using Gecko;
public class GladeApp
{
[Widget] Frame frame1;
[Widget] Entry entry1;
WebControl web;
public static void Main (string[] args)
{
new GladeApp (args);
}
public GladeApp (string[] args)
{
Application.Init();
Glade.XML gxml = new Glade.XML ();
gxml.Autoconnect (this);
web = new WebControl ();
web.Show ();
frame1.Add (web);
entry1.Activated += load_url;
Application.Run();
}
void load_url (object s, EventArgs a)
{
web.LoadUrl (entry1.Text);
}
} |
|
|
이
것을 리눅스 프로그램이라 쉽게 믿을 수 있을까. 그것도 완벽하게 실행되는 환경이라면. 뿐만 아니라 닷넷의 특징이라 할 수 있는
윈도우?리눅스 바이너리 호환성, 즉 리눅스에서 컴파일한 실행 exe 파일을 윈도우에 복사하는 것만으로 윈도우에서 실행이
가능하다.
미리 보는 모노 1.0
이번에 발표되는 모노 1.0은 다음과 같은 기능을 포함할 것이다.
◆ C# 컴파일러
◆ 닷넷 CLR(Common Language Runtime)
◆ 닷넷 1.0과 1.1 API를 완벽하게 구현한 닷넷 클래스 라이브러리
◆ System.Web을 구현한 웹 서비스 애플리케이션 플랫폼
◆ System.Data를 비롯한 모노 데이터베이스 프로바이더
◆ 그놈 데스크탑 컴포넌트의 C# 바인딩인 Gtk#
◆ 자바 플랫폼 실행 환경 IKVM
C# 컴파일러
모
노 C# 컴파일러는 순수 C#으로만 작성된 프로그램이다. C#으로 된 컴파일러 소스를 컴파일하는 최초의 부모는 MS 컴파일러가
되는 셈이다. 컴파일러가 컴파일러 자신을 만드는 이러한 셀프 호스팅(self hosting)은 개발자들이 C# 언어를 이해하는
데 훌륭한 기본 바탕이 되었으며 많은 코드 재사용이 이루어졌다.
닷넷 CLR
다
양한 언어를 위한 공통적인 플랫폼인 닷넷 CLI(Common Language Infrastructure) 그리고 여기에 사용되는
중간 언어인 CIL(Common Intermediate Language) 코드를 위한 아키텍처 코드 생성과 실행은 모노 런타임이
맡고 있다. 이는 CIL 가상머신(VM), 클래스 로더, 가비지 컬렉터, 쓰레드 시스템, 메타데이터 접근 라이브러리를 위한
JIT(Just-in-Time) 엔진을 담당한다. 런타임 개발 도중 미리 네이티브 코드로 컴파일해 둬 성능을 극대화시키는
AOT(Ahead-of-Time)를 지원하기 위한 mini 런타임을 만들었고 현재 기본 런타임이 되었다. 모노는 현재
리눅스/x86, 솔라리스/SPARC, Mac OS/PowerPC 아키텍처를 지원한다.
닷넷 클래스 라이브러리
닷
넷 네임스페이스를 구성하는 어셈블리들의 방대한 닷넷 클래스 라이브러리를 구현하는 것은 무모해 보였다. 공개된 API만을 보고
내부 사정을 구현하는 작업이기 때문이다. 하지만 현재 MSCORLib(Multilanguage Standard Common
Object Runtime Library), System, System.Security, System.XML 라이브러리를
100% 완성하여 이를 1.0에 포함할 것이다. 게다가 MS가 지원하지 않는 모노 전속 라이브러리도 많아졌다. 또한 다양하고
방대한 라이브러리의 자동화된 테스트를 위한 유닛 테스팅 프레임워크와 각 수천 개의 테스트 케이스를 지속적으로 관리하였다.
ASP.NET, ADO.NET
ASP.NET
은 웹 서비스를 구축하기 위한 닷넷 환경이다. 이를 위한 관련 System.Web 라이브러리를 구현하였고 웹 서버 XSP 또는
아파치 모듈을 통해 웹 애플리케이션을 돌릴 수 있다. 이와 함께 ADO.NET을 지원하기 위해서 다양한 모노 데이터베이스
프로바이더(MSSQL, Oracle, MySQL, Interbase, IBM DB2, SQL Lite, Sybase, TDS)를
제공하고 있다.
Gtk#
그놈은 모노의 시발점이 된
프로젝트이다. 다양한 언어를 지원하는 그놈이긴 하지만 API 바인딩을 지속적으로 관리하기 위해선 수작업 노동이 동반된다.
Gtk#은 닷넷 특성을 최대한 활용하였다. [리스트 1]의 [Widget] 코드를 보라. 닷넷 애트리뷰트를 이렇게 적용할 수도
있음을 확인할 수 있다. 커스텀 XML 파일에 바인딩 정보를 넣어 자동 생성되는 Gtk#은 단순 C# 바인딩을 넘어 OOP,
닷넷 델리게이트 등 각종 트릭을 가능케 했다. [리스트 2]의 코드는 OOP의 대표적인 특징인 상속을 보여주고 있다. 알다시피
Gtk+를 비롯한 그놈 컴포넌트의 대부분은 C로 짜여져 있다.
|
// Subclass.cs - Widget subclass Test
//
// Author: Mike Kestner
//
// (c) 2001-2003 Mike Kestner, Novell, Inc.
namespace GtkSamples {
using Gtk;
using System;
public class ButtonApp {
public static int Main (string[] args)
{
Application.Init ();
Window win = new Window ("Button Tester");
win.DeleteEvent += new DeleteEventHandler (Quit);
Button btn = new MyButton ();
win.Add (btn);
win.ShowAll ();
Application.Run ();
return 0;
}
static void Quit (object sender, DeleteEventArgs args)
{
Application.Quit();
}
}
public class MyButton : Gtk.Button {
static GLib.GType gtype = GLib.GType.Invalid;
public MyButton () : base (GType)
{
Label = "I'm a subclassed button";
}
public static new GLib.GType GType {
get {
if (gtype == GLib.GType.Invalid)
gtype = RegisterGType (typeof (MyButton));
return gtype;
}
}
protected override void OnClicked ()
{
Console.WriteLine ("Button::Clicked default handler fired.");
}
}
} |
|
|
IKVM
예
컨대 자바나 닷넷 선택의 기로에 있는 개발자들이 있을 것이다. 하지만 닷넷이 자바의 장점을 많이 흡수해서인지 졸탄(Zoltan
Varga)의 IKVM은 자바 클래스 라이브러리를 구현한 GNU Classpath를 이용하여 자바 플랫폼을 실행할 수 있게
해준다. 즉 이클립스를 모노 런타임으로 돌리는 것이다. 한편 그놈 진영에서도 자바냐 모노냐 하고 논쟁이 있는데 이런 프레임워크
선택 문제는 상황과 위치에 따라 자기 목소리를 낼 수밖에 없는 것 같다. 각각의 장단점을 파악하고 자신만의 경쟁 무기를 만드는
것이 좋을 것이다.
열정적인 커뮤니티, 모노 팀
그렇다면 어떻게 3년 만에 이 많은 것을
완성할 수 있었을까. 2001년 7월 9일, 4명의 지미안(Ximian) 해커로 시작한 모노 프로젝트는 현재 노벨이 지미안을
인수하여 노벨 소속 십여 명의 개발자와 130여명의 전 세계 각지의 자발적인 해커들이 참여하여 진행하고 있다. 모노 테스팅
프레임워크를 구축한 Nick Drochak과 XML 마스터 Atsushi Enomoto는 일본에서 참여하고 있다. Ben
Maurer는 도저히 17세라고 믿기 힘든 런타임 최적화 패치들을 쏟아내고 있다. 닷넷 시큐리티 구현에 주도한 Sebastien
Pouliot는 리눅스가 아닌 윈도우가 개발 환경이었다. Mainsoft와 같은 거대 업체에서 대량 지원을 하는 경우도 많았다.
모노에 관심만 있다면 제한없이 누구라도 참여하여 공헌하였다. 디스어셈블과 같은 불법 도용 코드는 사양하되 재사용하는 코드는
많았다.
생산성의 측면에서 소프트웨어 개발에 불필요한 중복 과정을 최대한 줄이는 것은 아주 중요하다. 가독성
높은 코드, 충분한 대화 후에 디자인하고 패치하고 테스팅 그리고 체계적인 버그 관리까지의 모든 과정은 모노 초기부터 모든
영역에서 꾸준히 지켜왔다. 열정적인 커뮤니티 현장은 그간의 메일링리스트 기록으로 확인할 수 있다. 주요 개발자들의 실제 만남이
지난 3월 5일에 열린 보스턴 미팅에서야 처음 있었으니 모노가 얼마나 전 지구적인 오픈소스 프로젝트인지 다시금 느끼게 한다.
모노 적용과 그 미래
아
직 1.0이 나오지도 않았지만 시장에서 모노를 쓰고 있는 개발사(ISV, Independent Software Vendor)가
있는지 궁금할 것이다. 독일 뮌헨 시는 350대 서버 규모의 시스템을 모노 ASP.NET으로 적용하였다. SourceGear라는
회사는 웹 서비스 클라이언트용 프로젝트 관리 애플리케이션 Vault을 내놓았고 리눅스에서 모노를 사용한 커맨드 환경을 지원한다.
임베디드 시스템 벤더들은 C 기반 SDK에 추가로 임베디드용 모노를 도입하고 있다. 이는 강력한 성능과 다양한 플랫폼을 지원하는
모노 클래스 라이브러리와 런타임이 있기에 가능하다.
닷넷이 어디까지 완전 자유로운지 현 상황에선 예측하기
어렵다. 하지만 비록 MS의 소송 가능성이 있다고 하더라도 모노의 가치는 분명 무시할 수 없다. 현대적인 개발 프레임워크의 모든
것을 제시하고 있기 때문이다. 효율적인 개발 환경이 필요했던 많은 개발자들에게 모노는 분명 희소식이다. 거대한 변화에 동참할
개발자는 모노를 두들겨 보길 바란다.