첫 만남, 첫 사랑. 첫 차 그리고 첫 집!!
여러분들도 이 단어들을 연상만 해도 왠지 설레고 입가에 웃음이 나올 것 입니다. 저 마다 다른 경험과 추억을 가지고 있겠지만 왠지 '처음' 이라는 단어는 낯설기도 하고 앞으로 펼쳐 질 뭔가에 대해 호기심 가득 할 겁니다. 지난 주에 저도 Visual Studio 2008 와 설레는 첫 데이트를 했습니다. 인터넷 뉴스에 보았듯이 내부적으로 Visual Studio 2008 제품이 정식 발표(RTM)가 되어 저의 노트북��� 새롭게 파티션을 나누고 한글 윈도우 비즈타 얼티밋 버전과 더불어 Visual Studio 2008 영문 버전 (현재 한글 버전은 베타 버전으로 곧 개봉 예정임, 평가판 다운로드 받기)을 설치했습니다. J
<그림1: Visual Studio 2008 설치 첫 화면>
우선 설치한 소감을 밝히자면 Visual Studio 2005 과 비슷한 사용자 화면을 구성하고 있지만 외면적으로나 내면적으로 많이 변화 한 것 같습니다. 특히, 통합 개발 환경을 실행시킬 때 떠오르는 속도는 가히 환상적입니다. 지난 주에 말씀 드렸던 Visual Studio 2005 는 .NET 프레임워크 3.5 과 기본적으로 내장되어 있고 라이브러리 소스 또한 최초로 공개 되어 있습니다. 또한 거의 8~9년 만인가요? Visual C++ 사용자들을 위해 MFCNext 버전이 수록 되어 있습니다.
<그림2: Visual Studio 2008 제공 언어>
그 외에도 언어 별로 잘 정리 되어 사용자가 필요한 언어만 설치 하도록 지원해 줍니다. 갈무리한 그림은 VSTS 버전이므로 Visual Studio 2008 프로페셔널 버전 보다 Architect 및 Unit Testing Tools 와 같은 컴포넌트들이 더 포함되어 있습니다. 그리고 SQL 서버 2005의 무료 버전인 SQL Server 2005 Express Edition 이 포함되어 있으며 번들로 Crystal Reports Report 가 포함되어 있습니다. 그런 데 여기에서 자세히 보면 뭔가 하나가 빠졌다고 생각하실 겁니다. 네엡, 그렇습니다. Visual J# 입니다. Visual J# 이 Visual Studio 2008부터는 사라졌습니다.
<그림3: Visual Studio 2008 컴포넌트>
사용자가 원하는 옵션을 선택한 다음 이제 설치하면 설치 화면 가득 컴포넌트별로 설치 될 것 입니다. .NET 프레임워크 3.5 뿐만 아니라 그의 동생인 .NET 컴팩트 프레임워크 2.0 과 3.5, Visual Studio 2008 통합 개발 환경 , Office 개발을 위한 Visual Studio Tools for Office 그리고 모바일/임베디드용 데이터베이스인 SQL Compact Edition 3.5, 모바일 디바이스 사용자를 위한 Windows Mobile 5.0 R2 SDK 그리고 각종 64비트용 컴파일러 및 컴포넌트 등을 설치 할 겁니다. 설치 시간은 2시간 정도 걸렸습니다. (저의 노트북 사양은 AMD Turion 64 모바일, 2.2 GMz, 램은 2기가, 하드는 파티션 해서 40기가)
<그림4: Visual Studio 2008 WPF 디자이너>
설치만 하고 끝나면 재미가 없잖아요? 우리의 목표는 Visual Studio 2008을 사용하기 위함이지 설치가 아니므로. 간단히 .NET 프레임워크 3.5 기반의 WPF 응용 프로그램을 하나 만들어 보도록 하겠습니다. 언제나 보듯이 Visual Studio 는 좌 도구상자(Toolbox), 우 솔루션 탐색기(Solution Explorer) 로 이루어져 있습니다. 중앙에 디자인을 하거나 코딩을 할 수 있도록 에디터 창과 아래 창에는 경고 메시지를 보여주는 에러 리스트 창으로 다시 나누어 집니다. 이때 중앙에 있는 WPF 디자이너를 한 번 보시고 Visual Studio 2005 까지는 컨트롤 간의 크기와 정렬을 일치 시킬 수 있는 기능이 포함되어 있는 데, Visual Studio 2008 에서는 빨간색으로 표시된 숫자가 보입니까? 이것이 바로 Width 와 Height 를 Pixel 단위로 개발자가 디자인 하면서 어느 정도의 크기로 할 지를 수치로 볼 수 있도록 더 추가 되었습니다. 이제 컨트롤의 UI 때문에 개발자와 디자이너가 싸울 일이 없겠지요! 호호호~
이제 사용자가 버튼을 눌러 Label 컨트롤에 메시지를 나오게 하려면 다음과 같이 Button 을 더블 클릭 하면 button1 의 이벤트 핸들러가 자동적으로 만들어집니다. 그리고 아래의 표에서 보는 것 같이 메시지를 넣습니다.
private void button1_Click(object sender, RoutedEventArgs e)
{
label1.Content = "안녕하세요? Visual Studio 2008 입니다!"; // 이 부분을 코딩하기
}
최종적으로 <그림5>는 위의 코드와 디자인을 실행한 화면 입니다. Visual Studio 2008 이 개발도구라서 기본적으로 디버그 화면으로 뜹니다.
여러분 어때요? COOL 한가요? 첫 데이트부터 상대 이성에게 너무 많은 것을 보여주면 신비감이 떨어지잖아요~!! 그래서 저도 여기까지~!!
<그림5: Visual Studio 2008 디버그 화면>
그래도 더 궁금한 분들은 한글로 된 MSDN 웹 사이트를 눌러 주시고 실행한 예제 코드는 여기에 링크해 두도록 하겠습니다. 궁금한 사항은 리플요~!!
여러분들은 .NET 프레임워크가 무엇인지는 잘 아시죠? .NET 을 개발하려면 개발 도구는 Visual Studio, API는 .NET 프레임워크가 기본적으로 필요합니다. 또한 모바일이나 임베디드 응용 프로그램을 개발하는 사람은 .NET 컴팩트 프레임워크(Compact Framework)가 무엇을 하는 것인지 잘 아실 겁니다. 그렇다면 여러분들 .NET 마이크로 프레임워크(.NET Micro Framework)에 대해 들어 보셨나요?
.NET 마이크로 프레임워크는 .NET 컴팩트 프레임워크와 완전 다릅니다. .NET 마이크로 프레임워크는 윈도우 모바일과 같은 스마트 폰이나 포켓PC에서 보다 더 작고 세밀한 임베디드 시스템에만 사용됩니다. 예를 들어, 홈이나 공장에서 사용되는 자동화(Automation) 분야에 사용하는 것이 딱 맞을 겁니다. 따라서 기존의 플랫폼 빌더나 타겟 디자이너와 같은 임베디드 도구에서는 사용할 수 없고 Visual Studio 2005 나 Visual Studio 2008 에서 .NET 마이크로 프레임워크 SDK를 플러그-인으로만 설치하면 쉽게 쓸 수 있습니다. 따라서 .NET 마이크로 프레임워크는 지금까지 나온 역사상 가장 작은 초미니 .NET 프레임워크 랍니다. 그리고 놀라운 것은 이것을 C/C++ 언어로만 개발하는 것이 아니라 C# 이나 VB.NET으로 쉽게 개발할 수 있습니다.
그림2는 .NET 마이크로 프레임워크가 어떻게 구성되어 있는 지에 잘 보여 줍니다. 크게 3가지 부분으로 런타임, 라이브러리, 사용자 인터페이스로 나누어 집니다. 맨 아래쪽에 보시면 하드웨어가 있을 것이고 그 위에 기본적인 OS의 특성을 지니고 있고 하드웨어 추상 계층(HAL, Hardware Abstraction Layer)가 존재합니다. 여러분들도 잘 아시다시피 임베디드 장치는 하나의 CPU와 하나의 보드로만 이루어지지 않았죠? 다시 말해, 우리 PC는 X86 프로세서인 인텔이나 AMD 프로세서가 대부분이지만 임베디드는 ARM도 될 수 있고 MIPS도 될 수 있습니다. 또한 하나의 CPU라도 보드의 설계상 여러 가지의 입출력을 다를 수 있지요. 그래서 이것들에 대해 종속을 피하려면 HAL에서 그러한 처리를 소프트웨어 적으로 바꾸어 줍니다.
그렇다면 PAL은 또 무엇일까요? PAL은 플랫폼 추상화 계층(Platform Abstraction Layer) 로 플랫폼에서 공통적으로 사용되는 부분을 사용할 수 있도록 지원해줍니다. 예를 들어, 임베디드 장치에서는 타이머, 램, GPIO 등을 공통적으로 처리해 주어야 합니다. 그 위에 마침내 .NET 프레임워크 핵심인 CLR이 올라가지요. CLR은 공통 언어 런타임으로써 메모리 관리를 사용자가 관리하는 방식이 아닌 가비지 컬렉터에서 관리해 줌으로써 메모리 누수 현상을 발생하지 않습니다. 또한 이 CLR 덕분에 C# 이나 VB.NET언어로 초미니 임베디드 장치를 제어 할 수 있습니다.
CLR 위에 이제 라이브러리에서 여러 가지 TCP/IP 네트워킹을 통한 유무선 통신을 제공합니다. 또한 재미나는 것은 사용자 인터페이스를 WPF(Windows Presentation Foundation)으로 개발할 수 있다는 것이 혁신적입니다. WPF란 Windows Vista 의 멋진 테마를 만들 수 있는 차세대 .NET 프레임워크지요! 이것을 임베디드 장치에서 쓸 수 있다니 얼마나 멋진 일이겠습니까? 그림3은 .NET 마이크로 프레임워크의 개체 모델을 아주 쉽게 잘 나타나져 있습니다.
따라서 .NET 마이크로 프레임워크는 현재까지는 ARM9 이나 11 CPU들만 지원합니다. 그것도 MMU가 없는 소규모 장치에 제한하고 있고 RAM에서는 256KB까지 올라가고, 플래시 메모리는 512KB까지 올라갑니다. 타이니 OS(Tiny OS)나 펌웨어(Firmware) 분야의 OS 크기와 비슷합니다. 또한 그림3에서도 보듯이 기본적으로 표현할 수 있는 텍스트와 이미지, 스트림과 배열리스트 그리고 디버깅 등을 할 수 있도록 API들을 제공합니다.
오늘은 여기까지 소개 하고 내일은 Visual Studio 에서 .NET 마이크로 프레임워크 SDK를 가지고 어떻게 개발하는지에 대해 배우도록 하겠습니다. 또한 기존의 타이니OS나 펌웨어 개발자들이 이 .NET 마이크로 프레임워크와 어떠한 차이점이 있는지 H/W나 S/W 적으로 이야기 하도록 하겠습니다. 궁금한 사항이 있는 분들은 답변 부탁 드립니다.
여러분들은 임베디드 장치가 이 세상을 바꿀 수 있다고 생각 하십니까?
지난 주 토요일 250 명 이상 참석한 KELP(Korea Embedded Linux Project)라는 커뮤니티 세미나에서 관객들에게 던진 바로 이 질문 입니다. 지난 달부터 KELP 세미나를 준비하면서 어떤 주제로 이야기 할까 자다가도 일어나서 고민을 하고 혹시 임베디드 리눅스 진영에 계신 분들에게 민감하게 이야기를 해서 거부감을 주지 않을까도 고려했습니다. 사실 윈도우 임베디드냐? 리눅스냐? 운영체제 플랫폼 보다 우리나라 임베디드 개발자들에게 비전과 저의 마인드를 첫번째로 공유하고 싶었습니다.
예를 들어, 마이크로소프트가 폰 시장에 뛰어들면서 Windows Mobile 기반의 스마트 폰을 개발하는 것도 기존의 폰 시장에서의 파괴적이었고 iPhone 이나 G-Phone 과 같은 폰이 만들게 된 계기를 마련했고, 여러분들이 만들고 계신 자동차 네비게이션 시스템이나 PMP등도 우리의 생활을 편리하게 해 줌으로써 세상을 바꾸었다고 생각합니다. 감히 내가 가보지 못한 지방이나 위험 구간을 음성으로 알려주는 최첨단 서비스까지. 저는 이 질문에 대해 당연히 임베디드 장치를 개발함으로써 이 세상을 바꿀 수 있다고 목소리 높여서 이야기 했습니다. 여러분들도 제 의견에 동의 하시지요?
몇몇 분들은 저의 의견에 동의를 해 주셨고 비록 조그만한 장치이지만 강력한 파워로써 이 세상을 바꾸어 나갈 것이라고 확신합니다. 비록 추운 토요일이었지만 숭실대학교 1층 다솜 홀에 많은 분들이 참석 하셔서 저의 세션 외에 훌륭한 연사들의 세션이 도움이 되었으리라 생각합니다. 한 가지 아쉬운 점은 그 날 외부의 노트북을 연결할 수 없어서 제가 준비해 간 개발 도구 및 플랫폼 데모를 보여줄 수 없어서 안타까웠습니다. 또한 많은 분들은 윈도우 임베디드 CE6 소스가 커널 까지 100% 공개 되어 있다는 점과 윈도우XP 임베디드가 무엇이 다른지에 대해 헤깔려 하는 것 같습니다.
KELP 세미나에 대한 후기는 여기에 있으며 저의 세션에 대해 AllCyber 커뮤니티에 많은 사진을 1편과 2편으로 올려 놓았으니 참석하지 않은 분들은 그날의 열기를 한번 느껴 보시기 바라고 발표한 자료를 여기에 공유하오니 다운로드 받아 보십시오!
앞으로도 KELP의 수요 또는 목요 세미나에도 관심을 가지고 참석하며 많이 궁금해 여기는 윈도우 임베디드 CE에 대해 기회가 주어진다면 더 깊게 전달해 드리며 Windows CE를 공부하는 소모임에게 기술 및 공부 장소 등을 지원할 계획입니다.
국내 수많은 C/C++ 개발자들은 MFC가 죽은 것 아니냐? 심지어는 Windows Embedded CE 6 플랫폼 빌더 컴포넌트에서도 별도로 빠져 있고 의아해 하는 분들이 많을 것입니다. 이것에 대한 답은 그렇지 않다는 것 입니다.
내년에 업그레이드 될 Visual Studio 2008 안에는 Visual C++ 2008 이 포함되어 있는 데 Visual C++ 2008 에서는 거의 8-9년 만에 수많은 기능들이 업데이트 되었습니다. 지난 달에 본사 R&D 매니저 두 사람과 함께 20개의 국내 C/C++ 언어를 많이 사용하는 여러 소프트웨어 업체를 방문 했을 때 MFCNext와 컴파일러 업데이트 소식은 오래 간만에 개발자 여러분들에게 환영 받았습니다. J
이제 Visual Studio 98 이나 Visual Studio 6.0 + SP5 개발도구는 낡은 서랍 속에 넣으시고 쿨~한 Visual Studio 2008 (Visual C++ 2008)을 사용할 때가 온 것 같습니다. 물론 새로운 환경에 도전하는 것이 그리 만만치 않다는 것을 잘 압니다. 저 또한 Visual C++ 1.51 에서 Visual C++ 2.0, Visual C++ 4.0 발표 될 때마다 편집기 키워드가 달라서 고생한 경험이 있습니다만 또 새로운 설치해 보고 사용해 보는 재미가 솔솔 하잖습니까? 그렇다면 어떤 기능이 업데이트 되었는 지 한번 읽어 보시고 찬사 받을 일인지 아니면 또 마이크로소프트가 업그레이드를 강요 하는 지 평가해 주시기 바랍니다.
예를 들어, Office 의 리본 UI 및 Internet Explorer 의 리바(Rebar) 또는 태스크 팬, Visual Studio 의 끼어다가 뺏다가 하는 Docking Document Interface. 외국 협력 업체들이 지금까지 만들어서 판매한 것도 있지만 여러분의 MFC 응용 프로그램에서 최신 UI를 적용 시켜 고객들에게 더욱 더 편리한 경험을 제공할 수 있습니다.
사실은 이것은 모두 UI에 관계된 것이죠? VC++ 개발자들의 소망이 무엇인지 잘 압니다. 그래서 내년 상반기까지 TR1을 업그레이드 하려고 노력 중에 있습니다. TR1이란 ISO 2003 표준 C++ 라이브러리를 C++0x 표준을 추가하는 것을 말합니다. 여기에는 스마트 포인터, 정규 표현식 파싱(Regular Expression Parsing) 그리고 새로운 컨테이너(튜플, 배열, 정렬되지 않는 집합)등, 철학적인 랜덤 숫자 생성기, 다형성 함수 래퍼, 타입 트레이트(Type traits)등 좀더 C++을 쉽고 안전하게 쓸 수 있도록 제공합니다.
혹자들은 무조건 C/C++ 개발자가 .NET(C#, VB.NET)으로 이전해야 하는가에 대해 저희 Evangelist 들에게 많이 묻습니다. 그에 대한 답은 그럴 때가 있고 그렇지 않을 때가 있습니다. 다음 번 블로그 때에는 그러한 이슈에 대해 여러분들은 어떠한 생각을 가지고 있는 지 글을 준비해 보도록 하겠습니다. 좀더 Visual C++ 2008 에 대해 궁금한 분들이 간만에 영어 Listening 공부를 해 보시지요! 팻 브레너의 채널9에서 찍은 비디오가 준비되어 있습니다. 그리고 저희 D&PE 부서 총 대빵(?) 인 Soma 의 블로그도 읽어 보세요! 계속해서 Visual C++ 2008 소식에 대해 업데이트 해 드리도록 하겠습니다. J