세미나 참석 대상 : Web 개발자 & 디자이너, 그리고 Web 개발에 관심있는 모든 분들
“오늘 다시 웹 개발에 대해 이야기 하자!”
웹개발이 당연한 것이 되었다고 이야기들 하지만,
소셜과 모바일이 찾아 온 지금,
우리에게 웹을 하나씩 갖는 일은 어느 때보다 중요해졌습니다.
더 유연하게, 더 쉽게, 더 빨리, 더 싸게, 웹사이트를, 소셜 사이트를,
앱서버와 앱사이트를, 모바일 사이트를 모두 만들 수는 없을까요?
지금 전혀 새로운 지평이 펼쳐지려 하고 있습니다.
지금까지 우리가 알고 또 다루어 왔던 웹이 전혀 새로운 차원에서 유연하고 쉬워지려 하고 있습니다. ?
1월 21일 이 새로운 매트릭스로 여러분을 초대합니다.
웹개발의 신조류에 대해 이야기하자!
PHP에서 新ASP.NET, 소셜에서 모바일, 오픈소스활용에서 자체개발까지 이보다 쉬울 수 없는 웹개발 신조류
이번주 토요일 오전 9시 30분부터 오후 5시 30분까지, 2010 대한민국 SW 개발자 컨퍼런스가 열립니다. 이번 컨퍼런스에서는 "개발자가 꼭 알아야 할 4대 IT 트렌드, 기술 이슈 및 미래 전망"이라는 주제로 모바일, 클라우드, 소셜, 웹에 대한 내용을 다루게 됩니다. 좋은 내용들이 많이 다루어질 예정이니 많은 관심과 참여 부탁드립니다. 유료 세미나입니다.
2005년 이후로 줄곧 Microsoft를 깊이있게 심층취재하는 기자들 사이에서 Microsoft의 차세대 운영 체제에 대한 이야기가 자주 회자되고 있습니다. 그 중 가장 많은 화제거리를 제공하는 소재는 단연 MIDORI 였습니다. 클라우드 컴퓨팅 기술과도 엮이면서 한층 더 궁금증을 증폭시키기도 했었지요. 그러나, 오늘 글에서는 MIDORI에 대한 이야기는 잠시 뒤로 미루고, 지금 볼 수 있는, 한창 개발 중인 운영 체제 두 종류를 대신 이야기해보기로 하겠습니다. Singularity는 현재 Codeplex에 게시되어있는 RDK를 실행하고 분석해본 후 제 나름대로 경험해본 특이한 사항들을 요약해서 적어놓은 것입니다.
Singularity는 2008년경에 Microsoft Research (이하 MSR)에서 Research Development Kit (이하 RDK)의 형태로 Codeplex 홈페이지에 올렸습니다. Singularity는 하드 디스크의 MBR 영역에 설치되는 작은 크기의 부트 로더 프로그램을 제외하고 모든 것이 관리 영역 안에 속하는 독특한 운영 체제입니다. 컴퓨터 과학에서 표현하는 3단계 Ring Protection Layer로 말할 것 같으면, 가장 핵심 부분인 Ring 0부터 가장 외부적인 부분인 Ring 3까지 전부 가비지 컬렉터와 관리되는 런타임 아래에서 관리되는 셈입니다.
Singularity RDK에는 OS의 소스 코드 외에도, Singularity에서 사용할 수 있는 응용프로그램을 제작할 수 있는 Bartok 컴파일러와 Singularity OS에 최적화된 CLR/CLI 라이브러리가 포함되어있습니다. Singularity 기반으로 실행되는 응용프로그램을 만들기 원한다면, C# 1.0의 문법을 기초로 하는 Spec#을 확장한 Singularity의 시스템 프로그래밍 언어인 Sing#을 사용할 수 있으며, Sing#으로 작성된 소스 코드를 Bartok 컴파일러로 컴파일하면 해당 프로세서 아키텍처에 맞는 직접적인 응용프로그램 코드가 생성되는 형태입니다. C/C++ 컴파일러와 다른점이 있다면, Bartok 컴파일러가 생성하는 코드에는 D 언어와 마찬가지로, 그러나 Java나 우리가 기존에 알고 있던 .NET Framework와는 달리, 자체적인 가비지 컬렉터를 내장하고 있다는 점입니다.
Sing# 언어의 경우는, 모든 경우를 다 살펴볼 수 없지만, Rotor Framework를 통해서 실체가 밝혀진 C#의 hidden keyword 중 하나인 __arglist와 같이 ECMA 규격 상에 포함되지 않은 특수 키워드들이 다수 포함되어있습니다. __arglist는 C/C++의 varargs와 대응되는 의미로 사용되었지만, Singularity 환경 아래에서는 관리 형식의 배열보다 좀 더 최적화된 (어떤 의미에서는 불안정한) 배열 타입을 제공하기 위한 것으로 보입니다.
Singularity는 연구 목적으로 활용되는 것 이상으로는 이용할 수 없는 라이선스 제약이 있습니다. 상용으로 채택할 경우 라이선스 위반이 됨을 유의해야 합니다. 이러한 제약 사항 아래에서, 자유롭게 소스 코드를 살펴보고, ISO 이미지를 다운로드받아서 VMware나 Windows Virtual PC에서 부팅시켜보시려면, http://singularity.codeplex.com/ 페이지에 제공된 소스 코드나 ISO 이미지를 다운로드받으시면 되겠습니다. :-)
그리고 오늘 아티클에서는 Singularity 외에 MSR과 관련되어있는 또 다른 연구형 운영 체제 한 종류를 더 짚어보기로 하겠습니다. 바로 Barrelfish입니다. Barrelfish는 캠브릿지 MSR과 스위스 취리히의 취리히 연방 공과대학교 산하 Systems가 공동으로 2007년 10월부터 진행 중인 오픈 소스 프로젝트이며, 변형된 BSD 라이선스인 3-clause-BSD 라이선스를 제시합니다. 기본 BSD 라이선스와는 달리, 소스 코드 / 바이너리와 관계없이 원저자의 이름을 명시해야 하고, 원저자의 이름을 Barrelfish 기반의 소프트웨어에 관하여 사용할 수 없다는 제약이 붙습니다.
Barrelfish OS는 C 언어와 어셈블리를 주로 사용하며, 현재 스냅샷 기준으로 x64 (AMD64) 모드를 대상으로 하며, 멀티 코어 프로세서에 최적화된 OS를 만드는 것에 관한 다양한 기술적 이론이 집약된 고성능 운영체제이지만, 리눅스나 윈도우와는 전혀 별개의 브랜치를 가집니다. 어떤 형태로 발전하게 될지는 알 수 없지만, 향후 출시될 Windows Server Family에도 영향을 줄 수 있는 부분처럼 보입니다. 그리고 Barrelfish 자체로도 연구 목적에 맞는 고성능 서버OS로 업그레이드할 계획이 있다는 것이 프로젝트 설명 페이지에 제시된 내용입니다.
Barrelfish의 홈페이지 (http://www.barrelfish.org)는 Barrelfish OS를 기반으로 운영되는 웹 서버에서 서비스 중이라는 특징적인 문구가 홈페이지 하단의 footer에 붙어있습니다. Public Domain에서 서비스할 수 있을만큼 OS가 고성능이고 안정적이라는 뜻으로 받아들여도 될 것입니다.
앞으로 어떤 형태로 새로운 운영 체제들이 나타날지 아직은 아무도 알 수 없습니다만, 미래를 조심스럽게 예측해 보는 것은 참 의미있는 일이라고 생각합니다. 짧은 글이었지만, 클라우드 컴퓨팅, 그리드 컴퓨팅, 멀티코어 컴퓨팅 등 새로운 컴퓨팅 패러다임에 걸맞는 새 시대의 운영 체제를 미리 탐험해 보았습니다.
긴 여정 끝에, Project Blend: xPlatform의 2009년 11월 릴리즈를 공개하게 되었습니다. Project Blend: xPlatform (이하 xPlatform)은 .NET Framework 2.0 이상의 환경에서, C#이 아닌 다른 프로그래밍 언어들 (예: Visual Basic .NET, Visual J#, Iron Python 등)을 위한 비관리 프로그래밍 기술을 제공하고, 운영 체제에 대한 API를 제공하기 위하여 시작된 프로젝트입니다.
xPlatform 프로젝트는 Ms-PL (Microsoft Permissive License) 아래에서 배포되는 오픈 소스 기반 소프트웨어입니다. 그리고 아직까지는 일반 개발 환경에 직접 투입하기에 적절하지 않을 수 있음을 미리 알려드리며, 정식으로 릴리즈가 되기 이전까지는 많은 피드백과 테스트가 필요합니다.
다음의 코드는 실제로 xPlatform의 Core 라이브러리를 사용하여 작성한 샘플 코드로, 비 관리 영역 상의 메모리를 Unsafe 코드를 사용하지 않는 C#을 통하여 자유롭게 제어하는 예시를 담고 있습니다.
using System; using xPlatform; using xPlatform.Buffers;
class Program { static void Main() { int Length = 15;
using (GlobalHeapBuffer<double> myBuffer = new GlobalHeapBuffer<double>(Length)) { Pointer<double> ptr = myBuffer.TypedPointer;
for (int i = 0; i < Length; i++, ptr++) ptr.SetData(i * 0.2);
for (int i = 0; i < Length; i++) Console.WriteLine(">> ptr++[i]: {0}", ptr++[0]);
ptr = myBuffer.Address;
for (int i = 0; i < Length - 1; i++) Console.WriteLine(">> (++ptr)[i]: {0}", (++ptr)[0]); }
Console.ReadLine(); } }
릴리즈를 다운로드하여 설치를 마무리하면, Visual Studio 및 Visual Studio Express Edition의 프로젝트 참조 추가 대화 상자에서 다음과 같이 xPlatform 프로젝트에 대한 참조가 나타납니다. 현재 배포되고 있는 이들 항목들에 대한 설명을 드리면 다음과 같습니다.
xPlatform Core에는 형식화된 포인터, 메모리 버퍼, 문자열 버퍼, 비트 연산 관련 보조 루틴 등이 포함되어있으며, ModuleBase 클래스를 통하여 API 모음에 대한 서비스를 제공하게 될 것입니다. 별도의 예외 사항이 없는 한, API 묶음들은 xPlatform Core에서 제공하는 추상 클래스 ModuleBase 클래스를 상속받게 됩니다.
xPlatform kernel32 (x86)과 xPlatform msvcrt (x86)은 이번 릴리즈에서 공개하는 API 모음입니다. kernel32.dll과 msvcrt.dll에 대한 P/Invoke 호출들을 제공하므로 단지 이들 어셈블리를 프로젝트에 추가하고, 호출하기만 하면 됩니다.
아직 이 프로젝트가 가야 할 길이 멀고, 분명히 문제점이 있을 것입니다. 이러한 부분들을 피드백으로서 제 메일 (rkttu nospam rkttu dot com) 앞으로 보내주시거나, 가급적 http://blendxplatform.codeplex.com/ 에 접속하셔서 여기서 이용하실 수 있는 이슈 트래커에 올려주시면 최대한 반영할 수 있도록 하겠습니다.
더불어서, 프로젝트에 개발자, 코디네이터로 참여해주실 분이나, 후원해주실 분들도 언제든지 환영합니다. :-)
인터넷을 검색하다가 우연히 흥미로운 프로젝트 하나를 발견하게 되었습니다. .NET Framework나 Java 기반으로는 빠른 속도를 필요로 하는 게임 등을 개발하기가 대개 "적당하지 않다"는 선입견을 깨뜨리고 Nintendo 64 에뮬레이터를 만든 그런 프로젝트입니다. 바로 Jario64에 대한 내용이었습니다.
Jario64는 Project64의 코드를 토대로 만든 GPL 라이선스를 따르는 오픈 소스 에뮬레이터 프로젝트로, 에뮬레이터를 통하여 구동할 수 있는 일반적인 게임 타이틀의 상당수를 지원한다고 소개되어있습니다. 다음은 Jario64로 구동되는 몇몇 게임 타이틀들의 실행 화면입니다.
마리오 카트
마리오 파티 2
수퍼 마리오 64
수퍼 스매시 브라더스
젤다의 전설
스크린 샷을 통하여 살펴보기로도 상당한 수준임을 짐작할 수 있습니다. 게임 소프트웨어를 반드시 C, C++이나 어셈블리어로 개발하지 않으면 안될거라는 선입견을 깨뜨리는 보기좋은 도전이었습니다. 그리고 아래 동영상은 유튜브에 게시된 실제 실행 모습을 비디오로 캡처한 것이니 같이 보시면 좋겠습니다. (사운드 플러그인은 아직 구현되지 않은듯 보입니다.)
2009년 7월 6일에, Microsoft가 기존의 Windows Related Protocol에 대하여 한정적으로 시행해왔던 Community Promise를 ECMA-334와 ECMA-335에 대해서도 적용을 시작한다는 공식 발표가 있었습니다. ECMA-334는 C# 프로그래밍 언어에 대한 사양을, ECMA-335는 Common Language Infrastructure (CLI)에 대한 사양을 정의하는 표준안입니다.
이 발표를 통하여, 이전까지는 자생적인 차원에서 진행되었던 오픈 소스 프로젝트들이, ECMA-334와 ECMA-335 사양을 구현하기 위하여 직접 Microsoft와 의사 교류를 진행할 수 있음은 물론 라이선스 계약서 등에 동의해야 할 필요가 없습니다. 즉, Community Promise 정책 아래에 놓여있는 표준 사양에 대한 모든 활동이 자유롭게 진행될 수 있음을 뜻합니다.
약 3개월만의 작업 기록 포스팅입니다. Core Runtime에 대한 테스트를 강화하고 코딩할 때 불편한 부분을 최소화하면서 실제 C 프로그래밍 언어와 비슷한 환경을 나타낼 수 있도록 만드는데에 많은 노력을 들였습니다.
Buffer, String 계열 클래스의 확장 및 개선
[Test] publicvoid memchrTest()
{ int ch = 'r';
GlobalHeapAnsiString str = new GlobalHeapAnsiString("lazy");
GlobalHeapAnsiString @string = new GlobalHeapAnsiString("The quick brown dog jumps over the lazy fox");
GlobalHeapAnsiString fmt1 = new GlobalHeapAnsiString(" 1 2 3 4 5");
GlobalHeapAnsiString fmt2 = new GlobalHeapAnsiString("12345678901234567890123456789012345678901234567890");
SBytePointer pdest; int result;
Console.Write("String to be searched:\n {0}\n", @string.ToString());
Console.Write(" {0}\n {1}\n\n", fmt1.ToString(), fmt2.ToString());
위의 코드에서 보시는것처럼 String Buffer 클래스에 직접 Add / Subtract 연산자 오버로드를 추가하여 실제 포인터 연산의 결과를 재현합니다. 형식화된 Pointer 클래스와 다른점이 있다면 자기 자신에 대한 주소 설정은 허용하지 않습니다. 이것은 비관리 메모리 영역의 주소가 변경됨으로 인하여 발생할 수 있는 할당 해지 실패로 인한 메모리 누수를 예방하기 위한 디자인입니다.
총 20여종의 주요 값 형식에 대한 형식화된 포인터 제공 (Typed Pointer)
형식화된 포인터에 세부적인 기능 조절을 더하고 제거하는 노력을 통하여 총 20여종의 주요 값 형식에 대한 형식화된 포인터를 제공하게 되었습니다. 이들 포인터 형식 모두는 외관상 CLS 표준 사양을 만족하도록 만들어졌으며 포인터 개념이 없는 프로그래밍 언어 (예: Visual Basic .NET, Visual J# 등)에서도 포인터 연산을 간접적으로 사용할 수 있게 디자인되어있습니다.
AutoCharPointer
BooleanPointer
BytePointer
DateTimePointer
DecimalPointer
DoublePointer
GuidPointer
Int16Pointer
Int32Pointer
Int64Pointer
IntPtrPointer
Pointer<T>
SBytePointer
SinglePointer
TimeSpanPointer
UInt16Pointer
UInt32Pointer
UInt64Pointer
UIntPtrPointer
WideCharPointer
사용 빈도가 높을 것으로 추정되거나 기본 형식들에 대한 형식화된 포인터는 모두 제공하고 있습니다. 하지만 특정한 목적으로 직접 추가한 구조체에 대한 지원도 필요했고 경우에 따라서는 제네릭에 대응되는 가변 포인터에 대한 구현을 필요로 하였기 때문에 Pointer<T> 형식을 새로 추가하였습니다. 전용 포인터를 이용하여 계산하는것보다는 연산 횟수가 많다는것이 단점입니다.
실제 메모리 구조의 크기를 조사해주는 unsafe sizeof() 연산자의 Managed 버전 제공
위의 테스트 코드에서 나열한 형식들에 대한 sizeof 연산자의 결과를 반환해주는것이 NativeSizeOf 메서드입니다. 그 외의 형식들에 대해서는 Marshal.SizeOf의 결과를 반환합니다.
NUnit 테스트 코드 프로젝트 시작
프로젝트에 대한 검증을 수행하기 위하여 NUnit 프로젝트를 생성하고 테스트하면서 조금씩 진척을 시켜나가고 있습니다. NUnit 테스트 코드의 내용은 실제 적용에 많은 도움이 되는 예제 코드로도 활용이 가능하니 한번 살펴보시길 권합니다.
향후 계획
조만간 공식 릴리즈를 0.1 버전으로 런칭할 계획을 세우고 있습니다. 그리고 준비가 되는대로 Windows CE, Windows Mobile에 관한 API도 수집하여 데이터베이스화를 수행할 예정이니 관심있으신 분들은 블로그나 데브피아 등을 통하여 연락주시면 언제든 채널이 열려있으니 함께 하실 수 있습니다.
Codeplex에서 Subversion 클라이언트가 지원된다는 사실을 뒤늦게 알게 되었습니다. Codeplex가 이제까지 제공해오던 소스 코드 관리 인터페이스들은 Visual Studio 환경에서는 상당히 유용한 것이었지만 리눅스나 다른 플랫폼에서 사용하기에는 까다로웠습니다. (물론 이러한 문제점을 보완하는 여러 솔루션을 제공해왔지만 지금 이야기하려는 Subversion에 비해서는 역시 어렵습니다.)
Codeplex Subversion 리포지터리는 HTTPS 프로토콜 (TCP 443번 포트) 기반으로 서비스됩니다. 그리고 내부적으로 IIS 7.0을 이용하는것 같네요. Subversion의 웹 버전은 WebDAV 기능과 호환될 수 있도록 설계되어있어서 적정한 수준으로 개발된 Bridge Adapter가 있다면 얼마든지 타 시스템과 연계할 수 있다는 장점을 잘 살린 사례인듯 합니다.
Subversion 서비스를 이용하기 위해서는 TortoiseSVN이나 WinSVN 같은 도구가 필요합니다. TortoiseSVN이 Windows 탐색기와 잘 연결되기 때문에 주로 이 클라이언트를 많이 권합니다. (http://www.tortoisesvn.net/ 에서 받으실 수 있으며, x86 버전과 amd64 버전이 제공됩니다.)
클라이언트 프로그램을 설치하신 다음에는 다음과 같이 형식에 맞추어서 주소를 입력하여 리포지터리 탐색을 시작할 수 있습니다.
https://[프로젝트 Alias 명칭].svn.codeplex.com/svn/
아래는 svnbridge, Singularity 프로젝트의 Subversion 리포지터리 주소입니다. :-)
Subversion을 통해서 소스 코드를 체크아웃하거나 익스포트하는 작업은 익명 사용자에게 개방되어있으며 언제든 최신 리비전을 받아보실 수 있습니다. 그리고 커밋하거나 변경하는 작업이 있을 때는 Codeplex ID와 비밀 번호, 그리고 해당 프로젝트의 멤버로 참여하고 있을 때 권한이 부여됩니다. 커밋한 내용은 프로젝트 홈페이지에도 그대로 기재되며, TFS 클라이언트, 웹 서비스, 서브 버전 모두가 동일하게 움직이므로 정확도가 떨어질 걱정은 하지 않으셔도 될 것 같습니다. :-)
참고 사항: 미러링이나 분배 기능이 구현되어있지 않다보니 현재는 외국 서버로 다녀와야 하기 때문에 속도가 많이 느린 편입니다. 이용에 참고하시면 좋을것 같습니다. 만약 Team Foundation Server를 Subversion 스타일로 이용하기를 희망하신다면 위에서 소개한 svnbridge 프로젝트를 참고하시기 바랍니다. (svnbridge의 IIS 바인딩 기능은 특히 유용할 것입니다. 홈페이지: http://www.codeplex.com/svnbridge)