본 글을 월간 마이크로소프트 2012년 5월호 특집 기사로 다루어진 내용입니다. Visual Studio 11이 Visual Studio 2012로 변경됨에 따라 본문의 내용을 일부 수정하였습니다.
본 글 이외에 Visual Studio 팀원의 강보람 MVP님의 "Welcome to Metro User Interface" 컬럼과 남정현 MVP님의 "Windows Server 8 미리 보기" 컬럼은 필자의 블로그에 기재하지 않은 점 또한 참고하기 바라며, 저작자의 동의하에 추후에 공개가 될 수 있습니다.
시대가 바뀌면서 Windows도 전통적인 모습에서 벗어나서 새로운 흐름을 만들고자 하는 노력이 시작된 것 같다. 물론 기존의 데스크 탑은 여전히 널리 사용될 것이다. 일상적인 업무에서 사용하는 응용 프로그램이 굳이 메트로 사용자 인터페이스 형태를 띌 필요는 전혀 없을 테니 말이다. 그리고 앞으로도 계속해서 기존의 데스크 탑을 타겟으로 하는 윈폼이나, WPF의 개발도 지속될 것이다. 하지만, 새로운 기회는 작은 틈에서 나오는 것이니 이 틈새를 잘 이해하기 위해서는 Windows 8의 메트로 환경을 잘 이해할 필요가 있다.
Windows 8과 Visual Studio 2012은 그야말로 N스크린에 감히 필수적인 환경이라고 말하고 싶다. 그 어떤 플랫폼도 데스크 탑과 테블릿, 모바일 등의 모든 기기와 환경 모두를 지원하는 것은 매우 어려운 일이다. 일반 사용자가 기기마다 사용하는 용도와 스타일이 다르고, 모바일 기기마다 해상도와 특징이 다르기 때문이기도 하지만, 하나의 개발 도구로 모든 상황을 대응할 수 있는 통합 개발 도구가 없는 것도 한 몫을 한다. 아니라고 말하는 독자도 있겠지만, 필자는 데스크 탑 환경까지 확장하는 N스크린을 말하는 것이고, 모든 N개의 스크린에서 똑같은 사용자 경험을 제공하는 것을 말한다. 이런 관점에서 Windows 8과 Visual Studio 2012은 그 해답을 제시하고 있으며, 충분히 가치 있고, 도전해 볼만하다. 이런 이유로 벌써부터 필자는 매우 흥분이 된다.
그리고 이 글에서 모두 소개하기는 어려웠지만, Windows Server 8은 그 동안의 Windows 운영 체제가 보여주었던 정적인 모습을 탈피하여 대규모 데이터 센터가 아닌 비용 문제 때문에 고민이 많은 수 많은 중소 규모의 IT 인프라에서도 효율적으로 시스템을 운영하고 애플리케이션 개발자들이 핵심에만 접근할 수 있도록 도와줄 방법을 제공하고 있다. 또한 메트로 스타일의 앱은 단순히 사용자 인터페이스에 관한 새로운 접근일 뿐만 아니라 데스크톱 가상화나 서버 관리자를 위한 새로운 종류의 서비스로 자리잡을 수 있다. 여전히 Charm Bar의 기능은 유용하게 사용할 수 있으며, Application Contract를 정확하게 지원하는 서버용 메트로 앱을 만들어 서버 관리자의 일을 덜어내거나 전혀 새로운 경험의 터치 기반 KIOSK를 손쉽게 만들 수도 있을 것이다. 이것은 전적으로 여러분의 선택에 달려있는 일이 될 것이다. 더 나아가서, Windows Server 8의 여러 기술들이 각종 호스팅 환경은 물론 Windows Azure나 Amazon과 같은 Public Cloud Computing 환경에도 전면적으로 도입이 된다면 더 멋지고 유용한 서비스들이 대거 등장하지 않겠는가 하는 것이 개인적인 생각이다.
본 글을 월간 마이크로소프트 2012년 5월호 특집 기사로 다루어진 내용입니다. Visual Studio 11이 Visual Studio 2012로 변경됨에 따라 본문의 내용을 일부 수정하였습니다. 그리고 현재 필자는 NCSOFT에 재직하지 않음을 참고하기 바랍니다.
엄준일 – 현재 NCSOFT에 재직 중이며, Microsoft ALM MVP와 한국 Visual Studio 팀과 블로그를 운영하고 있다.. 주로 .NET 기술을 전파하고 있고, 마이크로소프트가 지향하는 소프트웨어 개발 프로세스와 통합 및 테스팅 분야를 4년 동안 공부해왔다. 그 외에 CodePlex 오픈 소스 사이트를 통해 프레임워크, 툴 그리고 라이브러리 등을 공개하여 운영 중이다.
C++ 매트로 앱 개발 준비 사항
C++ 매트로 앱을 개발하기 위해 C++ 개발자는 당장 개발하기 앞서 몇 가지 숙지해야 할 지식과 개념들이 있다. 그리 어려운 것들은 아니지만, 이것을 모르고 접근하려고 하면 어디서부터 시작해야 할지 매우 혼란스러울 것이다. 필자는 과거에 C와 PASCAL을 주로 사용하였고, PC통신이라는 커뮤니케이션을 통해 여러 가지 액션 게임과 대전 게임, 어드벤처 게임을 개발하여 공개해 본 적은 있으나, 최근에 사용되는 C++과 DirectX로 개발해 본 경험은 전무하다. 대신 C라는 언어와 윈도우8이라는 공통 분모를 바탕으로 최대한 C++ 개발자에게 매트로 앱을 쉽게 개발하기 위해 설명할 것이다.
C++/CX 란?
첫 번째 준비사항은, C++ 매트로 앱 개발의 위해 C++/CX를 이해해야 한다. C++/CX는 C++ Components Extension(C++ 컴포넌트 확장)이라는 의미로 그 문법은 C++/CLI와 매우 흡사하다. C++/CLI의 대부분은 .NET의 MSIL 형태의 목적 파일로 컴파일 되기 때문에, C++/CLI 응용 프로그램이 동작하기 위해서는 .NET Framework가 설치가 되어야 했었다. 이는 곧, C++/CLI의 gcnew 객체는 .NET 가비지컬렉션의 대상이 되기 때문에 .NET에 매우 가까운 구조였다. 반면, C++/CX은 간단하게 정의하자면 간결한 COM 프로그래밍 언어이다. 그 문법이 C++/CLI와 같지만, 완벽하게 네이티브 형태로 컴파일 된다. 이 말은 즉, .NET Framework이 필요가 없고, .NET 가비지컬렉션의 대상이 되지도 않는다.
앱 개발에 필수 런타임인 WinRT(Windows Runtime)를 이용하여 구현을 하기 위해선 IInspectable 인터페이스를 구현해야 한다. COM 프로그래밍에 직간접적으로 IUnknown 인터페이스를 구현하는 것과 같다. 왜냐하면 IInspectable 인터페이스는 IUnknwon 인터페이스를 상속하기 때문이다.
IInspectable 인터페이스는 곧 COM 개념과 같다. 컴포넌트를 다양한 언어와 공유하고 통합할 수 있는데 WinRT 프로그래밍에서 C#, VB.NET, 그리고 JavaScript에서 IInspectable을 구현하는 객체를 사용할 수 있게 된다. (단, IInspectable 인터페이스는 컴파일러에 의해 구현될 수 있다)
COM 프로그래밍 중 가장 빈번하게 사용되는 것 중 하나가 참조 카운팅인데, ^ 기호로 참조 카운팅을 관리하는 개체를 ref new로 인스턴스를 생성하면 더 이상 귀찮은 AddRef와 Release메서드를 호출해 줄 필요가 없다. 예를 들어, Platform::WeakReference등을 이용하여 생성된 객체에 대해 수명 관리를 위임할 수 있는 방법들이 제공된다.
정리해보면, WRL(Windows Runtime Library)가 C#, VB.NET, JavaScript로 개발할 수 있는 환경을 제공하는 것이 바로 COM이며, 이를 쉽게 개발할 수 있는 언어가 C++/CX인 것이다.
프로퍼티(Property) 사용
C++/CX는 프로퍼티를 사용할 수 있는 키워드를 제공한다. C++/CX 프로퍼티는 .NET 프로퍼티와 내부적으로 똑같이 동작한다. 이 프로퍼티는 컴파일 시에 get/set 메서드를 자동으로 생성해 준다. 프로퍼티는 읽기 전용/쓰기 전용, 그리고 이 두 가지 모두를 지원하도록 구현할 수 있다.
이 프로퍼티는 매트로 앱을 개발하면서 상당히 자주 만나게 될 것이다. 왜냐하면 XAML과 함께 앱을 구현하면서 바인딩(Binding) 개념에 프로퍼티 구현이 필수적이기 때문이다. 그래서 XAML 바인딩에서 INotifyPropertyChanged 인터페이스를 구현하여 데이터 모델과 바인딩된 데이터간에 데이터 변경에 대해 알려줌으로써 1-way 또는 2-ways 바인딩을 사용한다.
#include"pch.h"
publicrefclassPersonsealed
{
private:
Platform::String^ name;
int age;
public:
Person(Platform::String^ name)
{
this->name = name;
}
// 읽기전용프로퍼티
property Platform::String^ Name
{
Platform::String^ get() { returnthis->name; }
}
// 읽기쓰기프로퍼티
propertyint Age
{
int get() { returnthis->age; }
void set(intage)
{
if( age <=0 ) throwrefnew Platform::InvalidArgumentException();
this->age = age;
}
}
};
Code 2 C++/CX 프로퍼티
이 프로퍼티는 내부적으로 생성되는 get/set 매서드를 사용하는 것이 아니라 선언된 프로퍼티를 마치 맴버 변수처럼 사용이 가능하다. 일반적인 C++ 에서는 get/set 메서드를 구현하는 방식으로person->setName(L"Junil Um");이런코드를더이상사용하지않는다.
아래의 코드와 같이 프로퍼티로 선언한 이름으로 직접 엑세스할 수 있다.
Person^ person = refnew Person("Junil Um");
person->Age = 20;
필자는 매크로를 사용하여 좀 더 빠르고 쉽게 프로퍼티를 선언하여 사용하는 방식을 권하고 싶다. 아래의 코드는 프로퍼티의 get 또는 set, get/set 을 매크로로 대체한 것이다.
#define __PROPERTY_GET_FUNC(TYPE, NAME) TYPE get() { return m_##NAME; }
포인터 함수는 C++에서 흔히 사용되지만, WinRT 프로그래밍에서는 직접적인 포인터 연산이 그리 좋은 코드는 아닐 수 있다. 이유는 간단하다. WinRT APIs (내장 라이브러리)들이 인자 값으로 포인터가 아닌 대리자(Delegate)를 즐겨 전달 받는다. 그리고 이벤트(Events) 프로그래밍에서 대리자를 공통적으로 사용한다.
void ShowMessageBox(Platform::String^ str)
{
auto dialog = refnew Windows::UI::Popups::MessageDialog(str);
.NET 에서는 대리자(Delegate)를 안전한 포인터 함수라고 정의한다. 포인터 함수를 사용하든, 대리자를 사용하든 결과는 똑같지만 이왕이면 안전하게 제어할 수 있는 대리자를 사용하라는 것이다. 사실, .NET 에서 대리자는 일반적인 클래스(Class)와 똑같이 취급한다. 대리자는 컴파일이 되면 일반적인 클래스로 정의되기 때문이다.
위의 코드의 LaunchActivatedEventArgs 인자는 main 함수의 인자 값이라고 생각해도 좋다. 단지 다른 점을 찾는다면 LaunchActivatedEventArgs 객체는 COM Proxy 개체로써, 앱 실행시 인자 값 등을 전달 받을 수 있다. .
이곳에서 앱의 초기화를 수행한 후에 Frame->Navigate 메서드로 사용자 인터페이스를 가지고 있는 화면으로 이동한다. C#,VB.NET 그리고 C++ 매트로 앱은 XAML(Extensible Application Markup Language)을 이용한다. 처음 .NET Framework 3.0에서 WPF 응용 프로그램에서 XAML을 주로 사용하였으나, .NET Framework 4.0에 와서는 별도의 구성요소로 분리가 되었고, 현 버전에서는 완전히 독립된 컴포넌트로 구성되었다. XML은 언어의 분류상 객체지향언어로 구분하게 되는데 XAML은 객체지향언어와 상호작용이 가능하여 그 확장의 가능성이 무한대로 볼 수 있다.
매트로 앱과 친해지기 위해서는 C++/CX도 이해해야겠지만, XAML도 항상 벗처럼 삼아야 한다. XML 프로그래밍에 익숙한 독자라면 XAML이 어렵지 않을 것이다. XML 프로그래밍은 책 몇 권의 분량으로도 모두 담지 못할 것이다. 그리고 XAML 또한 책 한 권 분량 이상으로 그 내용이 방대하므로 더 자세한 내용은 MSDN을 통해 천천히 익히길 바란다.
Figure 1 Blend for Visual Studio 2012
XAML을 처음부터 거부감을 느낄 필요는 없다. 당장은 앱을 만들기 위해 디자인을 해야 하는데, Blend for Visual Studio 2012 (과거 Expression Blend) 라는 디자인 도구가 있다. XAML은 이 도구를 이용하여 디자인을 하면 개발자도 쉽게 사용자 인터페이스를 완성할 수 있다.
본 글을 월간 마이크로소프트 2012년 5월호 특집 기사로 다루어진 내용입니다. Visual Studio 11이 Visual Studio 2012로 변경됨에 따라 본문의 내용을 일부 수정하였습니다. 그리고 현재 필자는 NCSOFT에 재직하지 않음을 참고하기 바랍니다.
엄준일 – 현재 NCSOFT에 재직 중이며, Microsoft ALM MVP와 한국 Visual Studio 팀과 블로그를 운영하고 있다.. 주로 .NET 기술을 전파하고 있고, 마이크로소프트가 지향하는 소프트웨어 개발 프로세스와 통합 및 테스팅 분야를 4년 동안 공부해왔다. 그 외에 CodePlex 오픈 소스 사이트를 통해 프레임워크, 툴 그리고 라이브러리 등을 공개하여 운영 중이다.
성큼 다가온 Visual Studio 2012
Microsoft의 대표적인 통합 개발 도구인 Visual Studio 2012의 성장세가 무척 빠르다. 지난 10년전 .NET 플랫폼과 함께 대표적인 개발 도구인 Visual Studio.NET (2003버전)를 내놓았다. 그 때의 시간이 바로 엊그제 같은데 그 이후 Visual Studio 2005, 2008, 2010을 지나 Visual Studio 2012베타 버전을 필자가 사용하고 있으니, 짧은 10년동안 Microsoft를 비롯하여 개발 언어, 개발 툴, 이 모든 것이 굉장히 많이 변해 왔음을 새삼 다시 느껴진다. 이제 Windows 8라는 새로운 운영체제가 기다리고 있다. 그리고 이를 빛내줄 Visual Studio 2012.
성큼 다가온 Visual Studio 2012과 그 발자취
Visual Studio 2012를 먼저 논하기 전에 Visual Studio가 어떤 발자취를 남기며 발전해 왔는지 간단하게 살펴보는 것도 독자들이 Visual Studio 2012를 이해할 수 있는 좋은 방법이라고 생각한다. 물론 짧고 간단하게 모든 것을 설명할 수는 없지만, 전반적인 특징만으로 그 동안 개발 트랜드가 어떻게 바뀌었고, 시장의 요구 사항이 어떻게 변화하여 왔는지 한 눈에 알 수 있는 가장 좋은 방법이라고 생각한다.
Microsoft의 첫 번째 진정한 통합 제품으로 평가 받는 제품이 Visual Studio.NET (2003버전)이다. Microsoft의 전략적인 언어인 C# 1.0과 VB.NET(v7.0)이 .NET 개발의 대표적인 언어가 되었다. 기존의 VB를 세련된 객체지향 언어로 탈바꿈하면서 이전의 VB개발자들에게 .NET 개발의 문턱을 낮출 수 있는 매우 좋은 사례이기도 하다. (단, Visual Studio 2002는 논외로 하겠다)
이 이전의 개발도구는 하나의 도구에서는 하나의 언어로만 개발을 할 수 있었고, 개발 툴 역시 그 언어에 매우 종속적이고, 다른 언어로 전환하려면 이전의 개발 도구와 개발 경험 역시 많은 부분을 새로 습득해야 했다. 특히 J# 이라고 하는 Java 언어와 라이브러리를 제공하였는데, Java 개발자들을 .NET 플랫폼 안으로 끌어안기 위한 매우 독특한 사례이기도 하다. 실제로 J#은 웬만한 Java 소스 코드를 변경 없이 .NET 목적 파일로 컴파일 할 수 있었다.
Visual Studio는 하나의 개발 도구를 통해 여러 가지 언어를 선택하여 웹 응용 프로그램, 윈도우 응용 프로그램, 모바일 개발, XML, XML 웹 서비스를 개발을 통합하고, 여기에 포함되는 .NET Framework 1.0은 응용 프로그램을 빌드하고 실행하는 구성요소로서, ADO.NET, ASP.NET, Windows Forms 등을 포함하는 .NET Framework 클래스 라이브러리와 CLR(Common Language Runtime-공용 언어 런타임)을 제공, 이 CLR 을 통해 공통된 API 집합을 만들어 다양한 언어간의 상속, 오류 처리, 디버깅이 가능하며 개발자들은 사용하려는 언어를 자유롭게 선택할 수 있게 되었다.
이 후, Windows Server 2003 제품에 표준으로 탑재하여 .NET Framework의 확산에 큰 공을 이루게 되었고, 실제로 엔터프라이즈 시장에서 이 버전을 기준으로 많은 기업용 시스템에 도입이 되었다. 현재까지도 이 버전을 기준으로 운영이 되는 기업용 시스템이 상당수 존재하고 있을 정도이다.
때는 2005년. Visual Studio 2005버전은 파격 그 자체다. 여기에 포함된 런타임인 ..NET Framework 2.0은 이전 .NET Framework 1.x에 사용된 코드를 대부분 갈아 엎었을 정도이다. .NET Framework의 뼛속까지 변신한 것이다. ASP.NET 2.0, ADO.NET 2.0, Windows Forms 2.0, C# 2.0 과 같이 '~2.0' 이라는 버전 번호를 붙였고, 많은 기능이 보완되고 확장되었다. .NET Framework 2.0 의 주요 컴포넌트들은 더 이상 .NET Framework 1.1 에 의존하지 않게 되었으며, .NET Framework 2.0 은 .NET Framework 3.5 SP1 까지 .NET Framework의 모태가 된다.
모든 것이 생소할 정도로 많은 변신이 있었는데, 그 중에서 C#과 VB.NET 언어가 대표적이다. Boxing(박싱), Unboxing(언박싱)의 반복적인 캐스팅(Casting) 의 비효율을 개선하고, 보다 객체지향적인 코드 품질을 생산할 수 있는 제네릭(Generic)이 등장하였다. 이와 함께 .NET Framework 클래스 라이브러리에 다수의 제네릭(Generic) 클래스가 추가되었다. 개발 툴도 많은 변화가 있었는데, IDE 자체의 외관도 많이 변했고, 개발 툴의 내부적인 코드에서 변화가 왔고 다양한 내부 인터페이스가 추가되었다. Visual Studio의 솔루션 탐색기에서 흔히 사용하는 '솔루션 폴더'도 이때 등장하였다.
그리고, 이 제품의 버전부터 Visual Studio Team Suite + Team Foundation Server 의 제품을 조합하여 Visual Studio Team System(VSTS) 라는 새로운 개발 패러다임을 .NET 에서도 지원하게 되었다. VSTS 를 통해 ALM(Application Lifecycle Management-애플케이션 수명 주기 관리) 을 수행할 수 있게 되었으며, IT 조직의 비지니스 전반의 생산성을 향상 시키고, 사람과 개발 조직의 변화를 가져다 주는 시초가 되었다.
.NET Framework 3.0은 새로운 개발 도구와 출시되지 않았다. 2005년 중순 Windows Vista 운영체제가 출시되면서 이에 대응하는 라이브러리가 포함이 되었다. 함께 새로운 기술도 대거 포함이 되었는데, 그 중에서 대표적으로 꼽으라고 하면 WPF와 WCF이다. XAML(Extensible Application Markup Language) 과 함께 WPF 의 출연으로 UX(User Experience) 의 시대 흐름에 진입하게 되었다. 또한, WCF는 여러 가지의 분산 통신 기술이 통합되었다. 이전의 Remoting, XML Web Services, MSMQ 등이 하나의 WCF 컴포넌트에서 제공하게 됨으로써 Messaging Model 기반으로 통합할 수 있게 되었다.
때는 2007년, 또 한번의 메이저 급 업데이트였다 언어적으로 LINQ라는 새로운 녀석 때문이다. LINQ(Language Integrated Query) 라는 이름에서 알 수 있듯이 익숙한 SQL Query 문법과 유사하여 객체 탐색에 있어 효율성이 매우 높아졌고, 그 성능도 일일이 손으로 짠 코드보다 더 빠른 경우가 있다. 이 LINQ의 기반이 되는 람다식(Lambda Expression), 익명 타입(Anonymous Type), 확장 메서드(Extension Methods)의 언어적인 새로운 스팩이 한데 아우러져 LINQ를 구성한다. XML객체, DataSet, 파일 시스템, 컬렉션 등 모든 대상이 LINQ 쿼리식의 대상이 된다. 이에 영향을 받아 JavaScript와 Java 언어에 영향을 주어 LINQ와 유사한 프레임워크가 등장하였지만, .NET 과 같이 언어적으로 통합이 되지 않았다. 마치 Method Chaining 패턴을 이용한 라이브러리로 분류된다.
이 밖에 정말 헤아릴 수 없을 정도의 많은 진보가 있었다. 개발 도구와 개발 언어, 그리고 .NET 플랫폼의 기술이 발전한다는 것은 분명 매우 좋은 일이겠지만 아마 이 시기부터 많은 .NET 개발자들이 Microsoft의 기술 발전을 따라가기 벅차했었다.
2010년에 이르러, Visual Studio 2010버전이 출시되었다. 너무 빠른 .NET 기술의 발전의 탓일까, 이 때는 언어와 .NET Framework보다는 Visual Studio라는 개발 툴에 가장 초점이 맞추어졌다. 그 중 핵심 키워드라고 할 수 있는 것 3가지는 "시각화", "디버깅", "프로세스" 일 것이다. (필자의 의견이므로 Microsoft가 추구했던 것과는 다를 수 있다.) 이 세 가지의 핵심 키워드는 시각화, 협업에 있어 코드의 이해를 좀 더 쉽게, 그리고 복잡한 데이터를 한 눈에 알 기 쉽게… 디버깅-디버깅 시 데이터의 수집이 혁신적으로 발전하였고, 물리적으로 분리된 티어(Tier)간에 데이터 수집… 프로세스, 애자일을 강조하고 애자일한 통합 프로세스를 개발 툴에 제공.
.NET Framework 4.0은 .NET Framework 2.0기반이 아닌 새로운 프레임워크로 구성되었고, 멀티코어 처리를 위해 강력한 병렬 처리 라이브러리(Parallel Libraries)가 있다. 또, 동적 언어 런타임(Dynamic Language Runtime)으로 정적 형식과 동적 형식의 경계를 허물었으며, 루비(Ruby), Lisp, JavaScript, 파이썬(Phython), PHP와 같은 동적 언어와 상호 운용이 가능하다. 예를 들자면, C# 언어로 파이썬 개체와 상호 연동이 가능하다는 것이다.
제품의 버전 / 특징
2002년
Visual Studio .NET 2002 / .NET Framework 1.0 첫 통합 개발 환경 발매 당초의 제품명은 ' Visual Studio .NET
C# 1.0 / Visual Basic .NET (7.0) C# 은 마이크로소프트의 새로운 객체 지향 언어 Visual Basic 도 객체지향 언어
2003년
Visual Studio .NET 2003 / .NET Framework 1.1 (5월)
C# 1.1 / Visual Basic .NET (7.1) 모두 버전 업
Windows Server 2003 .NET Framework 1.1 표준 탑재
2005년
Visual Studio 2005 / .NET Framework 2.0 (12월) ClickOnce 배포 제네릭 클래스 도입 ASP.NET 2.0, ADO.NET 2.0, Windows Form 2.0 리팩토링 기능 / 코드 스니펫 무료 Express Edition (C#, VB, C++)
C# 2.0 / Visual Basic 2005 (8.0) 제네릭 대응
Visual Studio 2005 Team System
SQL Server 2005지원
2006년
.NET Framework 3.0 (11월) 코어 부분은 .NET Framework 2.0 그대로 WPF(Windows Presentation Foundation) WCF(Windows Communication Foundation) WF(Windows Workflow Foundation) CardSpace
Windows Vista .NET Framework 3.0 기본 탑재
2007년
Visual Studio 2005 Service Pack 1 (6월)
ASP.NET AJAX 1.0 (추가 모듈) AJAX Web Application 개발이 용이
Expression Blend Expression Studio 첫 제품 WPF 어플케이션의 GUI 구축
Visual Studio 2008 / .NET Framework 3.5 (11월 경) 개발 코드명 'Orcas' WPF 의 GUI 설계 가능 Javascript 디버그 기능 및 IntelliSense ASP.NET AJAX 표준 탑재 .NET Framework 2.0, 3.0, 3.5 선택 가능
C# 3.0 / Visual Basic 2008 (9.0) LINQ 기능
SQL Server 2008
Windows Server 2008
Visual Studio Team System 2008
2008년
Visual Studio 2008 SP1 / .NET Framework SP1 ASP.NET Dynamic Data ADO.NET Entity Framework / Data Services (Astoria) WCF Atom Pub Services 클라이언트 프로파일(Client Profile)
VSTS Windows Server 2008 지원 SQL Server 2008 지원 성능 향상 및 개선
Visual Studio SDK 1.1 (SP1) Visual Studio Shell 재배포 패키지 경량화 DSL 출력 미리보기 등…
Visual C++ 2008 오피스 리본 스타일 Interface 고급 GUI 컨트롤 등…
2010년
사용자 친화적인 Visual Studio IDE
코드탐색강화
개발 툴에서 다양한 .NET Framework 개발 환경 제공
JavaScript 언어 개발 환경 강화
다양한 플랫폼 지원
64 Bit Mixed-Mode 디버깅
Managed 와 Mixed-Mode 의 Minidump 디버깅
Historical Debugger
디버그 내용을 기록, 재생
프로젝트 관리 및 프로세스 통합
Visual Studio 2012과 함께 매트로 앱 개발
Visual Studio 2012의 가장 큰 핵심은 바로 Windows 8 운영체제이다. Windows 8은 매트로 응용프로그램이라는 새로운 환경과 WinRT(Windows Runtime)인 새로운 런타임을 제공한다 그리고 Visual Studio 2012는 Windows 8 운영체제에 가장 최적화된 개발 툴이다. 독자들은 또 새로운 것을 배워야 하나라고 한숨을 쉴 수도 있을 것이다. 하지만 섣부른 독자들의 판단은 잠시 후에 하기 바란다. 왜냐하면 Windows 8 개발은 새로운 환경이면서도 새로운 환경이 아닐 수도 있다. Windows 8 운영체제를 사용하고 WinRT APIs 집합을 사용하는 것 이외에는 아무것도 변한 것이 없기 때문이다. 단지 바뀐 것은 여기에서 개발된 응용 프로그램은 데스크탑 컴퓨터, 테블릿, 모바일 환경 모두 실행되고 배포할 수 있다는 것이다.
최근 개발 환경을 엿보자면 C++을 사용하는 네이티브 개발과, NET에서 지원하는 C#과 같은 관리 언어, 그리고 웹 개발에 필요한 HTML과 JavaScript, 이 중에 단 한가지 기술 영역만 있으면 Windows 8 매트로 응용 프로그램 개발 준비는 끝이라는 것이다. 우리가 흔히 사용하는 스마트 폰을 보면 알 수 있듯이, 개발자는 단지 '위치 정보', '화면의 표현 방법', '데이터 연동', 그리고 스마트 폰을 가로로 볼 때와 세로로 볼 때와 같은 일상적인 기능을 제공하는 APIs를 익히기만 하면 된다. 기존에 Visual Studio를 사용하여 개발해 본 독자라면 그 만큼 진입 장벽이 낮다.
윈도우 폰7 개발처럼 테블릿 시뮬레이터가 제공이 된다. Windows 8 테블릿이 지원하는 대부분의 모든 기능을 이 시뮬레이터에서 테스트를 해 볼 수 있다. 윈도우 폰7 개발처럼 반드시 시뮬레이터가 필요한 것은 아니다. 실제 시뮬레이션이 필요 없다면 곧바로 로컬 데스크 탑에서 매트로 앱을 실행해 볼 수 있다.
Figure 1 Visual Studio 2012 매트로 앱 실행 및 디버깅
Figure 2 시뮬레이터 실행 환경
더불어 Visual Studio에서 제공하던 성능 측정 도구와 코드 정적 검사를 매트로 앱 개발 환경에서도 그대로 이용할 수 있다. 이는 곧 Visual Studio 2012이 Windows 8 개발에 가장 최적화가 되었다는 의미가 된다.
Figure 3 매트로 앱 성능 측정 및 진단
간략하게 나마 Visual Studio 2012과 Windows 8 개발에 대해 살펴보았다. 필자가 얘기한 것처럼 개발자에게 있어 새로운 환경이지만, 반대로 전혀 새롭지 않기도 하다. Visual Studio로 간단한 앱을 만들 수 있는 실력이라면 곧바로 Windows 8 매트로 앱을 개발할 수 있을 정도로 진입 장벽이 낮다. 물론, 좀 더 기술적이거나 독창적이고 예쁜 앱을 만드는 것은 더 많은 노력이 필요하다. 단지, 앱 개발자는 자신만의 앱 개발에만 집중하면 된다.
Figure 4 Windows 8 개발에서 배포까지
Visual Studio 2012과 함께 매트로 환경의 게임 개발
데스크 탑과 테블릿, 그리고 모바일 앱 중에서 단연 게임이 빠질 수 없다. 매트로 환경에서 게임 개발은 아직 시장이 포화되지 않은 장르이다. 그 만큼 게임 개발자에게 있어 매트로 환경에서 게임 개발은 매우 유혹적이기도 하다. 더 반가운 소식은 매트로 게임 개발에 필요한 지식은 게임 개발자에게 익숙한 C++언어와 DirectX다. DirectX를 이용하여 2D, 3D 게임을 개발할 수 있다.
얼마 전까지만 해도 Microsoft가 전략적으로 게임 개발을 지원하던 프레임워크인 XNA를 매트로 게임 개발에 지원하지 않는다. 대신 기존 게임 개발자에게 기존 개발 환경을 그대로 이어갈 수 있는 DirectX를 선택한 것이다.
여기까지
따라오시면서 우분투의 사용자 인터페이스와 몇 가지 명령어가 어느 정도 자연스러워 지셨는지요? 몇 번 우분투를 사용해 보시면
알겠지만, "우분투 소프트웨어 센터"에서 필요하신 소프트웨어를 편하게 모두 다운로드 받으실 수 있답니다. 급하신 분들은 먼저 개발
도구와 툴 들을 설치하셔도 됩니다. ^^*
어제 오늘 할
것은 우분투의 테마를 좀 바꾸어볼까 합니다. 기본 테마가 나쁘지는 않지만, 제가 주로 사용하는 개발 툴은 아이콘을 크기를 줄이고,
더 넓은 화면으로 쓰고 싶습니다. 이럴 때 유용한 소프트웨어가 있으니, 다음의 링크를 참고하시기 바랍니다.
이제 이 정도면
우분투에서 개발하기 위한 환경으로 쓰기에 큰 부족함은 없을 겁니다. 단지 부족한 면이 있다만 LibreOffice로 오피스
작업은 어느 정도 가능하지만, OutLook과 같은 강력한 오피스 소프트웨어가 없는 것이 아쉽네요.
이제 Mono개발 도구인 MonoDevelop과 몇 가지 유용한 소프트웨어를 찾아서 설치해 봅시다. 이번에는 우분투의 "우분투 소프트웨어 센터"
를 통해 설치하려고 합니다. 지금까지 터미널로 작업했던 소프트웨어 설치 작업은 이 우분투 소프트웨어 센터를 통해 가능합니다만,
터미널은 리눅스 사용에 있어서 꼭 익숙해져야 하기에 좀 고생해서 터미널로 작업을 한 것이니, 이 전의 터미널 작업들은 꼭 반복해서
외우시기 바래요.
먼저 아래와 같이 프로그램에서 우분투 소프트웨어 센터를 실행합니다.
우분투 소프트웨어 센터의 검색에서 "mono"라고 검색해 보세요. 많은 Mono와 관련된 소프트웨어가 검색이 됩니다.
오호! 저 아래에 MonoDevelop이 보이는군요. 자자! 잠시 바로 설치를 누르시 마시고, "더 많은 정보" 버튼을 클릭해 보세요.
설치 작업은 관리자의 권한이 필요하므로 암호를 입력해 줍시다.
그럼 아래와 같이 "확장 기능"이 보이는데요. 걍 모두 선택해서 설치하세요. 모두 피가 되고 살이 되거나, 어쩌다가 한번씩 필요한 기능들입니다.
그리고 "우분투 소프트웨어 센터에서" 아래의 몇 가지 추가적인 소프트웨어도 설치해 줍시다.
Mono IL Contract
Mono Runtime
Mono Documentation
Mono Runtime (Terminal)
gsharp
Monodoc (Http)
이쁘게 Mono Develop이 설치가 되었네요.
실행시
켜보시면 아래와 같이 MonoDevelop이 실행이 됩니다. 깔쌈한 화면이 금방이라고 코드를 짜고 싶어지네요. 이것 저것 한번씩
만져보시고 Visual Studio와 비교해 보시면서 좋은 점, 나쁜점을 찾아보시면 더 재미있겠죠?
2012년 4월 26일, 고대하던 우분투 12 LTS 가 릴리즈 되었습니다. 우분투는 데비안 계열에서 파생된 사용자에게 친숙한 데스크탑 운영체제입니다. (더 자세한 내용은 이 링크를 참고하세요) 왜 갑자기 쌩뚱맞게 우분투 얘기가 나오는 것인가라고 의아할 수 있을 겁니다. 이유는 우분투에서 Mono를 이용하여 크로스 플랫폼을 지원하는 소프트웨어를 만들자는 것에 의미가 있습니다.
그 중, Mono는 .NET 플랫폼과 .NET Framework를 충실하게 구현한 오픈 소스이며, 크로스플랫폼을 위한 내부적인 기술 및 지원은
오히려 .NET 보다 앞섭니다. .NET의 복제품이 아닌, .NET의 확장판으로 보시기 바랍니다. .NET 플랫폼이라는 어떤
무형/유형의 구현체는 ECMA라는 비영리 표준화 기구와 ISO인 국제 표준화 기구에서 표준으로 정의되고 있습니다. 즉, Mono는
표준화 기구에서 인정한 표준을 구현한 것일 뿐이며, Microsoft 와는 어떠한 라이선스 관계도 맺지 않는 자유 소프트웨어
진영입니다.
(정확히 비표준 및 표준에 등재된 것들은 언어 스팩과 CIL 스팩입니다. 그 외적인 CLR 부분은 Mono가 크로스 플랫폼을 위해 자체적으로 구현한 레벨이 되겠지요. 전반적인 내용의 의도만 이해하시기 바랍니다.)
자체적으로 .NET
Framework과 CLR(Common Language Runtime), CIL(Common Immutable Langauge),
JIT(Just in Time) 등을 크로스 플랫폼에서 동작하도록 매우 심혈을 기울여 탄생한 독자적인 플랫폼입니다.
더불어 Mono가 혼자서 모든 것을
한 것이 아닙니다. 자유 소프트웨어 진영의 GTK(그래픽 툴 킷)을 이용하여 데스크탑 응용 프로그램을 리눅스, 윈도우, 맥,
모바일에서 돌릴 수 있습니다. 또한, ASP.NET 웹 응용 프로그램을 Apache Tomcat, FastCGI, 또 최근에 높은
성능으로 주목을 받고 있는 Nginx 와 같은 WAS(Web Application Server)에서 돌릴 수 있습니다.
자
유 소프트웨어 진영의 훌륭한 운영체제와 어디에서나 돌아가는 개발 환경 및 서버 운영 환경의 크로스 플랫폼 인프라.. 그 동안
Microsoft가 제공하는 편안한 윈도우 운영체제와 IIS(Internet Information Service) 이 두 가지에
의존하며 개발하던 우물안의 개구리에서 이제는 더 큰 곳을 바라보아야 할 때인 것 같습니다. 그것을 시작하는 첫 걸음이 바로
Mono 입니다.
이 쯤에서 Mono 플랫폼과 그 인프라의 장점을 한번 살펴봅시다.
1. Mono 플랫폼 전체가 오픈 소스이며, 그 구현체는 매우 수준이 높고 확장 가능합니다. (.NET 플랫폼과 비교하여)
2. MonoDevelop라는 통합 개발툴(IDE)은 무료이며, 리눅스, 윈도우, 맥 등에서 설치하여 쓸 수 있습니다.
3. 운영체제 구매 비용이 없고, 웹 서버 구매 비용이 없습니다. 4. 호스팅 업체에서 우분투와 같은 리눅스(Linux) 호스팅 vs 윈도우 호스팅의 가격 = 1개월당 각각 1,000원 : 20,000원입니다. Linux는 쓸수록 금전절약입니다.
5. 가볍습니다. 운영체제 용량과 개발 환경 구성을 모두 다 해서 7.4GB 입니다. (현
재 설치된 것들이 우분투 12 LTS, Gnome시리즈 유틸, Mono Runtime, MonoDevelop, JDK6,
JDK7, OpenJDK6, OpenJDK7, Eclipse, STS(SpringSource Tool Suite),
IntelliJ, NetBeans, KDevelop, Qdevelop 등등 )
6. 윈도우 기반의 .NET 응용
프로그램은 체감적으로 모든 것이 느립니다. 하지만 리눅스에서는 체감 실행 속도가 더 빠른 것 같습니다. (윈도우용
MonoDevelop보다 리눅스용 MonoDevelop 실행 속도가 나은 것 같습니다.-컴파일, 실행속도 등등)
이쯤에서 한 가지 알기 힘든
궁금증이 생깁니다. "왜 마이크로소프트는 충분히 기술력이 있음에도 크로스 플랫폼을 포기할까?". 정말 왜일까요? 언뜻 생각해보면
당연히 자사 운영체제에 특화되어야 혁신적인 기능이나 기술이 빠르게 추가될 수 있습니다. .NET Framework만 보아도
WINAPIs와 COM로 도배되어 있고, WCF만 보아도 IIS나 윈도우 서비스에서 편하게 쓸 수 있도록 하였으며, 알 수 없는
NetTcp, NetNamed, NetMsmq, MsmqIntegration 비표준 웹서비스 프로토콜을 사용하지요. 물론 이런
것들이 필요에 의해서 나오긴 했지만, 윈도우라는 족쇄에 묶어둘 수 있는 좋은 기술이기도 합니다.
그리고 오픈 소스 진영의 라이선스
정책이 마이크로소프트가 크로스 플랫폼을 지원하지 못하게 되는 장벽이 될 수도 있습니다. GPL이냐 LGPL이냐, 또는 정적 링크냐
동적 링크냐, 무료 배포이냐 상용 배포이냐에 따라 마이크로소프트의 제품의 상표권이 문제가 될 수도 있고, PDB 심볼에 원작자의
요구 문건이 포함될 수 있고, 최악의 경우에는 상용 소프트웨어의 소스 코드를 공개해야 할 수도 있을 겁니다. 물론 잘 알아보고
써야겠지만, 언젠가는 라이선스 정책은 변경이 될 수 있지요. 그런 오픈 소스 진영의 라이선스 정책 등으로 휘말리지 않는 방법이
독자 플랫폼으로만 살아가는 것일 겁니다.
하지만, 이제는 세상이 변해가고
있습니다. 초기에 아이폰의 iOS와 안드로이드 앱을 서로 다른 기술로 구현을 해야 했지만, 이제는 그런 개고생은 하지 않아도
되었습니다. C#이라는 언어만 알고 있으면, Mono for Android로 안드로이드 앱을 만들고, 이 코드를 재사용하여
MonoTouch for iOS로 아이폰 앱도 만들 수 있겠지요. 이 코드를 재사용하여 Windows Phone 앱도 만들 수
있겠죠.
필자는
BASIC, QBASIC, Turbo BASIC을 죽도록 해 본적이 있습니다. 그리고 Turbo C를 죽도록 해 본적이 있습니다.
그리고 Turbo Pascal을 죽도록 해 본적이 있습니다. 그리고 거의 7년 동안 .NET과 C#, ALM, Testing을
죽도록 한적이 있습니다. 그리고 최근에는 JAVA, Python, C++ COM 을 죽을 만큼은 아니고 적당히 공부하고 있습니다.
그 전에는 즐겨 사용하던 C#이라는 언어의 철학을 이해한다고 했지만, 이해하지 못했습니다. 다만, 이제서야 조금은 이해가
갑니다.
아주 작은 예를 들면,
왜 C# 언어의 람다식이 JAVA 언어의 람다식보다 좋은가? 왜 C# 언어의 Attribute이 JAVA 언어의 Annotation보다 좋은가? 왜 C# 언어의 익명 메소드가 JAVA 언어의 익명 메소드보다 좋은가? 왜 .NET의 보안 모델이 JAVA의 보안 모델보다 좋은가?
물론 JAVA가 더 좋은 것도 많답니다. 오해 마시길…
가장 큰 주제의 질문으로써, 왜 윈도우보다 크로스 플랫폼이 좋은가?
우
리가 사용하는 .NET 플랫폼이 생산성이 좋고, 성능이 좋고…를 우물 안에서 외치며 섣불리 판단하는 노예 아닌 노예가 되지
맙시다. 이제야 저도 느끼는 것이지만, 그런 바보 같은 사람이 되지 않기를 바랍니다. 자신의 종교만이 유일한 신이니까, 다른
종교를 무시하면 그 사람만큼 불쌍해 보이는 사람도 없습니다. 진정 과학이 발달하여 "신 같은 것은 없어!! 우리는 외계인의
후예!!" 라면… 완전 반전이죠^^; (과학적으로는 이런 얘기들의 이론이 뒷받침 되고 있습니다.)
현재 스스로 개발자라면 스스로에게 무언가의 질문을 던져볼 시기인 것 같습니다.
저와 함께 우분투 운영체제에 MonoDevelop을 써보느냐!! 아니면 윈도우에 Visual Studio를 쭉 쓰느냐!!
앞으로 총 11회의 연재를 통해 당신을 우분투와 MonoDevelop를 주무르는 멋진 개발자로 만들어 드리겠습니다.
MSDN Virtual Lab에서는 Microsoft Team Foundation Server 2010 제품을 온라인으로 트레이닝 받을 수 있는 서비스가 있습니다. Team Foundation Server 2010 을 설치할 여력이 되지 않거나, 제품을 직접 시연하고 싶은 사용자에게 가상 환경을 제공해 주고, 가상 환경에서 여러 시나리오를 따라해 볼 수 있습니다.
이 MSDN Virtual Lab 환경은 Internet Explorer 만 있으면 곧바로 서비스를 체험할 수 있습니다. 다만, 이 서비스는 가상의 환경으로 제공이 되기 때문에 가상 환경에서 실습이 끝난 이후에는 생성된 팀 프로젝트와 데이터는 모두 삭제가 됩니다.
먼저 실습을 하고자 하는 모듈의 주소를 Internet Explorer 를 통해 접속을 합니다.
Launch Virtual Lab을 선택하면 아래와 같은 팝업이 뜨는데, 실습 환경의 가상 환경을 제공하기 위한 준비를 합니다. 아마도 실습을 하기 위한 스냅샷으로 돌아가고 있겠지요..?
이 가상 환경 실습은 원격 데스크톱 연결을 이용하는데, Connect 버튼을 클릭하면 곧바로 가상 환경을 원격 데스크톱 세션을 통해 접속이 됩니다.
접속이 되면 가상 환경 접속에 접속할 수 있는데, 마치 Hyper-V 관리 콘솔과 같은 화면이 나타납니다. 물론 단 하나의 VS2010CTP 라는 가상환경에만 접근할 수 있습니다.
아래오 같이 가상 환경이 접속이 되면, 텅 빈 윈도우 바탕 화면이 나타나는데, Start 버튼을 클릭하면 우리가 실습에 필요한 모든 소프트웨어가 설치가 되어 있습니다. 우측의 패널에는 실습 단계를 차례대로 진행할 수 있고, 상단에 HTML과 PDF 문서를 다운로드 받을 수 있습니다.
사실 Team Foundation Server 2010의 MSDN Virtual Lab 서비스가 나온지는 좀 되었지만, 아직 많이 알려지지는 않은 듯 합니다. 소프트웨어 패키지를 구매하고 설치하고 MSDN을 통해 기능을 익힐 수 있지만, 이렇게 가상화 서비스를 이용해 부담 없이 하드웨어나 환경적인 제약 없이 실습 공간을 제공해 주는 것을 보면 Before Services 가 짱 이네요.
(BE란 ? 고객들이 제품 구매에 앞서 제품을 직접 써보거나 충분히 경험해 본 다음 구매를 결정할 수 있도록 하는 다양한 체험 프로그램 서비스를 말한다. 기존 서비스 방식인 애프터서비스(AS)는 고객들이 제품을 구매한 후 제품에 대한 차후 서비스를 받을 수 있다. )
Visual Studio 11의 솔루션 탐색기는 이전 버전에 비해 매우 독특한 구조를 가지게 되었습니다. 그 중에서 Visual Studio 11에서 솔루션 탐색기 기능을 최대한 활용하는 방법을 살펴볼텐데요, 그냥 가볍게 보시면 될 것 같습니다.
1. 다중 인스턴스로 사용하기
다중 인스턴스는 솔루션 탐색기를 하나가 아닌 여러 개로 띄울 수 있는데요. 단, 현재 로드된 솔루션의 솔루션 탐색기 인스턴스를 생성할 수 있습니다. 만약, Visual Studio 11에서 여러 솔루션을 하나의 Visual Studio 11 인스턴스에서 실행할 수 있다면 다중 인스턴스의 솔루션 탐색기가 더욱 편리할 거라는 아쉬움이 있네요.
아래의 그림과 같이 우측 끝에 있는 아이콘을 클릭하면 똑같은 인스턴스를 생성한답니다.
여러 솔루션 탐색기의 인스턴스를 사용하여 프로그래을 작성하는 프로젝트에 스크롤을 위치시키고, 또 하나는 단위 테스트 프로젝트에… 또 하나는 전체 솔루션이 훤히 보이도록 띄어놓았습니다.
이제 하나의 솔루션 탐색기에서 마우스 스크롤 쫙쫙~ 올리고 내리고 할 필요가 없어졌네요. 더불어 멀티 모니터를 사용한다면 효과가 금상첨화겠지요?
2. 코드 파일 미리보기
중간에 보이는 아이콘의 이름 "Preview Selected Items"은 말 그대로 코드 파일을 미리 보는 기능이랍니다. 이 옵션은 Visual Studio 11을 설치하면 기본적으로 선택되는 옵션입니다.
이 기능은 솔루션 탐색기에 파일을 한 번 클릭할 때마다 에디터 창이 열립니다. 좌측의 빨간색 탭은 솔루션 탐색기에서 코드 파일을 더블 클릭하거나 F7을 누를 때 일반적으로 좌측부터 정렬되는 에디터입니다.
오른쪽의 노란색의 탭 하나가 바로 한 번 클릭할 때마다 열리는 미리 보기 탭입니다. (필자는 개인적으로 이 옵션을 껐답니다 ^^;)
3. 솔루션 탐색기를 격리시키기
솔루션 탐색기를 격리시키는 방법(용어는 필자가 나름대로 칭하였습니다)입니다. 이 방법이 꽤나 쓸만한 기능인데, 솔루션 탐색기의 선택된 항목이 솔루션 탐색기의 최상위 루트가 되는 기능입니다. 예를 들어, 아래와 같이 Core 프로젝트를 펼치면 굉장히 길어지는데요, 단위 테스트도 같이 하려면 Core.Tests 프로젝트도 펼쳐져 있어야 합니다. 이러다가 대부분 솔루션 탐색기가 위아래 정신 없이 스크롤하게 됩니다.
그럼 솔루션 탐색기 다중 인스턴스를 이용해서 좀 더 스마트하게 사용해 볼까요? 바로 "Scope to This" 기능입니다.
이 기능을 이용해서 아래와 같이 스마트하게 솔루션 탐색기를 배치할 수 있습니다. 자주 코딩하는 Core 프로젝트랑 Core.Tests 프로젝트랑 각각 최상위 루트에 배치해서 귀찮은 스크롤도 없어지고 하위 여러 자식의 트리구조를 없애서 보기에 깔끔해 졌네요.
이런 경우는 인터페이스 프로그래밍을 할 때도 매우 유용합니다. 인터페이스를 선언하고 이를 구현하면 서로간에 왔다 갔다 하는 경우가 매우 많거든요. "Scope to This" 기능으로 좌측에 인터페이스 파일 하나만 배치시키고, 우측에서는 인터페이스를 구현하고 파생되는 구현 클래스가 뭉쳐있는 폴더만 격리시켰습니다.
우리는 항상 렌더링 작업을 하기 전에, 이 작업을 해주었습니다. 이것은 과연 무슨 의미를 가지고 있는 것일까요?
불행하게도(?) Direct2D에서 각종 변환 작업을 위해서는 행렬( Matrix )을 사용합니다. 저는 고등학교 2학년 학기 초에 배웠던 기억이 있습니다. 그 때는 주로 연립 방정식의 해를 구하기 위해서 풀이 방법을 익혔습니다. 아마 대부분 저와 비슷하실 것이라 생각이 듭니다.
왜 뜬금없이 행렬이 등장했는지를 언급하고자 하면, 상당히 고통스럽습니다.^^ 저는 이 행렬에 대한 깊은 이해를 원하지 않습니다. 제가 원하는 것은 이 행렬 관련 API를 이용해서 화면 상에 나오는 오브젝트들의
이동이나 회전 등과 같은 변환을 표현 할 수 있다는 것만 아셨으면 좋겠습니다.^^
Direct2D 에서는 3ⅹ2 행렬을 사용합니다. 행렬의 각 성분들은 아래와 같습니다.
M11
Default : 1.0
M12
Default : 0.0
M21
Default : 0.0
M22
Default : 1.0
M31
OffsetX : 0.0
M32
OffsetY : 0.0
이 행렬은 D2D1_MATRIX_3X2 라는 구조체로 표현됩니다. Direct2D에서는 이 행렬을 손쉽게 다루기 위해서 Matrix3x2F 라는 유틸리티 기능을 지원합니다. 우리는 주로 이 Matrix3x2F 의 기능을 이용해서 변환 정보를 설정할 것입니다. 행렬의 M11, M12, M21, M22 성분은 회전과 확대/축소와 관련된 수치가 입력됩니다. M31과 M32에는 이동과 관련된 수치가 입력됩니다. 행렬의 수치를 통해서 우리가 원하는 변형을 하고자 할 때, 이들 수치를 직접 입력해서 행렬을 제어하기는 무척 어렵습니다.
그래서 Direct2D 에서 제공하는 개발자 편의를 위한 여러 클래스들을 사용해서 이들 수치를 제어합니다.
스크린 좌표계
변환의 이해를 위해서는 좌표계에 대한 이해가 필수적입니다. 우리가 가장 많이 사용하는 좌표계는 당연히 2차원 좌표계입니다. 바로 모니터가 2차원이기 때문입니다. 하지만 이전에도 언급드린 적이 있지만,
컴퓨터 모니터의 좌표계는 우리가 일반적으로 알고 있는 2차원 좌표계가 아닙니다.
좌측이 우리가 흔히 학창시절에 배우는 2차원 데카르트 좌표계( 2D Cartesian coordinate system ) 입니다. 우측이컴퓨터모니터가사용하는스크린좌표계입니다. 이점잘숙지하시고, 다음내용을보시기바랍니다.^^
이번에 제공되는 샘플의 결과는 다음과 같습니다.
이동( Translate )
먼저 살펴 볼 것은 이동( Translate ) 입니다. 가장 위에 있는 이미지가 바로 이동만 적용된 형태입니다. 샘플에서는 단순히 ( X,Y ) 축으로 +20씩만 움직였습니다
D2D1::Matrix3x2F::Translation() 를 통해서 우리가 원하는 이동을 수행하고 있습니다. 쉽죠? 이런 식으로 하면 행렬에 대한 깊은 이해도 필요하지 않을 것이라 생각합니다.^^
회전( Rotate )
두 번째는 회전입니다. 샘플에서는 두 번째 그림과 세 번째 그림이 바로 회전 변환에 대한 결과물입니다. 사실 회전은 행렬의 성분들을 굉장히 복잡한 수치로 변경시킵니다. 왜냐하면 이들 회전 수치들은 삼각함수 값들이기 때문입니다.
하지만, 두려워하지 마시기 바랍니다. Direct2D 에서는 이를 편리하게 수행하기 위해 ::D2D1::Matrix3x2F::Rotation() 를 제공하고 있습니다. 회전 시킬 때, API 에 입력되는 값이 회전량과 회전 중점입니다. 회전량의 경우에는 라디안 값이 아닌, 각도 값이 입력됨을 주의하시기 바랍니다.
즉, Degree 값입니다. 그리고 이 회전량의 경우 음의 값과 양의 값을 모두 입력이 가능합니다. 음의 값이 입력이 되면 시계 반대 방향으로 회전을 수행하게 됩니다. ( 양수면 시계방향으로 회전 합니다. )
또한 회전 중점의 경우도 유의해야 하는데, 아래의 그림을 보시기 바랍니다.
좌측 그림의 경우에는 물체의 중점 위치를 기준으로 회전을 수행한 것입니다. 반면에, 우측 그림의 경우에는 물체의 좌측 상단을 기준으로 회전을 수행한 것입니다. 결과물이 다르죠? 이처럼 회전 변환을 할 때는 이 두 가지를 잘 고려해서 수행해야 합니다.
지금까지 이동과 회전을 각각 수행해 보았습니다. 만약에 이동 작업과 회전 작업이 모두 한 오브젝트에 필요하다면 어떻게 해야 할까요? 그런 경우가 필요하다면 바로 행렬의 곱셈 작업을 적용합니다. 그러면 이 두 가지 작업을 모두 표현 할 수 있습니다. 그런데 이 때 주의 할 부분이 있습니다. 행렬은 교환 법칙이 성립하지 않습니다. 즉 행렬 A, B 가 있을 때, A * B != B * A 라는 것입니다.
이 코드가 우리의 샘플에서 두 번째와 세 번째 그림의 차이를 보여주는 것입니다. 두 번째 그림은 이동을 한 후에 회전 작업을 수행한 것이고, 세 번째 그림은 회전 작업을 수행한 후에 이동 작업을 수행한 것입니다.
실제로 우리가 수행하는 모든 변환은 좌표계 변환입니다. 위에서 우리가 했던 변환은 모두 실제로 오브젝트들의 좌표계를 변환시켜서 얻은 결과물들입니다. 이 개념들은 분명히 이해하기 어려운 부분들입니다. 굳이 이렇게 어려운 부분까지 이해하실 필요는 없습니다.
샘플을 올려드리니, 수치를 바꿔보면서 여러 결과들을 눈으로 확인해 보시기 바랍니다.^^
안녕하세요. 오랫만에 블로그에 글을 올립니다. 지난번 Visual Studio Camp에서 옴니버스 형식의 세미나로 Visual Studio 2010 Service Pack 1에 대하여 말씀을 드렸던 세션이 있는데, 발표 자료와 더불어서 Visual Studio 2010 SP1에 대한 간략한 소개를 위하여 글을 씁니다.
Visual Studio의 새 도움말 시스템
Visual Studio 2010 RTM 버전부터는 새로운 형태의 도움말 시스템이 도입되는데, 로컬 웹 서버를 통하여 도움말 컨텐츠가 제공되는 방식으로 이전의 Visual Studio 2005와 Visual Studio 2008에서 제공되던 방식과 다르게 제공됩니다. Visual Studio 2005와 Visual Studio 2008의 경우 자체 URI Scheme을 Windows Registry에 등록하고 이를 Internet Explorer를 통하여 탐색할 수 있도록 확장하는 방식이었습니다. 그러나 새로운 도움말 컬렉션을 추가하거나 삭제하는 과정에서 시스템 성능에 따라 재배열 시간이 상당히 오래 걸리는 문제가 있어 불편한 점도 있었습니다. 이러한 방식 대신 더 단순하지만 더 유연한 방식으로 바꾸게 된 듯 합니다.
그렇지만 이전 버전에서 제공되던 색인, 검색 기능 등이 웹 사이트 형식으로 바뀌면서 이전에 사용했던 기능들이 사라져서 아쉬운 점도 있었는데 이번 Service Pack 1에서는 다시 Help Browser Software가 부활했습니다. 그래서 로컬 웹 서버로 컨텐츠를 보여주는 것은 동일하지만 Visual Studio를 통해서 컨텐츠를 탐색하면 Help Browser가 별도로 나타납니다.
그리고 이번 도움말 시스템에서의 백미는 인터넷을 통한 업데이트가 가능해졌다는 점입니다. 실제로 설치한 적이 없는 제품이라 할지라도, 그리고 DVD를 통해서만 설치할 수 있는 전체 버전의 MSDN 안에서만 제공되던 컨텐츠까지도 인터넷을 통하여 항상 최신 버전을 다운로드받아 로컬 도움말 컬렉션에 추가하거나 필요하지 않으면 삭제할 수 있습니다.
Silverlight 4에 대한 지원 추가
Visual Studio 2010 SP1을 설치하면 별도로 Silverlight 4에 대한 Tools for Visual Studio를 추가 설치할 필요가 없습니다. Silverlight 4부터는 이전의 WPF보다 작지만 웹이 아닌 데스크탑 및 오프라인 환경에서 잘 동작하는 응용프로그램을 제작할 수 있는 기능이 더 완벽하게 제공됩니다. 이러한 기술 전반은 권한 상승이 적용된 실버라이트 응용프로그램에서 가능한 것이며, 여기에는 파일 입출력이나 로컬 COM 컴포넌트와 연계하는 방안이 포함되어있습니다. 아래의 예제는 권한 상승이 적용된 Silverlight 4 기반 응용프로그램 샘플의 소스 코드이며, 사용자 프로필 디렉터리 내의 "내 그림" 폴더에 있는 이미지들을 열거하고 뷰어를 통하여 보여주는 예제입니다.
위 프로그램의 소스 코드 중 파일 입출력에 대한 소스 코드를 실제로 발췌하면 다음과 같습니다.
Visual Studio 2010 SP1을 설치한 후 Silverlight 프로젝트를 생성하려고 하면 다음과 같이 대화 상자가 나타나는데 이 때 Silverlight 4를 사용하도록 지정하면 사용이 가능합니다.
IIS Express 7.5에 대한 지원 추가
Visual Studio 2005부터는 Cassini Web Server라고 불리던 ASP.NET Development Server를 통하여 전체 버전의 IIS가 없어도 쉽게 ASP.NET 응용프로그램을 테스트할 수 있는 환경이 제공되었습니다. 그러나 Visual Studio 2008의 등장과 더불어 IIS 역시 대폭 업그레이드되어 Windows Server 2008부터는 완전히 새로워진 아키텍처를 기반으로 하는 IIS 7이 등장하게 됩니다. 이에 따라, 어느 정도 호환성을 보장하기는 하지만 이전의 IIS와는 많이 달라졌기 때문에 Cassini Web Server 만으로는 테스트가 어려운 점이 많았습니다. 통합 IDE의 이점도 확보하고, 전체 버전의 IIS를 사용하지 않으면서도 충분히 모든 기능을 점검해볼 수 있는 방향으로 가기 위하여 IIS Express가 등장하게 됩니다.
IIS Express를 사용하는 것은 실제 IIS를 사용하는 것과 비교했을 때 다음과 같은 장점이 있습니다.
ASP.NET Development Server와는 달리 FastCGI 모듈을 호스팅할 수 있으므로 PHP와 같은 FastCGI 지원 웹 언어들을 같은 환경에서 동시에 테스트할 수 있습니다.
웹 프로젝트에서 IIS를 사용하도록 지정한 경우, 관리자 권한을 얻을 수 없는 다른 컴퓨터에서는 웹 프로젝트를 열 수 없는 문제점이 있었으나 IIS Express를 사용하도록 하면 이런 제약이 없습니다.
IIS Hosted Core를 사용하므로 전체 버전의 IIS가 없어도 상관이 없으며, IIS Express가 설치되어있지 않은 경우 Visual Studio가 자동으로 이를 감지하여 Web Platform Installer를 호출하여 IIS Express가 설치될 수 있도록 해줍니다.
개별 프로세스 형태로 실행되므로 여러 사람이 사용하는 컴퓨터에서도 시스템 설정을 편집하는 일 없이 안전하게 실행할 수 있습니다.
HTML 5와 CSS 3에 대한 문법 검증 지원
Visual Studio 2010 SP1 및 Visual Web Developer 2010 Express SP1을 설치하면 HTML 5, XHTML 5 및 CSS 3에 대한 지원이 기본으로 내장되어있어 정확한 코딩이 가능합니다.
<!DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>HTML5 Test</title><linktype="text/css"rel="Stylesheet"href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/themes/redmond/jquery-ui.css"/><scripttype="text/javascript"src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js"></script><scripttype="text/javascript"src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/jquery-ui.js"></script><scripttype="text/javascript">
$(document).ready(function () {
$('#test').dialog({ show: "drop", hide: "drop", width: "auto", height: "auto", title: "html 5 rocks!" }).show();
});
</script></head><body><divid="test"><videosrc="demo.mp4"width="700"height="500"id="testVideo"autoplay="autoplay"><strong>Your web browser does not support video element.</strong></video></div></body></html>
위의 그림과 같이 검사할 문법을 지정하여 프로그래밍하면 꼭 지정해야 할 프로퍼티를 검사하여 경고를 띄우거나, 프로퍼티에 포함되어야 할 값의 유형을 자동으로 유추해주어 규칙을 몰라서 잘못 코딩할 가능성을 예방해 줍니다.
그 외에 눈여겨 볼만한 것들
Visual Studio 역시 최근에 급격한 변화를 맞이하고 있습니다. 빠르게 변화하는 기술을 수용하기 위해서 Internet Explorer의 런칭 주기가 짧아진 것과 비슷하게, Visual Studio 역시 자주 새로운 형태의 도구와 프레임워크를 업데이트하고 있으며, 이러한 노력의 일환으로 Express Edition의 가치가 더 높아지고 있습니다.
대표적으로 Visual Studio LightSwitch와 Visual Web Developer Express Edition, 그리고 Visual Studio for Windows Phone 7이 그 예시입니다. 전체 버전의 Visual Studio 제품 구성을 바꾸지 않고 안전하게 테스트해볼 수 있는 방법으로서도, 그리고 실무 개발 환경에서도 유용하게 쓰일 수 있습니다.
그러나 서비스 팩 출시와 더불어서 Express Edition의 경우 한 박자 정도 업데이트가 늦어지는 편입니다. 이 때문에, 먼저 설치한 서비스 팩과 나중에 설치한 RTM 버전의 Express Edition 사이의 버전 차로 인한 충돌 문제가 이슈가 되었던적이 있는데, 이번 버전부터는 그러한 상황이 있을 경우 Visual Studio가 시작되기 전에 해당 문제점을 사용자에게 정확히 알려줍니다. 그 외에, 다양한 도구와 런타임에서 기능 및 성능 향상이 있었습니다.
최근 2년 동안 다양한 개발 분야의 기술들이 물망에 오르는 굉장히 뜻 깊은 해였습니다. 2년 전이면 Microsoft 강성재 차장과 함께 처음으로 "Visual Studio 한국 공식 팀"을 창설하면서 http://vsts2010.net 이 탄생한 시기이군요. 2008년 12월에 팀이 창설되고, 2009년 1월 5일이 팀 블로그 2주년이 되는 날이었군요.
바로 저희 "Visual Studio 한국 공식 팀" 블로그에서 한홀 한홀 정성스럽게 작성된 포스트들이 2년 여간의 기술 흐름을 대변해 주고 있으며, 그리고 2011년의 기술도 짐작해 볼 수 있는 짧지만 굵은 변화의 흐름과 함께 여기까지 온 것 같습니다.
우리 팀이 함께 해왔던 핵심 키워드의 태그는 무엇이었을까요?
Visual Studio 2010
.NET 4.0, .NET Framework 4.0
ASP.NET MVC
C# 4.0
C++0x, C++/CLI
Parallel Computing
WCF
Cloud
Application Lifecycle Management
그리고 위의 태그들에 대해 더 자세히 살펴보더라도 생소한 기술과 이름, 아키텍처, 환경 등이 2년 동안 격변을 일으키며 변화를 해왔다는 사실입니다.
2011년 이전까지는 여러분들에게 선택권이었던 것들이, 이제는 필수가 되어야 한다고 해도 과언이 아닐 겁니다. 비즈니스 요구사항의 단면을 보면 업무적인 요인, 시대적인 배경 등인데, 이 시대적인 배경에는 트랜드+시장+기술+… 이 있을테고요. 그리고 '우리가 이 시대적인 배경 중 '기술'에 한 배를 타고 흐르고 있는가…?' 에 다시 한번 생각해 볼만 합니다.
예전 2010년 6월 1일 REMIX10 세미나에서 여러분에게 말씀 드린 마지막 문구가 다시금 생각이 나네요.
안녕하세요~ 워너비입니다. 이번에 새로운 시리즈를 하나 시작하게 되었습니다. 이 시리즈는 이름하여 'Visual Studio 31'! 골라먹는 재미가 있는 아이스크림처럼, 비주얼 스튜디오 2010도 엄청나게 다양한 기능 속에서 필요한 기능을 골라쓰는 재미가 있습니다. 몰라서, 어려워서 못 썼던 기능이 있으시다면, 이 시리즈를 통해서 좀 더 친숙해지셨으면 하는게 이 시리즈의 목표입니다. 목표가 달성될지는 살짝 의문이네요 :)
- 오늘은 그 첫 시간.
자, 오늘은 Visual Studio 31의 첫 번째 시간으로 인텔리센스에 대해서 알아보겠습니다. 인텔리센스는 비주얼 스튜디오의 얼굴이라고도 할 수 있죠. 모든 개발자가 가장 많이 활용하며, 코딩에서 가장 편리함을 제공하는 기능이기 때문이죠. 이 인텔리 센스가 비주얼 스튜디오 2010에서 어떻게 달라졌을까요? 비주얼 스튜디오 2008의 인텔리센스와 Before/After를 비교해보도록 하죠 :)
- 관련있는 것들만 보여주는 쎈쓰!
차이점을 발견하셨나요? VS2008에서는 'Console'을 입력하면, 전체목록에서 'Console'과 정확히 일치하는 곳에 포커스를 둡니다. 그런데 포커스를 두기만 할 뿐, 아무런 것도 도와주지 않았습니다. 그런데 VS2010에서는 'Console'을 입력하면, 'Console'이 포함되는 것들만 추려서 인텔리센스에 보여줍니다. 인텔리센스가 많이 똑똑해졌죠? 이제 사용자에게 필요한 정보만 최대한 추려서 보여주는 거죠. 자, 그럼 인텔리센스의 쎈쓰! 가 여기까지 일까요?
- 이름의 일부로도 찾아주는 쎈쓰!
이번에는 어떤 차이점이 있을까요? 기존에는 정확하게 찾으려는 항목과 입력하는 항목의 시작이 같아야만 인텔리센스에서 해당항목을 찾아줬습니다. 그런데 저 처럼 기억력이 저주받은 사람들은 참 슬픈 코딩을 해야했죠. 다른 방법이 있을지도 모르겠지만, 초짜인 제가 했던 방법은 MSDN에 들어가서 얼추비슷한 키워드로 검색을 해서 찾는 방법이었습니다. 그런데 이제 VS2010은 저 같은 초짜&저주받은 기억력 세트를 가진 사람들을 위해서 사용자가 입력하는 문자를 포함하는 항목을 모두 보여주도록 향상되었습니다. 'Color'만 입력하더라도 VS2010은 'Color'가 포함되어있는 'ConsoleColor'를 찾아서 보여주는 거죠 :) 점점 마음에 듭니다.
- 파스칼 케이스로도 찾아주는 쎈쓰!
파스칼 케이스는 뭘까요? 일종의 네이밍 규칙인데요, 서로 다른 단어를 조합해서 메서드 이름을 만들거나 할때, 각 단어의 맨앞글자를 대문자로 표기하는 방법입니다. Console과 Color를 조합해서 'ConsoleColor'를 만드는 것 처럼 말이죠.
기존에는 위에서 설명드렸듯이 시작부터 정확하게 같아야지만 인텔리센스에서 항목을 찾을 수 있었습니다. 하지만 똑똑해진 VS2010에서는 파스칼 케이스의 각 대문자만 입력해도 찾아준다는 거죠. 'CC'를 입력했다면, 'CC'가 직접 포함되는 항목부터, 'C'가 파스칼 케이스로 연속 두번 포함되는 항목도 모두 찾아서 보여줍니다. 이름이 긴 항목을 자주 찾는다면 매우 편리하겠죠 :)
- 없는 클래스도 보여주는 쎈쓰!
TDD를 하려고 할때나, 먼저 코드의 윤곽을 짜놓고 필요한 클래스를 생성하는 식의 프로그래밍을 할때는 존재하지 않는 타입의 객체를 생성해서 사용하게 됩니다. 이런 방식은 어느정도 장점도 가지고 있는데요, 우선 생성하고 하는 클래스의 구체적인 부분에 대해서 생각하는 대신에, 지금 짜려고 하는 코드의 흐름에 우선적으로 집중할 수 있기 때문입니다. 코드의 흐름에 집중하다가, 클래스를 정의하려고 하면 집중의 전환이 일어나기 때문에 그만큼 비효율적인 작업이 될 수도 있습니다.
존재하지 않는 App라는 클래스의 객체를 생성하려고 하면, 기존 버전에서는 전혀 인텔리센스의 지원을 받을 수 없었습니다. 그래서 일일이 쌩코딩을 해야 했었죠. 하지만, VS2010이 출동한다면? 존재하지 않는 타입이라고 하더라도 일단 new를 만나면 존재하는 타입인 것 처럼 인텔리센스에서 보여줍니다. 많이 편리해졌죠~? :)
- 개발자의 취향에 따라 맞춰가는 쎈쓰!
위 Before/After는 모두 VS2010의 캡쳐입니다. 무슨 차이점이 있을까요? Before에서는 입력하는 것과 일치하는 항목에 강조가 되어있고, After에서는 맨위에 별도의 칸이 한칸 추가되어 있으며, 인텔리센스에 강조가 약하게 되어있다는 점이 차이점입니다. After에서 볼 수 있는 것이 VS2010의 인텔리센스에서 제공하는 '서제스천 모드'를 사용한 것입니다. 바로 검색 사이트의 검색창을 떠올리시면 됩니다. 거기서 검색어를 입력하면, 입력하는 검색어와 가장 비슷한 항목을 보여주지만 그 항목이 검색어를 입력하는데 아무런 영향을 주지는 않습니다. 선택하지 않으면 그만이라는 거죠. 그러면, 둘은 어떤 차이가 있을 까요? 기본적인 인텔리센스와 서체스천 모드를 사용한 인텔리센스에서 'App'를 입력하고 Space키를 눌러보면 그 결과를 확인할 수 있습니다.
App라는 클래스는 존재하지 않기 때문에, 기본 모드에서는 가장 비슷한 AppDomain을 선택해버립니다. 하지만, 서제스천 모드에서는 추천항목을 보여줄 뿐, 사용자의 입력에 관여하지 않기 때문에 그냥 App그대로 남은 걸 보실 수 있습니다. 서제스천 모드를 사용하려면, 코드 편집창에서 'Ctrl + Alt + Space'를 누르면 됩니다. 그리고 서제스천 모드에서 기본 모드처럼 추천 항목을 입력하고 싶으면 'Tab'키를 누르면 됩니다 :)
- See you next time :)
오늘은 첫 시작으로 인텔리센스에 대해서 알아봤습니다. 앞으로도 계속해서 골라먹을 수 있는 비주얼 스튜디오 2010의 기능에 대해서 소개해 드릴예정이오니~, 기대해주시기 바랍니다. :)
저희가 주변에서 흔히 접할 수 있는 .NET 트랙의 C#, ASP.NET MVC, WCF 세미나도 재미있는 내용으로 알차게 준비를 했습니다. 그리고 흔히 접하기 힘든 Enterprise 트랙과 Native 트랙도 가뭄의 단비와도 같은 트랙입니다.
원래 웹 타임 교육센터는 각 자리에 교육 PC 가 비치된 환경으로 책상 위에 컴퓨터 모니터와 키보드, 마우스가 비치되어 있었으나, 세미나 참가자의 쾌적한 환경을 위해 오전 10시부터 책상 위의 모니터를 치우는 작업을 하였답니다. 그리하여 아래와 같이 깨끗한 책상이 되었군요^^
이 날, 저희 팀에서 세미나를 진행하기 위해 많은 요원들이 일찍 모여 준비하고 세미나를 준비하고 접수를 받고 있습니다.
즐거운 토요일 주말에 비가 오다마다를 반복하는 짓궂은 날씨에서 불구하고 세미나에 참석해 주신 여러분들을 위해 푸짐한 경품도 준비를 하였습니다.
경품은
엄준일 ALM MVP 님의 MSDN Subscription 1년 구독권 2매
김병진 ALM MVP 님의 무선 마우스 3개, 무선 키보드 3개
Microsoft Korea 의 강성재 차장님과 Visual Studio 2010 에서 Visual Studio 2010 Professional 정품 1개
누가 경품을 가져갈 진 모르겠지만, 기뻐하실 분들을 생각하면 벌써부터 가슴이 설레입니다.^^
오홋.. 드디어 세미나가 오후 2시부터 시작 되었습니다.
.NET Track : [1] 그것이 알고싶다 - C# 4.0의 변화, 그 진실은 무엇인가. 희망인가? 또 다른 혼란인가? - 강보람 C# MVP
재미있는 블로그 아티클과 세미나 진행으로 이번 세미나에서도 유감없이 C# 4.0 의 내용을 재미있게 풀어주셨습니다. 현재는 집필 활동에 주력하고 계시는군요.
PDC 2008에 울려 퍼진 C# 4.0의 소식. 그 소식을 듣고 많은 사람들은 기대와 혼란을 가지게 되었다. C#은 분명히 정적 언어인데, 동적 언어에나 있을 법한 기능을 추가한다니? 이제 와서 뒷북일 수도 있는 C# 4.0의 변화에 대한 진실, 그 마지막 시리즈가 이제 시작된다. :)
.NET Track : [2] 좋은 프레임워크 있으면 소개시켜줘 - ASP.NET MVC - 박세식
ASP.NET MVC 를 실무적으로 사용하기 위해 정말 쉽고 재미있는 내용으로 채워졌습니다.
그 동안 아주 미묘하게 아쉬웠던 ASP.NET. 가려운 곳을 긁어줄 대안의 프레임워크가 나타났다. 웹 개발자들 한테 참~ 좋은데, 웹 개발자들 한테 정말 좋은데, 이걸 말로 그냥 할 수 없어서, 이번 기회에 소개한다.
.NET Track : [3] Beginnig WCF - 오태겸
"WCF 는 어렵다!!!" 라는 선입관을 깨주신 오태겸 님의 세미나를 들으신다면 'WCF 는 쉽구나^^' 라고 느끼실 겁니다.
WCF는 서비스 지향 프로그래밍을 위해 마이크로소프트에서 개발 및 지원하는 기반 기술이며, 기존의 .NET 웹 서비스에 비해 유연성과 확장성이 뛰어나 최근 많은 관심을 받고 있습니다. 본 세션에서는 WCF가 무엇인지? 어떤 장점이 있는지? 그리고, WCF 를 이용하기 위해선 무엇이 필요한지? 에 대해 함께 알아보고, 마지막으로, WCF의 활용 예를 알아보도록 하겠습니다.
Native Track : [1] Visual Studio 2010 : C++0x와 Windows 7 - 최성기
NCsoft 에 근무하시는 최성기님의 세션입니다. 여러 매체를 통해서 C++0x 와 Windows 7 의 기술을 전파하셨고, Windows 7 with C++0x 에 경험도 풍부하십니다.
그 동안 .NET 영역으로 적잖이 편중되었던 Visual Studio의 버전업에 비해 이번 2010 버전에서는 Native Code 개발환경에서도 많은 변화가 찾아왔다. C++0x 표준 반영에 의한 문법의 변화, 새로운 라이브러리 제공(Concurrency Runtime Library), Windows 7의 최신 기능들을 제어하기 위한 SDK의 업데이트 등이 그것이다. 본 세션을 통해 C++의 문법적인 변화와 Windows 7 기능 구현을 위한 SDK의 업데이트 사항들을 정리해본다.
Native Track : [2] 비주얼 스튜디오 2010 의 Concurrency Runtime 을 이용한 멀티 코어 제대로 활용하기 - 임준환
임준환님은 좋은 내용을 여러분들에게 전해드리려고 일찍부터 나오셔서 리허설도 진행하신 투혼(^^) 을 발휘해 주셨답니다.
요즘 가정의 PC 에 멀티 코어 프로세서가 많이 보급되어 있습니다. 하지만 실제로 PC 에 설치된 코어들을 모두 사용하는 애플리케이션들은 많지 않습니다. 이렇게 낭비되는 자원을 C++ 개발자가 쉽게 사용할 수 있도록 도와주는 Concurrency Runtime 을 비주얼 스튜디오 2010에서 제공합니다. 이 Concurrency Runtime 을 어떻게 시작해야 할지 알아보겠습니다.
Native Track : [3] DirectX11 을 기다리며… - 조진현
클라이언트 게임 프로그램을 개발하고 계신 조진현님의 DX11 에 대한 세션입니다. KGC 등 여러 세미나 경험을 가지고 계시지요.
조금씩 정보가 공개되면서 많은 변화를 예고하고 있는 DirectX11 에 대해서 살펴 볼 것입니다. 특히나 Tessellation, DirectCompute, Multi-threading 을 위한 기본 개념과 작업들에 대해서 체크해 볼 것입니다.
Enterprise Track : [1] VS Team Foundation Server 2010 의 새로운 변화 - 김병진 ALM MVP
Team Foundation Server 2010 을 이용하여 컨설팅과 실무에서 많은 경험을 토대로 세션을 진행하였습니다. 웹 타임 교육센터와 큰 기업 등에서 교육을 했던 경험도 있으시답니다.
Visual Studio Team Foundation Server 2010의 혁신적인 변화와 개선 부분, 프로젝트 및 형상관리와 Agile의 Scrum 을 이용한 방법론을 알아보고, 단지 소스 체크인/아웃만 하는 Visual Source Safe에서 업그레이드 하는 방법에 대하여 알아봅니다.
Enterprise Track : [2] 소프트웨어 품질 향상을 위한 다양한 테스트 기법 - 엄준일 ALM MVP
소프트웨어 개발의 이전의 사례를 바탕으로 테스팅의 중요성과 그 기법과 방법을 공부하면서 경험한 내용을 전달하였습니다. 소프트웨어 개발 프로세스 중 테스팅의 매력에 푹 빠져 있답니다.
소프트웨어는 개발 및 릴리즈 과정까지 수 많은 과정을 겪는데, 소프트웨어가 점진적으로 진화함에 따라 결함의 발생률이 증가합니다. 이를 개선하기 위한 테스트 기법 중 단위 테스트, WhiteBox 테스트, 화면 테스트, 성능 테스트, 부하 테스트 등 다양한 테스트 기법을 알아봅니다.
Enterprise Track : [3] SharePoint 2010 Enterprise 솔루션 개발 - 정홍주 SQL Server MVP
SharePoint 2010 으로 엔터프라이즈 환경에 필요한 실무 사례와 경험을 이 세션에서 전달하였습니다. 웹 타임교육 센터의 전임 강사이십니다.^^
SharePoint 2010은 기업 협업 플랫폼으로 개발자들은 VS 2010을 이용하여 더 생산성 있고 효과적인 SharePoint 2010 개발을 진행할 수 있습니다. 본 세션에서는 SharePoint 2010 개발에 대한 가장 필요한 내용을 구체적으로 알아보며 이를 통해 가장 많은 요구사항에 대한 실무 솔루션을 구성하는 방법에 대한 내용을 알아보겠습니다.
드디어 경품 추첨 시간
더 많은 분들에게 경품을 드리고 싶었지만, 자비로 경품을 준비하느라 많은 분들에게 드리지 못해서 아쉽습니다.^^ 다음엔 더 비싸고(^^), 풍성하고, 유용한 경품을 많이 준비할게요^^
경품은 이 날, 세미나를 위해 발표해 주신 스피커 분들께서 추첨을 통해 전달해 드렸습니다.
MSDN Subscription 1년 구독권 2매
이 경품으로 MSDN 을 통해서 Windows 7, Windows Server 2008, SQL Server 2008, Team Foundation Server 2010, Visual Studio 2010 Ultimate, Office 2010 등의 제품을 모두 모두 사용할 수 있답니다.
무선 키보드 3개
무선 키보드 3개
대망의 Visual Studio 2010 Professional 정품 1개 ^^
Visual Studio 2010 Professional 정품은 Microsoft Korea 의 강성재 차장님과 Microsoft Korea 의 Visual Studio 제품 관련 팀에서 후원해 주신 오늘 쵝오의 경품입니다. 강성재 차장님께서 직접 추첨을 해 주셨습니다.
Visual Studio Camp #1 을 마치며
저희 팀의 많은 분들께서 이 날 행사와 좋은 내용의 세미나를 준비해 주셔서 무사히 세미나를 마치게 되었습니다. Native 트랙은 C++ 개발자와 게임 개발자에게 정말 단비와도 같은 세미나였고, 많은 분들의 좋은 피드백을 받았습니다. .NET 트랙과 Enterprise 트랙도 여러 분들의 기술 트랜드가 뒤쳐지지 않도록 부지런히 기술 전파를 위해 팀 블로그를 통해 노력했고, 이번 세미나를 통해 저희 Visual Studio 팀도 매우 기뻤고, 더 많은 용기를 얻은 것 같습니다.
특히 저희 한국 Visual Studio 팀에서는 아무도 먼저 가보지 않은, 아무도 접해보지 않은 많은 기술과 트랜드의 홍수 속에서 항상 긴장감을 늦추지 않고 노력해 주셔서 오늘의 세미나가 있지 않았나 생각합니다. 앞으로도 저희 Visual Studio Korea 팀의 많은 응원 부탁 드립니다.
더 좋은 내용을 블로그 내용과 세미나, 각종 매체를 통해 여러분들에게 다시 찾아 뵙도록 하겠습니다.
- 주최 : 한국 Visual Studio 공식 팀
- 일시 : 2010년 8월 28일토요일오후 1:30~5시
- 장소 : 웹타임교육센터
- 참가비 : 무료
세미나 아젠다
Native 트랙
.NET 트랙
Enterprise 트랙
14:00 ~ 14:50
Visual Studio 2010 : C++0x와 Windows 7
최성기
그것이 알고싶다 - C# 4.0의 변화, 그 진실은 무엇인가. 희망인가? 또 다른 혼란인가?
강보람 C# MVP
VS Team Foundation Server 2010 의 새로운 변화
김병진 Team System MVP
15:00 ~ 15:50
비주얼 스튜디오 2010 의 Concurrency Runtime 을 이용한 멀티 코어 제대로 활용하기
임준환
좋은 프레임워크 있으면 소개시켜줘 - ASP.NET MVC
박세식
소프트웨어품질향상을위한다양한테스트기법
엄준일 Team System MVP
16:00 ~ 16:50
DirectX11 을 기다리며...
조진현
Beginnig WCF
오태겸
SharePoint 2010 Enterprise 솔루션 개발
정홍주 SQL Server MVP
발표 내용 소개
Native 트랙
Visual Studio 2010 : C++0x와 Windows 7 그동안 .NET 영역으로 적잖이 편중되었던 Visual Studio의 버전업에 비해 이번 2010 버전에서는 Native Code 개발환경에서도 많은 변화가 찾아왔다. C++0x 표준 반영에 의한 문법의 변화, 새로운 라이브러리 제공(Concurrency Runtime Library), Windows 7의 최신 기능들을 제어하기 위한 SDK의 업데이트 등이 그것이다. 본 세션을 통해 C++의 문법적인 변화와 Windows 7 기능 구현을 위한 SDK의 업데이트 사항들을 정리해본다.
비주얼 스튜디오 2010 의 Concurrency Runtime 을 이용한 멀티 코어 제대로 활용하기 요즘 가정의 PC 에 멀티 코어 프로세서가 많이 보급되어 있습니다. 하지만 실제로 PC 에 설치된 코어들을 모두 사용하는 애플리케이션들은 많지 않습니다. 이렇게 낭비되는 자원을 C++ 개발자가 쉽게 사용할 수 있도록 도와주는 Concurrency Runtime 을 비주얼 스튜디오 2010에서 제공합니다. 이 Concurrency Runtime 을 어떻게 시작해야할지 알아보겠습니다.
DirectX11 을 기다리며...
조금씩 정보가 공개되면서 많은 변화를 예고하고 있는 DirectX11 에 대해서 살펴 볼 것입니다.특히나 Tessellation, DirectCompute, Multi-threading 을 위한 기본 개념과 작업들에 대해서 체크해 볼 것입니다.
.NET 트랙
그것이 알고싶다 - C# 4.0의 변화, 그 진실은 무엇인가. 희망인가? 또 다른 혼란인가? PDC 2008에 울려퍼진 C# 4.0의 소식. 그 소식을 듣고 많은 사람들은 기대와 혼란을 가지게 되었다. C#은 분명히 정적 언어인데, 동적 언어에나 있을 법한 기능을 추가한다니? 이제와서 뒷북일 수도 있는 C# 4.0의 변화에 대한 진실, 그 마지막 시리즈가 이제 시작된다. :)
좋은 프레임워크 있으면 소개시켜줘 - ASP.NET MVC 그동안 아주 미묘하게 아쉬웠던 ASP.NET. 가려운 곳을 긁어줄 대안의 프레임워크가 나타났다.웹 개발자들 한테 참~ 좋은데, 웹 개발자들 한테 정말 좋은데, 이걸 말로 그냥 할 수 없어서,이번 기회에 소개한다.
Beginnig WCF WCF는 서비스 지향 프로그래밍을 위해 마이크로소프트에서 개발 및 지원하는 기반 기술이며, 기존의 .NET 웹 서비스에 비해 유연성과 확장성이 뛰어나 최근 많은 관심을 받고 있습니다.본 세션에서는 WCF가 무엇인지? 어떤 장점이 있는지? 그리고, WCF 를 이용하기 위해선 무엇이 필요한지? 에 대해 함께 알아보고, 마지막으로, WCF의 활용 예를 알아보도록 하겠습니다.
Enterprise 트랙
VS Team Foundation Server 2010 의 새로운 변화
Visual Studio Team Foundation Server 2010의 혁신적인 변화와 개선 부분, 프로젝트 및 형상관리와 Agile의 Scrum 을 이용한 방법론을 알아보고, 단지 소스 체크인/아웃만 하는 Visual Source Safe에서 업그레이드 하는 방법에 대하여 알아봅니다.
소프트웨어품질향상을위한다양한테스트기법
소프트웨어는 개발 및 릴리즈 과정까지 수 많은 과정을겪는데, 소프트웨어가 점진적으로 진화함에 따라 결함의 발생률이증가합니다. 이를개선하기위한테스트기법중단위테스트, WhiteBox 테스트, 화면테스트, 성능테스트, 부하테스트등다양한테스트기법을알아봅니다.
SharePoint 2010 Enterprise 솔루션 개발
SharePoint 2010은 기업 협업 플랫폼으로 개발자들은 VS 2010을 이용하여 더 생산성 있고 효과적인 SharePoint 2010 개발을 진행할 수 있습니다.본 세션에서는 SharePoint 2010 개발에 대한 가장 필요한 내용을 구체적으로 알아보며 이를 통해 가장 많은 요구사항에 대한 실무 솔루션을 구성하는 방법에 대한 내용을 알아보겠습니다.
발표자 소개
Native 트랙
최성기 / Visual Studio 공식 팀 엔씨소프트에서 온라인 게임 서버를 개발하고 있으며, 비주얼 스튜디오 2010 공식 팀 블로그 (http://vsts2010.net) 에서 MFC와 윈도우7 카테고리를 맡아 스터디를 하고 있다. 최근 UX 시장의 핫이슈인 ‘멀티터치’에 대해 많은 관심을 갖고 있다.
임준환 / Visual Studio 공식 팀
Visual Studio 2010 공식 팀 블로그( http://vsts2010.net ) 에서 C++, 게임 관련 필자로 활동하고 있다.
조진현 / Visual Studio 공식 팀
현재클라이언트게임프로그래머로써재직중입니다. Visual Studio 2010 공식팀블로그(http://vsts2010.net) 에서 DirectX11 부분에서활동중입니다.
.NET 트랙
강보람 / Visual Studio 공식 팀 시삽 / Microsoft C# MVP
Visaul Studio 공식팀의 닷넷 파트 시삽을 맡고 있으며, Visual C# MVP이다. MSDN 주간 세미나, Techdays 2009, 2010 Spring, REMIX 10에 참여했으며, '그것이 알고싶다'를 2004년 부터 거의 빼놓지 않고 다 본 경력의 소유자이다. 개인블로그 '워너비의 소프트웨어 팩토리'(http://blog.naver.com/netscout82)를 운영중이며, 프로그래밍과 전혀 상관없는 이야기를 쓰고 있다.
박세식 / Visual Studio 공식 팀
아직까지는 꿈많은 유부남 청년이다. 아이가 생기면 시간이 없다는 말에 몸서리 치면서 노력중이다. Visual Studio 공식 팀 블로그에서 ASP.NET MVC 관련 포스팅을 하고 있고, 개인블로그 sses's blog(http://sses.tistory.com)를 운영중이다.
오태겸 / Visual Studio 공식 팀
오태겸, 현재 Hostway 에서 근무하고 있으며, 개인 블로그(http://ruaa.tistory.com)와 Visual Studio 2010 공식 팀 블로그(http://vsts2010.net)에서 WCF 카테고리를 통해 있는 지식, 없는 지식 총 동원해가며, WCF에 관한 포스팅을 하고 있다.
Enterprise 트랙
김병진 / Visual Studio 공식 팀 시삽 / Microsoft Team System MVP / MCT
김병진 MCT/Microsoft MVP로 Visual Studio 2010 팀 블로그(http://vsts2010.net)에서 활동하고 있으며, ALM 교육과 컨설팅을 통해 Microsoft 의 기술과 플랫폼기반의 개발과 설계 관련하여 강의과 컨설팅을하고 있으며, 우리나라 소프트웨어 공학의 발전을 위해 열심히 노력하고 있습니다.
엄준일 / Visual Studio 공식 팀 대표 시삽 / Microsoft Team System MVP
엄준일 Microsoft Team System MVP 로 활동 하고 있으며, 개인 블로그(http://blog.powerumc.kr) 와 트위터(@powerumc) 를 통해 .NET 기술을 전파하고 있다. 그리고 Visual Studio 2010 공식 팀 블로그(http://vsts2010.net) 의 대표 시삽으로 팀 블로그와 트위터(@vsts2010) 를 운영하고 있다.
정홍주 / Visual Studio 공식 팀 / Microsoft SQL Server MVP
웹타임 교육센터에서 SQL, .NET 강의와 .NET, SharePoint 컨설팅을 하고 있다.Microsoft SQL Server MVP 로 활동 하고 있으며 데브피아의 SQL Server 2005 시샵이다.SharePoint 2010 책을 집필하고 SharePoint 2010 관련 동영상과 미니클립을 서비스하고 있으며 현재 Visual Studio 2010 공식 팀 블로그(http://vsts2010.net) 에서 SharePoint 2010 관련 블로깅을 하고 있다. 향후 SharePoint 2010 개발 관련 여러 내용을 Open Source 할 예정이다.
DreamSpark는 Microsoft의 Spark 프로그램 시리즈 중 하나이며, 웹 비지니스 활성화를 위한 WebSiteSpark 프로그램, 초기 창업 지원 및 기업 활성화를 위한 BizSpark 프로그램이 있습니다. 그리고 DreamSpark는 학생들의 IT 기술력 향상을 위하여, 기존에 제공되어오던 MSDN Academic Alliance (http://msdn.microsoft.com/ko-kr/academic/default.aspx)와는 별도로 전역적으로 일반화하고 확대한 프로그램입니다.
DreamSpark를 통해서 2010년 6월 현재 제공받을 수 있는 소프트웨어 솔루션 및 혜택들은 다음과 같습니다. 다음은 한글판까지 같이 제공되는 소프트웨어 솔루션들의 목록입니다.
Visual Studio 2010 Professional Edition (* 한글판 제공됨)
Windows Server 2008 R2 Server Standard Edition (* 한글판 제공됨)
Expression Studio 3 (* 한글판 제공됨)
Visual Studio 2008 Professional Edition (* 한글판 제공됨)
Windows Server 2008 Server Standard Edition (* 한글판 제공됨)
SQL Server 2008 Developer Edition (* 한글판 제공됨)
SQL Server 2008 Express Edition (* 한글판 제공됨)
Visual Basic 2008 Express Edition (* 한글판 제공됨)
Visual C# 2008 Express Edition (* 한글판 제공됨)
Visual C++ 2008 Express Edition (* 한글판 제공됨)
Visual Web Developer 2008 Express Edition (* 한글판 제공됨)
Visual Studio 2005 Professional Edition (* 한글판 제공됨)
그 외에 추가적으로 제공되는 소프트웨어들은 다음과 같습니다.
Visual Studio 2010 Express Edition
Windows Mobile 6.5 SDK
Windows Phones Developer Tools CTP
XNA Game Studio 3.1
Robotics Developer Studio 2008 R3
Windows Embedded CE 6.0
Virtual PC 2007
Concurrency and Coordination Runtime and Decentralized Software Services Toolkit 2008 R2
Windows Server 2003 Standard Edition
DreamSpark를 통하여 기본적인 운영 체제와 개발 도구를 다운로드받아서, 여러분이 원하는 소프트웨어나 웹 사이트를 손쉽게 개발하고 디자인할 수 있습니다. Microsoft Imagine Cup 대회에 참가하기 위하여 필요한 소프트웨어를 모두 이곳에서 가져오실 수 있으며, 학생 벤처를 시작하고자 하시는 분들께도 충분한 기술적인 리소스들을 모두 이곳에서 가져오실 수 있습니다.
DreamSpark 등록하는 방법
DreamSpark에 등록하는 방법은 크게 세 가지가 있습니다. DreamSpark 무료 쿠폰을 받으신 경우 (1), 국제학생증 (International Student Identification Card - ISIC)을 소지하고 계신 경우 (2), DreamSpark에 관리자가 기관을 등록한 경우 (3)로 나눌 수 있습니다. 이 세 가지 중 하나로 해당이 되시는 경우, Windows Live ID를 통하여 로그인을 하신 후, Verification 과정을 거치면 됩니다. 각 다운로드 항목 별로 페이지에 Verify 버튼을 클릭하신 후, 국가를 Korea로 선택하시고, 학생 인증으로 접속하기 위하여 Verify as a Student 라디오 버튼 항목을 클릭합니다.
(1) DreamSpark 무료 쿠폰을 받으신 경우: 아래 그림에서처럼 "I have an Activation Code" 라디오 버튼 항목을 클릭하고, Activation Code 입력란에 쿠폰에 적힌 Activation Code를 입력하고 Verify 버튼을 클릭하면 인증이 완료됩니다. 단, 중복 사용이 제한되거나 유효 기간, 유효 횟수가 있는 쿠폰의 경우 Activation Code를 재 사용할 수 없을 수도 있습니다.
(2) 국제 학생증을 가지고 계신 경우: 국제 학생증을 취급하는 대학 교육 기관의 경우 이 옵션을 사용할 수 있습니다. 국제 학생증을 취급하지 않더라도 국내외 여러 국제 학생증 발급 기관 (예: 하나은행, 한국씨티은행 등)을 통하여 약간의 수수료를 지불하고 다양한 목적으로 국제 학생증을 발급받아 혜택을 누리실 수도 있습니다.
참고: ISIC 코드를 입력할 때에, 일부 ISIC 카드의 경우 제일 마지막 자릿수를 제외하고 입력해야 하는 규칙이 따를 수 있습니다. 저의 경우, 인하대학교 학생증과 겸용해서 발급되는 ISIC 카드의 경우 이러한 규칙이 적용됩니다.
(3) DreamSpark 서비스에 등록된 기관에서 재학중이신 경우: 이 경우 해당 기관 내의 재학생임을 증명할 수 있는 수단을 사용하여 접속할 수 있습니다. 해당 기관 내에서 자체적으로 SSO (Single Sign On) 서비스를 Windows Live ID 기반으로 구현하였을 경우 이를 이용하시면 됩니다. 만약 별도의 SSO 서비스가 없을 경우 해당 기관에서 제공하는 메일 서비스를 경유하여 인증을 완료하실 수 있습니다.
Continue 버튼을 클릭하여 계속 진행하면 다음과 같은 페이지가 나타납니다.
위의 화면에서 해당하는 기관을 선택하고, Continue 버튼을 클릭합니다. 아래의 링크를 클릭하시면 2010년 7월 현재 DreamSpark에 등재된 기관들의 목록을 보실 수 있고, Ctrl + F 키를 이용하여 해당 기관명을 검색하실 수 있습니다.
해당 기관 내의 구성원 - 또는 - 학생임을 인증하기 위하여, 해당 기관에서 운영 중인 전자 메일 서비스의 계정과 주소를 이곳에 기재해야 합니다. 예를 들어, 메일 서비스의 도메인이 rkttu.com 일 경우, E-mail Address에 anonymous@rkttu.com 과 같이 기재할 수 있으며, Confirm E-mail Address에 다시 한번 같은 메일 주소를 기재하면 됩니다. 기재가 끝나면 Verify 버튼을 클릭하여 추가 절차를 진행합니다.
DreamSpark는 대학생 여러분들을 위한 솔루션입니다.
Verification 과정을 완료하고 다운로드를 할 때에는 Internet Explorer 뿐만 아니라 Firefox, Chrome 등 여러분이 원하는 브라우저를 이용하여, 별도의 Download Manager를 이용하거나, 직접 웹 브라우저를 이용하여 다운로드하거나 자유롭게 이용하실 수 있습니다. 참고로, Internet Explorer를 이용하여 직접 브라우저로 다운로드하게 되는 경우, 단일 파일의 크기가 4GB 이상인 파일을 다운로드받을 수 없다는 점만 유의하시면 되겠습니다.
소프트웨어 개발이나, IT 기술을 개발하기 위하여 더 이상 불법 다운로드 서비스를 이용하지 마세요. DreamSpark를 통하여 최신 기술을 항상 편리하게 이용하고, 손쉽게 다운로드받으실 수 있습니다. 그리고, DreamSpark와 더불어서 비 정기적으로 진행되는 Windows 및 Office의 대학생 할인 프로모션 프로그램도 자주 있으니 최신 소프트웨어와 IT 기술의 혜택을 편리하게 가져가실 수 있으면 좋겠습니다.
지난번 글 (http://www.vsts2010.net/313)에 이어서, 오늘은 Windows Azure 기반의 응용프로그램을 작성하는 과정에 대해서 실습하고 기본적인 이해를 더하는 내용을 살펴보도록 하겠습니다. 지난번 글에서 언급한 모든 구성 요소들이 설치되고, 관련된 패치들도 설치가 되어야 Windows Azure 기반의 응용프로그램 개발을 시작할 수 있음을 다시한번 말씀드립니다.
Windows Azure 개발 과정에서의 각 구성 요소들에 대한 이해
Windows Azure 위에서 호스팅될 응용프로그램을 개발하는 과정에서, 여러가지 구성 요소들이 필요합니다. 그리고 이러한 구성 요소들은 상당히 유기적으로 작용하게 되는데요, 겉으로 보기에는 복잡하지만 나름대로의 이유와 규칙들이 있습니다. 이번 장에서는 이러한 세부적인 내용들을 조명해보기로 하겠습니다.
우선, 지난번 글에서 언급한 Windows Azure Tools for Visual Studio의 역할을 살펴보겠습니다. Windows Azure Tools for Visual Studio는 이름에서 알 수 있듯이 Visual Studio와 연동하여 Visual Studio를 이용하여 손쉽게 응용프로그램을 개발하고 테스트할 수 있는 수단을 제공해줍니다. Visual Studio 2008과 Visual Studio 2010에 대한 연동 기능을 제공하고, 프로젝트 템플릿과 Visual Studio 확장 기능을 제공해주는 것이 주된 역할입니다. 그리고, Windows Azure SDK도 같이 설치해줍니다.
Windows Azure SDK는 실제 클라우드 컴퓨팅 환경과 최대한 비슷하게 기능을 재현하는 Emulation Service와 Windows Azure의 핵심 API, 클라우드 환경에서 응용프로그램 패키지를 쉽게 배포할 수 있도록 해주는 Package Builder를 제공합니다. Windows Azure SDK의 핵심 기능만 잘 이해하고, 활용할 수 있어도 Windows Azure 기반의 응용프로그램 개발은 이미 절반 이상 안 것이나 다름 없습니다.
실제로 실습을 하다보면 느끼시게 되겠지만 (특히 이전에 Windows Mobile이나 Windows Phone Series 7 기반의 개발 환경을 경험해보신 분들께서는 쉽게 이해할 수 있을 것입니다) Windows Azure의 개발 환경은 모바일 응용프로그램의 개발과 상당히 유사한 Perspective를 보여줍니다. 실제로 응용프로그램을 실행할 장치와 환경은 별도의 위치에 존재하지만, 그 이전까지 충분히 테스트를 해볼 수 있는 에뮬레이터와 모의 API 집합, 그리고 이에 관련된 문서들을 받아서 개발할 수 있다는 점이 비슷합니다. 다른 점이 있다면, 모바일이 아닌 전체 버전의 Windows Server를 기반 OS로 사용하는 응용프로그램을 개발한다는 점이 되겠습니다.
Windows Azure SDK를 이용하여 개발된 프로그램은 확장자가 CSPKG인 파일과 CSCFG인 파일로 최종 결과물이 나타납니다. CSPKG 파일은 몇 가지 기본적인 메타데이터와 함께 Windows Azure Fabric Controller를 통하여 배포할 수 있는 Binary Image가 담겨있는 (여기서의 Binary Image는 PE 파일 형식이 아닙니다. DLL의 형태도 아니고 EXE의 형태도 아닙니다.) ZIP 형식의 파일이고, CSCFG 파일은 XML의 형태를 띄고 있는 응용프로그램 전체에 대한 설정 파일입니다. 이 두 개의 파일을 Windows Azure Portal을 통하여 배포하게 되면 모든 처리 과정이 Windows Azure에 의해서 이루어지게되고 여러분의 서비스가 사용 가능한 상태로 진입하게 되는 것입니다.
Visual Web Developer 2010 Express로 Windows Azure 응용프로그램 개발 시작하기
앞서 설명드렸던 것처럼, Windows Azure 개발 환경을 Visual Studio와 함께 구축하셨을 경우에는 에뮬레이션 환경까지 같이 제공이 됩니다. 여기서 두 가지 선택을 할 수 있습니다.
에뮬레이션 환경에서 테스트하고 디버깅하는 과정을 거칠 필요가 있는 경우: 대부분의 경우 여기에 해당됩니다. 이 경우, 에뮬레이션 환경이 정상적으로 시스템에 설치되고 기동되기 위하여 Visual Studio 2008이나 Visual Studio 2010을 관리자 권한으로 "권한 상승"시킨 상태에서 시작해야 합니다.
간단하게 코드를 수정한 후 단순히 CSPKG, CSCFG 파일을 제작하기 위한 경우: 이 경우에는 관리자 권한으로 "권한 상승"한 상태에서 시작하지 않아도 무방합니다.
관리자 권한으로 권한 상승 시킨 상태에서 Visual Studio를 실행하는 경우, 일반적으로는 문제되지 않습니다. 하지만 다른 응용프로그램과 OLE 방식 (Drag & Drop과 같은 유형의 통신)으로 상호 작용하는 데에 문제가 있을 수 있습니다. 이러한 기능을 자주 사용하시거나, 프로그래밍하는 시간이 오래 걸리신다면 권한 상승을 하지 않고 먼저 완벽하게 프로그래밍을 끝낸 후 다시 관리자 권한으로 권한 상승시킨 후에 시작하여도 좋습니다.
관리자 권한으로 권한 상승하는 방법은 다음과 같습니다.
혹은, 관리자 권한 상승을 매번 사용하도록 고정시킬 수 있습니다. Windows Azure 기반 응용프로그램 개발을 집중적으로 활용하실 때에는 이 방법을 적용하시는 것도 좋습니다.
Note 1: 만약 Windows Azure Tools for Visual Studio를 설치하지 않은 상태에서 Cloud Project를 만들면?
기본으로 제공되는 개발 환경이 아니기 때문에 간혹 Visual Studio나 Visual Web Developer Express만 설치하고 Cloud Project를 생성하게 될 때가 있는데요, 걱정하지 않으셔도 됩니다. 아직 Tool과의 연동이 되지 않았다면 아래와 같이 Enable Windows Azure Tools 항목이 나타나며, 이를 이용하여 프로젝트를 생성하면 안내 웹 페이지를 포함하는 기본 문구가 나타납니다.
단순히 아래의 웹 페이지에서 Download Windows Azure Tools 버튼을 클릭하고, 다운로드 페이지에서 필요한 소프트웨어들을 모두 내려받아 설치하면 됩니다. (이 때, Visual Studio나 Visual Web Developer는 종료되어야 합니다.)
그리고 정상적으로 설치가 되었다면, 각 언어 별 (Visual C#, Visual Basic .NET, Visual F#)로 Cloud Category 아래에 Windows Azure Cloud Service 프로젝트 템플릿 항목이 보일 것입니다.
Note 2: 설치 시작과 동시에 혹시 아래와 같은 오류 메시지가 보이세요?
Installation Requirements:
These versions of Windows Azure SDK and Windows Azure Tools for Microsoft Visual Studio 2008 and Windows Azure Tools for Microsoft Visual Studio 2010 are already installed. If the Windows Azure Cloud Service project templates are missing from Visual Studio, please uninstall the Windows Azure Tools and run this installer again.
내용인즉 그렇습니다. Windows Azure Tools는 일반적인 Windows Installer 기반의 응용프로그램이나 Visual Studio Installer 기반의 응용프로그램처럼 In-place Update가 (아마도 아직은) 지원되지 않습니다. 문제가 있어서 재설치하는 경우, 새 버전이 발표되어 재설치하는 경우, Visual Studio와 Visual Web Developer 중 어느 한쪽에 먼저 설치하고 나중에 추가 설치하게 되는 경우 모두 기존에 설치된 Windows Azure Tools를 먼저 제거한 후 다시 설치해야 합니다.
Windows Azure Tools로 프로젝트 만들어보기
이제 Windows Azure Tools를 이용하여 프로젝트를 시험삼아 만들어보겠습니다. Windows Azure Cloud Service 프로젝트 항목을 이용하여 프로젝트를 생성하면 아래의 화면과 같이 별도의 프로젝트 생성 마법사가 나타납니다. 여기서 필요한 만큼 Worker Role과 Web Role, 각 Role에서 사용할 언어, Role의 성격을 정의할 수 있습니다. Visual Studio 2008의 경우 사용 가능한 언어가 C#과 VB.NET으로 제한되고, Visual Studio 2010의 경우 C#과 VB.NET 외에 Worker Role에 한하여 F#도 사용할 수 있습니다.
추가하기를 원하는 프로젝트 템플릿의 종류를 좌측 Roles 목록에서 선택하고, ">" 버튼을 클릭하여 Cloud Service Solution 목록에 추가합니다. 여러 언어를 동시에 추가하고 관리할 수 있으며 필요하지 않을 것 같은 프로젝트는 우측에서 항목을 선택한 후 "<" 버튼을 클릭하여 다시 제거할 수 있습니다. 아래는 선택의 예시입니다. 일반적으로, 대표 Web Role 하나와 여러 개의 Sub Worker Role의 조합을 많이 사용합니다.
프로젝트의 이름을 지정하기 위하여, 우측 목록에서 이름을 바꾸기 원하는 항목을 선택하고, 마우스가 항목 위에 롤 오버 되었을 때 나타나는 우측의 연필 모양 아이콘을 클릭하면 이름을 바꿀 수 있는 입력란이 나타나게 됩니다. 이 때 원하는 이름을 입력하면 됩니다. 모든 설정이 아래와 같이 끝이 났다고 하였을 때 OK 버튼을 클릭하여 프로젝트를 생성합니다.
이제 아래와 같이 프로젝트가 생성되는 것을 보실 수 있습니다.
위의 그림에서 주황색 사각형으로 강조 표시한 파일들이 각각의 Role에서 핵심이 되는 파일들입니다. Worker Role은 백그라운드 작업을 중심으로 구성되는 프로그램이기 때문에 프로그램의 시작을 직접 프로그래밍 코드로 구현하는 것이 주가 되며, Web Role은 처음 보여줄 웹 페이지를 정의하는 일이 주가 되기 때문입니다. 그리고 우측의 솔루션 탐색기에서 파란색 사각형으로 강조 표시한 항목이 우리가 나중에 Windows Azure에 프로그램을 배포할 때 사용하는 핵심 단위 프로젝트입니다. 이 프로젝트를 정상적으로 표현하고 기능을 활용할 수 있기 위한 것이 Windows Azure Tools for Visual Studio의 주된 역할입니다.
다음 시간에는
다음 시간부터는 Windows Azure 기반의 응용프로그램에서 가장 고른 기능 사용 분포를 보여주는 트위터 스타일의 방명록 응용프로그램을 단계별로 작성하는 과정을 설명하도록 하겠습니다. Windows Azure Storage의 Queue, BLOB, Table을 사용하도록 구성되어있으며, SQL Azure를 이용하여 사용자 인증을 수행하기까지 하는 과정을 종합적으로 다루게 될 것입니다.
지난번 글 (http://vsts2010.net/303)에 이어서 오늘부터는 Windows Azure 기반 응용프로그램을 개발하기 위한 본격적인 실습 위주의 글을 시리즈로 연재하게 되었습니다. Windows Azure 기반의 응용프로그램을 개발하는 방법은 여러 가지가 있을 수 있습니다만 Visual Studio 2010을 활용하여 Windows Azure 기반의 응용프로그램을 개발하는 것에 관한 내용을 중심으로 블로그를 연재할 예정임을 미리 밝혀둡니다.
Windows Azure 기반 응용프로그램 개발을 위한 필요 사양 요약
필요한 운영 체제: Windows Vista, Windows 7, Windows Server 2008, Windows Server 2008 R2를 지원합니다. Windows 2000, Windows XP에서는 개발하실 수 없습니다.
필요한 구성 요소: IIS 7.x (ASP.NET, WCF HTTP 활성화, 정적 컨텐츠, CGI 기능이 필요합니다.)
필요한 개발 도구: Visual Studio 2008 SP1, Visual Web Developer 2008 Express SP1, Visual Studio 2010, Visual Web Developer 2010 Express 중 하나가 필요합니다. 이 글에서는 Visual Web Developer Express 2010을 택하여 설명을 드리겠습니다.
필요한 데이터베이스: SQL Server 2005 Express 이상의 데이터베이스
주의 사항: Visual Studio, Visual Web Developer의 모든 CTP, RC, Beta 버전 및 .NET Framework의 CTP, RC, Beta 버전을 설치 전에 완전히 제거하여 주십시오.
팁: 배포 후 호환성 문제를 최소화하기 위하여, Windows Azure 기반 응용프로그램을 개발할 때에는 64비트 버전의 Windows Vista, 7, Server 2008, Server 2008 R2를 이용하여 개발하시는 것을 권장합니다. 64비트 버전의 Windows를 가지고 있지 않은 경우 32비트 버전의 개발 환경을 이용하더라도 문제는 없습니다.
Visual Web Developer Express 2010으로 시작하는 Windows Azure 개발 환경 구축
Visual Web Developer Express 2010은 학생, 프로그래밍 입문자, 아마추어 개발자 등을 위하여 제공되는 Visual Studio의 무료 버전입니다. 그러나, 상용 목적으로 소프트웨어 개발을 하는 동안에도 자유롭게 제한없이 이용하실 수 있으며, 전체 버전의 Visual Studio 2010을 구입하기 이전에 Visual Studio 2010이나 최신 기술을 빠르게 테스트해보기 위한 목적으로도 이용이 가능합니다. 이번 글에서는 Visual Web Developer Express 2010을 이용하여 개발 환경을 구축하는 과정을 보여드리도록 하겠습니다.
Windows Vista / 7에서 기본 환경 설정하기
1. 시작 메뉴를 클릭하고 프로그램 및 파일 검색란에 아래와 같이 appwiz.cpl을 입력한 후 Enter 키를 누릅니다. Windows Vista를 사용 중이시고, 고전 메뉴를 사용 중이신 경우 키보드의 Windows 키와 R 키를 동시에 눌러 나타나는 실행 대화 상자에서 같은 방법으로 실행할 수 있습니다.
Windows 7에서 실행
Windows Vista에서 실행
2. 아래의 화면에서, Windows 기능 사용/사용 안함 항목을 클릭합니다. 사용자 계정 컨트롤 설정에 따라 최소 한 번 이상 관리자 권한이 필요함을 승인해야 하는 대화 상자가 나타날 수 있습니다.
3. Windows 기능 대화 상자에서, Microsoft .NET Framework 3.5.1 항목 아래의 Windows Communication Foundation HTTP Activation 항목을 체크합니다. 그리고, 아래의 이어지는 그림에서와 같이, 인터넷 정보 서비스 항목 아래의 응용프로그램 개발 기능 아래의 "ASP.NET"과 "CGI", 일반적인 HTTP 기능의 "정적 콘텐츠" 항목을 체크한 후, 확인 버튼을 클릭하여 설정을 적용합니다.
Windows Server 2008 / 2008 R2에서 기본 환경 설정하기
1. 시작 메뉴를 클릭하고 프로그램 및 파일 검색란에 아래와 같이 appwiz.cpl을 입력한 후 Enter 키를 누릅니다. Windows Vista를 사용 중이시고, 고전 메뉴를 사용 중이신 경우 키보드의 Windows 키와 R 키를 동시에 눌러 나타나는 실행 대화 상자에서 같은 방법으로 실행할 수 있습니다.
2. 아래의 화면에서, Windows 기능 사용/사용 안함 항목을 클릭합니다. 이 기능을 이용하여 설정을 변경하기 위해서는 관리자 계정 - 또는 - 대행 계정으로 시스템에 접속한 상태여야 합니다.
3. 서버 관리자 콘솔이 나타나면, 오른쪽 트리뷰에서 기능 항목을 오른쪽 버튼으로 클릭합니다. 그 후 나타나는 팝업 메뉴에서 "기능 추가" 메뉴를 클릭합니다.
4. 기능 추가 마법사에서 .NET Framework 3.5.1 기능 항목 아래의 WCF 활성화 항목의 HTTP 활성화를 체크합니다. 이미 설치되어있는 경우, 체크된 상태로 비활성화된 항목이 보입니다. 다음 버튼을 클릭하여 진행하거나, 이미 설치되어있는 경우 취소 버튼을 클릭하여 마법사를 종료할 수 있습니다. 시스템을 다시 시작해야 할 경우, 다시 시작한 다음 5단계로 이동합니다.
5. 이제 웹 서버로서의 역할을 추가하기 위하여 역할 항목을 오른쪽 버튼으로 클릭하고, 역할 추가 메뉴를 클릭하여 역할 추가 마법사를 시작합니다. 시스템을 다시 시작하도록 권고 받았지만 재시작하지 않았을 경우 재시작을 안내하는 대화 상자가 나타날 수 있습니다.
6. 이어지는 두 화면에서처럼 웹 서버에 대한 역할이 구성되어있는지 확인 후, 웹 서버 역할 항목이 설치되어있지 않은 경우 체크하여 설치를 진행합니다. 이미 설정되어있는 경우 비활성화된 상태로 나타나므로 이 경우에는 마법사를 그냥 종료하면 됩니다.
Visual Web Developer 2010 다운로드 및 설치
Visual Web Developer 2010은 Windows Azure 기반 응용프로그램 개발을 위하여 사용할 수 있는 무료 개발 도구입니다. Visual Web Developer 2008의 경우 Service Pack 1 이상을 포함한 버전을 다운로드하여 사용할 수 있습니다. 더불어서, Silverlight Tools 역시 Visual Web Developer를 기반으로 맞추어진 개발 도구이기 때문에 같이 설치하여 사용하면 Microsoft의 최신 웹 기술의 혜택도 같이 얻을 수 있습니다.
Visual Web Developer 2010 Express를 다운로드하려면 http://www.microsoft.com/web 에서 다운로드 가능한 Web Platform Installer를 설치해야 합니다. 이 프로그램을 설치하고 난 후에 시작 메뉴에 아래 그림과 같이 바로 가기 메뉴가 생성되며, 언제든 이 메뉴를 이용하여 최신 웹 제품이나 널리 사용되는 웹 어플리케이션을 다운로드할 수 있습니다.
Web Platform Installer를 시작하면 아래와 같은 화면이 나타납니다. 여기서, 웹 플랫폼 탭을 선택하고, 도구 섹션으로 이동하여 사용자 지정 링크를 클릭합니다.
아래와 같이 개발자 도구 그룹이 나타나면 여기서 Visual Web Developer 2010 Express 체크 박스를 선택합니다. 필요한 경우, WCF RIA Services Toolkit과 Silverlight Toolkit 등을 같이 설치하여 Windows Azure Web Role 개발 때 같이 적용할 수 있습니다.
설치 버튼을 누르면 이후의 모든 설치 과정을 Web Platform Installer가 대행하여 처리하고 그 결과를 보여줍니다. 설치 과정 중에는 관리자 권한이 필요하며, 사용자 계정 컨트롤이 설정된 시스템에서는 한 번 이상 관리자 권한 요청에 대한 승인이 필요할 수 있습니다.
개발자를 위한 설치: Windows Azure Tools for Visual Studio 설치하기
만약 단순히 만들어진 Windows Azure Package를 Local Machine에서 테스트하기 위하여 환경을 구축하고자 하는 경우에는 아래의 "테스트 환경을 위한 설치: Windows Auzre SDK 설치하기" 절을 참조하여 주십시오. 64비트 버전의 Windows Server 2008 환경에서 Cloud Application을 미리 테스트하는 시나리오에서 유용할 수 있습니다.
테스트 환경을 위한 설치: Windows Azure SDK 설치하기
Windows Azure 환경에서는 Windows Server 2008 R2 x64를 기본 운영 체제로 사용합니다. 만약 상호운용성 등의 복잡한 요구 사항을 필요로 하는 클라우드 기반 응용프로그램의 경우, 이 운영 체제와 동일한 환경에서 Windows Azure SDK만을 설치하여 Windows Azure Tools로 제작된 배포용 패키지 파일을 실제로 Windows Azure Cloud Environment에 게시하기 전에 올려보는 것은 문제를 사전에 진단하고, 디버깅을 하는데에 무척 유리한 전략이 될 수 있습니다.
Windows Azure 환경을 위하여 최적화된 운영 체제와 플랫폼을 이용하기 때문에, RTM 버전으로 출시된 운영 체제와 환경 설정과는 구분되는 점이 몇 가지 있습니다. 아래는 Windows Azure 환경에 특화하기 위하여 변경된 설정을 로컬 / 개발자 컴퓨터에서 재현하기 위한 패치들로 원활한 개발과 테스트를 위해서는 반드시 설치해야 하는 패치들입니다.
Windows Communication Foundation을 Web Role에 추가하고 테스트하는 프로젝트를 만드실 경우, http://code.msdn.microsoft.com/KB971842 페이지에서 Windows Vista / Server 2008용 패치를 반드시 설치하십시오.
Windows Communication Foundation을 Web Role에 추가하고 테스트하는 프로젝트를 만드실 경우, http://support.microsoft.com/kb/977420 페이지에서 Windows 7 / Server 2008 R2용 패치를 반드시 설치하십시오.
Windows Vista SP2, Windows Server 2008 SP2 이전의 운영 체제에서 FastCGI를 이용하여 Web Role을 개발하고 테스트하는 프로젝트를 만드실 경우, http://support.microsoft.com/kb/967131 페이지에서 FastCGI 관련 패치를 반드시 설치하십시오.
다음 시간에는
다음 글에서는 본격적으로 Windows Azure Tools for Visual Studio를 이용하여 프로젝트를 만들고, 샘플 응용프로그램을 만들고 테스트하는 과정을 실습해보도록 하겠습니다. 궁금하신 점이나 어려운 점은 rkttu nospam rkttu dot com - 또는 - twitter at rkttu 에서 이야기하실 수 있습니다.
이 글을 통해서 C++/CLI의 특징이나 .NET 언어 중에서 어떤 특징을 가지고 있는지 알 수 있습니다.
유연한 프로그래밍 모델
C++는 C#에 비해 언어적
표현력이나 라이브러리가 부족하다는 단점이 있지만 C#에 비해서 프로그래머가 가질 수 있는 자유도가 무척
높습니다(때로는 이것 때문에 많은 문제를 일으키지만).
C#으로 프로그래밍을 할 때는 무조건 객체 지향 프로그래밍 모델만
사용해야 합니다. 그러나 C++는 절차형 프로그래밍, 객체 지향 프로그래밍, 제너릭 프로그래밍, 메타 프로그래밍 등 프로그래머가 원하는 모델을 선택하여 프로그래밍 할 수 있습니다.
.NET에서 C++/CLI를
사용하면 이런 C++의 장점을 바로 얻을 수 있습니다.
어떤 .NET 언어보다도
뛰어난 성능
보통 .NET에서 프로그래밍 할 때 어떤 언어를 사용하나 동일한 성능을
낸다고 생각하지만(즉 언어는 달라도 컴파일 결과로 나오는 MSIL은
동일하다고) 이것은 잘 못된 생각입니다.
C++ 컴파일러 팀은 수년에 걸쳐 네이티브 코드의 최적화로부터 얻었던
지식을 C++/CLI의 최적화에 적용할 수 있도록 많은 노력을 했습니다. 그 결과 다른 .NET 언어보다 최적화된 MSIL를 만들어냅니다.
VC++은 어느 컴파일러보다 최상의 최적화를 제공하고 이것은 네이티브
뿐만이 아닌 매니지드 코드에 대해서도 같습니다. VC++ 컴파일러는 네이티브 코드의 모든 최적화 방법을 MSIL에도 적용하여 다른 .NET 언어보다 더 뛰어난 최적화를 할
수 있습니다.
.NET에서 가장 최적화된 .NET
코드를 만들어 내는 것은 C++/CLI 입니다.
네이티브 코드와 상호 운용 가능
사실
C++/CLI가 .NET에서 가장 큰 의미를 갖는 것이 바로 이 부분이라고 생각합니다.
.NET의 다른 언어에서 네이티브 코드를 사용하려면 네이티브 코드를 DLL로 만들어서 P/Invoke로 호출해야 합니다. 그러나 C++/CLI는 네이티브 코드와 매니지드 코드를 혼합하여
사용할 수 있습니다. 네이티브 함수로부터 매니지드 함수를 호출하는 경우 특별한 구문을 기술할 필요가
없습니다.
네이티브에서 매니지드 호출 또는 매니지드에서 네이티브를 호출하는 경우 서로간의 경계를 넘어가야 하므로 비용이
발생하는데 이런 호출을 최대한 줄여야 성능에 좋습니다. C#의 경우에는 서로간의 호출을 줄여야 하는
경우 인터페이스 변경 등이 필요하나 C++/CLI는 /clr 스위치를
사용하는 것으로 쉽게 변경할 수 있습니다. 이러한 결과로 네이티브와 매니지드 간의 호출에 발생하는 비용을
최소화 할 수 잇습니다.
매니지드 코드와 네이티브 코드의 상호 운용에서 가장 비싼 비용은 마샬링입니다.
C#의 경우 P/Invoke를 호출할 때 CLR에
의해서 암묵적으로 마샬링이 실행됩니다. 그러나 C++/CLI는
프로그래머가 필요에 따라서 명시적으로 마샬링을 할 수 있어서 한번 마샬링한 데이터를 복수로 사용할 수 있어서 마샬링에 의한 비용을 줄일 수 있습니다.
.NET 프로그램의 처음 실행 시의 딜레이
.NET으로 만든 프로그램과 네이티브로 만든 프로그램의 차이 중의
하나가 .NET으로 만든 프로그램은 처음 실행 시에 CLR을
읽기 위해 딜레이가 발생하는 것입니다. 그러나 C++/CLI는
이런 문제를 회피할 수 있습니다.
VC++에는 DLL 딜레이
로딩 이라는 기능이 있습니다. 링커 옵션에서 /DELAYLOAD:dll에 딜레이 로딩을 할 .NET 어셈블리를 지정하면 네이티브 프로그램과 동일한 정도의 속도록 실행 시킬 수 있습니다.
좀 더 C++/CLI가
다른 .NET 언어보다 좋은 점이 있지만 이것으로 줄이겠습니다.
C++/CLI를 아시는 분들은 언어적 위치의 애매함에 의해서 좋지 않은 인상을 가진 분들이 많으리라 생각하는데 제가 소개한 장점을 통해서
조금이나마 좋은 인상을 얻으셨는지 모르겠네요^^.
C++/CLI가 다른 .NET 언어보다 어떤 특징을 가지고 있는지 좀 더 자세하게 알고 싶다면
위에 소개한 MSDN 매거진의 원문(영어)을 보시던가 또는 제가 발 번역한 글을 보시기 바랍니다.