Task Parallel Library
 
Parallel Extension 은 PLINQ 와 더불어 확장 가능한 Task Parallel Library 를 제공합니다. Task Parallel Library 는 PLINQ 를 이용하지 않고 개별적이고 수동적인 병렬 처리 작업을 위해 사용할 수 있습니다.
 
Task Parallel Library 는 크게 세 가지 방법으로 병렬 처리를 위한 Library 를 제공합니다.
 
Loops
 
 
 

 

[그림1] Parallel.For 를 이용한 병렬 처리
 
 


[그림2] Parallel.Foreach 를 이용한 병렬 처리
 
Task Parallel Extension 으로 병렬 처리를 쉽게 처리할 수 있으며, 병렬 처리로 인자값을 넘기거나 하는 작업을 쉽게 할 수 있습니다.
 
Statements
 

 


[그림3] Parallel.Invoke 를 이용한 병렬 처리
 
 
Task
 
특히 Parallel Extension Library 에서 Task 는 수동적으로 병렬 처리를 하기 위해 다양한 기능을 지원합니다. 정교하게 스레드(Thread) 를 처리했던 것에 비하면 심플하고도 직관적으로 병렬 작업을 처리할 수 있습니다.
 
Task 는 보다 정교하게 병렬 처리 작업을 할 수 있습니다.
l 대기
l 취소
l 연장
l 상하(부모/자식) 간의 관계
l 디버그 지원
 
아래는 ThreadPool.QueueUserWorkItem 처럼 바로 작업을 시작하도록 합니다.
 

Task.StartNew(…);

 
아래는 Task 에 대해 대기 및 취소 작업을 진행하도록 합니다.
 

Task t1 = Task.StartNew(…);
t1.Wait();
t1.Cancel();
Task t2 = t1.ContinueWith(…);

 
아래는 작업에 대해 지속적인 병렬 처리를 가능하도록 합니다.
 

var p = Task.StartNew(() => {
    var c = Task.StartNew(…);
}

 
아래는 특정 작업의 결과를 받아 올 수 있습니다.
 

var p =
 Future.StartNew(() => C());
int result = p.Value;
 

 
 
Coordination Data Structures
 
병렬 처리 작업은 PLINQ 와 TPL(Task Parallel Library) 를 지원하기 위해 기존의 데이터 컬렉션 등이 등장하였습니다. 내부적으로 동기화를 지원하지 않았던 문제들을 지원하게 되었고, 특히 오늘날 멀티 코어(Multi Core) 프로세스를 위해 많은 동기적인 문제를 고민해야 했습니다. .NET Framework 4.0 은 이러한 공통적인 문제들을 해결하기 할 수 있습니다.
 
l Thread-safe collections
       ConcurrentStack<T>
       ConcurrentQueue<T>
       ConcurrentDictionary<TKey,TValue>
      
l Work exchange
       BlockingCollection<T>
       IProducerConsumerCollection<T>
l Phased Operation
       CountdownEvent
       Barrier
l Locks
       ManualResetEventSlim
       SemaphoreSlim
       SpinLock
       SpinWait
l Initialization
       LazyInit<T>
       WriteOnce<T>

지난 포스트에서 Parallel Extension 과 LINQ 를 이용한 PLINQ 에 대해서 살펴보았습니다. 지난번에 얘기했듯이 Manual Parallelism 는 Parallel Extension 의 성능을 절대 따라올 수 없다고 하였습니다. 왜냐하면, Parallel Extension 은 Manual Parallelism 의 병렬 처리 방식보다 더 복잡하고 정밀한 병렬 처리 알고리즘으로 처리하기 때문입니다.
 
Parallel Extension 이란?
 
Parallel Extension 은 전혀 새로운 것이 아닙니다. C# 3.0 의 LINQ 는 LINQ 쿼리식을 제공하기 위해 새로운 컴파일러(Compiler) 가 필요했습니다. 정확히 말하자면 C# 의 Language Service 의 버전이 업그레이드 되었고, LINQ 쿼리식을 편하게 쓸 수 있도록 Visual Studio 2008 을 사용해야 했습니다. 다시 말하자면, LINQ 쿼리식이 아닌 확장 메서드(Extension Methods) 만으로 쿼리가 가능했다는 것이 이것을 증명해 줍니다. 확장 메서드(Extension Methods) 는 결국 IL 레벨에서는 정적(Static) 인 인스턴스(Instance) 에 불과하니까요.
 
Parallel Extension 은 새로운 컴파일러(Compiler) 가 필요하지 않습니다. .NET 의 기본적인 코어(Core) 인 mscorelib.dll, System.dll, System.Core.dll 만을 사용하여 구현이 되었습니다. 그리고, 기존의 ThreadPool 을 개선하였고, LINQ 와 통합하여 선언적으로 Parallel Extension 을 사용할 수도 있게 되었죠.
 
Task Parallel Library 를 통해 데이터 처리와 어떤 작업(Task)에 대해서도 병렬 처리도 가능해 졌습니다. 이제는 데이터의 병렬 처리뿐만 아니라, 작업(Task) 단위로서도 Task Parallel Library 로 병렬 처리가 가능합니다.
 
이제는 병렬 처리가 된다는 것이 중요한 게 아니라, 병렬 처리의 내부적인 예외 핸들링이나 Visual Studio 에서 디버깅(Debugging) 이 가능합니다. 이러한 새로운 매커니즘으로 내부적으로는 새로운 예외 핸들링 모델(Exception Handling Model)이 필요했습니다.
 
또한 .NET Framework 4.0 의 Parallel Extension 은 다양한 언어를 지원합니다. C#, VB.NET, C++, F# 그리고 .NET 컴파일러(Compiler) 로 컴파일(Compile) 되는 언어라면 상관없습니다. RoR/PHP 라도 .NET 컴파일러(Compiler)에 의해 컴파일(Compile) 된다면 Parallel Extension 을 사용하는데 전혀 문제가 없습니다.
 
 
Parallel Extension 아키텍처
 
 
[그림1] Parallel Extension 아키텍처 (클릭하면 확대)
 
Parallel Extension 의 병렬 처리는 .NET 컴파일러(Compiler) 로 컴파일(Compile) 되는 어떤 언어든 차별을 두지 않고, 병렬 처리 기능을 사용할 수 있습니다. PLINQ 로 작성된 쿼리(Query)는 별도의 PLINQ Provider 의 엔진(Engine) 에서 쿼리를 분석하는 과정을 거치게 됩니다. 쿼리 분석(Query Analysis) 에 의해 선언된 LINQ 쿼리식을 분석하여 최적의 알고리즘으로 각각의 작업을 배치하게 됩니다.
 

[그림2] Parallel Extension 작업 분할
 
각각 분배되는 작업은 쓰레드 큐(Thread Queue) 에 쌓이고, 이 큐에 쌓이는 작업(Task) 는 실제 작업자 쓰레드(Worker Thread) 에 할당이 됩니다. 하지만, Parallel Extension 은 단지 쓰레드에 할당하는 것으로 작업이 마치기를 기다리지 않습니다. 만약, 작업을 분배하는 것은 Manual Parallel 과 크게 다르지 않기 때문이죠.
 

[그림3] Parallel Extension 작업 분할
 
Parallel Extension Library 는 병렬 처리의 작업을 지속적으로 최적의 상태를 감시합니다. 예를 들어, A 의 작업이 Task 1, Task 2, Task 3 인데, B 의 작업은 모두 마친 상태라고 할 때, Parallel Extension Library 는 A 의 작업을 놀고 있는 B 에게 또 다시 분배합니다. 이러한 반복적으로 병렬 처리의 작업이 최적화 될 수 있도록 하여, 병렬 처리의 성능을 극한으로 끌어올립니다.
 
LINQ 만 알면 난 병렬 처리 개발자
 
Parallel Extension 은 LINQ 와 통합하기 위한 프로바이더(Provider) 를 제공합니다. 아직 LINQ 잘 모르신다구요? 30분만 투자하시면 LINQ 를 사용하는데 큰 지장이 없습니다. 그리고 그만큼 쉽습니다. LINQ 를 이해하기 위해 제네릭(Generic), 확장 메서드(Extension Methods), 익명 타입(Anonymous Methods) 도 함께 공부하시면 좋습니다.
 
예전에 이런 광고도 있었죠.
“비트 박스를 잘하려면?” “북치기, 박치기만 잘하면 됩니다”
 
“그럼 PLINQ 개발자가 되기 위해서는?” “AsParallel() 만 잘하면 됩니다.”
 
맞습니다. Parallel Extension Library 의 AsParallel() 확장 메서드(Extension Methods) 만 알면 당신도 이제 병렬 처리 개발자입니다. 이전 포스트의 PLINQ 예제에서 처럼 AsParallel() 만 붙이면 그것을 PLINQ 라고 부릅니다^^ (병렬 처리를 위한 확장 메서드와 옵션은 더 많이 존재합니다 )
 
아래는 AsParallel() 의 예 입니다.
private static void ParallelSort(List<Person> people)
{
       var resultPerson = from person in people.AsParallel()
                                    where person.Age >= 50
                                    orderby person.Age ascending
                                    select person;
 
       foreach (var item in resultPeople) { }
}
 
하지만, 무조건적인 병렬 처리는 오히려 성능을 저하시킬 수 있습니다. 특히 PLINQ 를 사용하는 병렬 처리는 .NET Framework 내부적으로 쿼리 분석(Query Analysis) 과정을 거치게 됩니다. 각각 프로세서(Processor) 에 분배된 데이터는 또 분배되고, 최적화가 가능할 때까지 계속적으로 분배됩니다. 마치 세포 분할이 일어나는 것처럼 말이죠.
 
최소한 병렬 처리를 위해서 데이터에 대한 이해와 추측이 가능해야 합니다.
 
1.     추측 가능한 데이터의 양
2.     추측 가능한 데이터의 내용
3.     추측 가능한 데이터 처리 시간
 
이러한 최소한의 예측 작업을 하지 않는다면, 오히려 PLINQ 를 이용할 때 성능은 저하될 수 있습니다. 예를 들어, 평균 데이터의 양이 2개라고 가정한다면, PLINQ 의 쿼리 분석(Query Analysis) 작업은 오히려 성능 저하의 요인이 됩니다. PLINQ 쿼리 분석(Query Analysis) 에 의해 두 번째 프로세서(Processor) 의 사용량이 많다고 판단된다면, 병렬 작업은 의미가 없어지고 오히려 성능을 저하시킬 테니까요. ‘쿼리 분석(Query Analysis) 작업이 눈 깜빡 거리는 시간(1/40(0.025)초) 이라고 가정한다면, 만 건의 쿼리 분석(Query Analysis) 작업 시간은 250초’가 될 테니까요.
 

Visual Studio 2010 에게 바란다 - SharePoint 14 Development

SharePoint 2010 2009. 2. 15. 21:37 Posted by 알 수 없는 사용자

VSTS 2010 팀 블로그가 생긴지도 어느덧 한달이 되었군요. 얼마나 많은 활동을 했는가 보다는 얼마나 알찬 내용들을 담아내려고 했는지가 중요한 것 같습니다. 개인적으로 뭐가 되었든 간에 저는 처음 블로깅이군요. ^^; 저는 SharePoint MVP로서 팀블로그에도 SharePoint의 차기 버전을 담으려는 욕심이 있었습니다. 새버전의 Object Model 에서 향상된 점이라던가 UI 측면에서의 변경된 사항등에 말이죠. 헌데 SharePoint 차기 버전 및 이에 대한 VS 2010의 정보도 Microsoft 내부에서도 이는 극비인 모양인 것 같습니다. 짧은 인맥과 정보가 있을만한 곳을 아무리 뒤져보아도 아는 사람이 없군요. 아무래도 하루가 다르게 치솟아 오르는 SharePoint 의 인기탓인 듯 싶습니다.(국내는 예외로 해두죠 ^^;) 여튼 이런저런 이유로 새로운 버전에 대한 내용은 아쉬움을 뒤로하기로 하였습니다.

대신 ’ Visual Studio 2010 에게 바란다 - SharePoint 14 Development’ 라는 주제로 현재 SharePoint 개발에 있어서의 문제점과 아쉬운 부분들을 살펴보고 이에대한 개선점을 살펴 보도록 하겠습니다.

 

 

오늘은 간만에 대학 도서관을 찾았습니다. 졸업시즌 이기도 한 요즘이라 한번 찾아오고 싶더군요. 여튼 학창시절 생각도 나고 사회생활을 시작한 초기 미친듯 일만 하던 시절 토요일이나 일요일에 새로운 닷넷기술을 공부하던 것 생각나서 겸사겸사 찾아왔습니다. 학교를 찾아오는 길이 낫설지 않았지만 새로운 몇몇 가지들이 눈에 띄더군요. 첫번째로 학교에 올라가기가 쉬워졌습니다. 버스가 다니더군요. 높은 곳에 위치한 탓에 운동을 따로 하지 않아도 되었던 그 시절과는 다르게 버스가 수시로 다니고 있었습니다. 학교 정문을 통과하고 도서관 앞에 다다랐는데 에스컬레이터가 있습니다. 와우~ 4층까지 되는 높이를 숨한번 차지않고 올라오다닛!!! 이런 눈부신 발전이!!!

이래저래 도서관에서 새로운 자리를 잡고 오늘은 무슨 공부를 해볼까 하는 중에 급 배가아파오기 시작하더군요. (이놈의 쾌변욕구는 때와 장소를 가리지 않습니다.) 재빠르게 노트북을 덮고 화장실에 갔는데 화장실이 광이나더군요~ 개다가 히터까지 나옵니다. 예전에는 창문이 바로 옆에 있어서 추위에 떨면서 볼일을 보았던 것이 기억나는데…. ~ 매우 편안합니다. ^^; 이런것들을 누리고 있는 재학생들이 얼마나 부럽던지~ 그리고 또 한편으로는 발전하고 있는 학교가 뿌듯하기도 하더군요.

 

현 시국에 대학생을 부러워 한다는 것이 어쩌면 그들에게 맞아 죽을지도 모르는 말들이겠죠. 하지만 학교에서 당연히 해줘야 하는것들에 대해서 내가 누리지 못했던 것들을 이제는 그들이 누릴 수 있게 된다는 사실은 부러움과 함께 뿌듯한 무언가를 몰고 옵니다.

 

그럼 현재의 SharePoint 개발은 어떤가요?

 

SharePoint 의 개발영역은 크게 6가지 정도로 나눌 수 있습니다.

l  리스트나 문서라이브러리에 추가할 수 있는 커스텀 어셈블리(Event Handler, Web Part)

l  리스트 정의나 사이트 정의 같은 Custom XM

l  마스터 페이지나 레이아웃 페이지 및 컨트롤

l  문서라이브러리의 문서템플릿 혹은 폼 템플릿

l  배포 패키지

l  아웃룩에서 클라이언트 연결을 위한 Client Integration

 

그리고 현재시점에서 위와 같은 것들을 개발하려면 최소한 아래의 툴들이 필요합니다.

l  Visual Studio 2008 (2005 도 가능)

l  Windows SharePoint Services 3.0 도구: Visual Studio 2008 Extensions, 버전 1.2

l  WSS 3.0 or MOSS 2007

 

위에 나열한 요소들 개발하려고 보면 SharePoint 개발는 지원받아야 하는 당연한 것들을 지원받지 못하고 있다는 것을 알게 됩니다. 아래 예를 살펴보도록 하죠.

 

만약 제가 SharePoint 에서 리스트를 만들고 이 리스트에 대한 사용자 워크플로우를 생성한 후 바인딩하고 이를 테스트 및 적용하려고 한다면 과연 몇가지의 일들을 해야할까요?

 

1.     WSS 3.0 MOSS 2007 을 설치 - 만약 위의 서비스 및 제품이 설치되어 있지 않다면 디버깅이 불가능 하죠. ,.

2.     (Vissual Studio 가 설치되어 있다는 전제하에)Windows SharePoint Services 3.0 도구: Visual Studio 2008 Extensions, 버전 1.2 를 설치 - 이로써 개발환경 세팅이 끝납니다.

3.     리스트 정의를 생성 여기에서는 GUID, Title 등의 값을 입력하고 이벤트 핸들러등을 작성합니다.

4.     워크 플로우템플릿 정의 생성 - 3에서의 작업과 유사

5.     실제 워크플로우를 디자인하고 비하인드 코드를 작성합니다.

6.     VS 2008 에서 빌드하고 어셈블리를 등록

7.     로컬 서버 개발 환경에서 실제 소스 디버깅

8.     DDF 파일을 생성하고 이를 WSP 형태로 수정

9.     WSP 파일을 실 서버에 복사

10.   STSADM 툴을 사용하여 서버에 설치

11.   동작 테스트

 

위에 나열한 바와 같이 많은 작업들을 우리는 알게 모르게 하고 있습니다.

실제로 하나하나 따져보면 간단한 일들이 아닌 것 많습니다. 위의 1번의 WSS MOSS 2007 설치만 보더라도 간단한 일이 아니죠. WSS 혹은 MOSS 2007d을 설치하려면 반드시 Windows ServerSQL 서버(혹은 SQL Express) 를 설치해야 한다는 의미입니다. (Vista 에서는 WSS를 설치할 수 있는 방법이 있긴 합니다. ^^;)

또한 리스트 정의등을 생성할때는 VS Extension 툴을 이용하면 됩니다. 헌데 이것도 혼자 개발하고 테스트 할때는 매우 편리 합니다만, 대규모 프로젝트에서는 이에대 한 관리가 매우 난감해 집니다. 예를 들어 GUID 관리라던가 리스트의 Static Name 에 대한 네이밍룰 정의 등이죠. 여기서 파생되는 문제는 또 한가지가 있습니다. 팀 개발이 어렵다는 문제죠. 즉 팀 개발에 있어서의 정형화된 Rule 등을 세팅할 수 있는 것이 부재한 상황이죠.

마지막으로 Visual 한 개발 환경을 지원하지 못하고 있습니다. 현재의 Visual Studio 2008 만 살펴보더라도 만은 것들을 Visual 한 환경에서 개발 할 수 있도록 지원을 하고 있죠. SharePoint 도 이를 위하여 SharePoint Designer 를 사용하고 있지만 커스텀 코드를 추가할 수 없다는 단점이 여전히 존재합니다.

 

Visual Studio 2010 에서 SharePoint 14 개발은...

 

위에서 나열한 이러한 단점들이 Visual Studio 2010 에서는 이루어 졌으면 하는 작은 소망이 있습니다. 허나 앞에서도 언급하였지만 현재 WSS Vista 에서 설치가 가능하며 이를 설치하면 로컬 PC 환경에서도 SharePoint 모듈을 개발 할 수 있습니다. 사실 이것만 해결되어도 안그래도 어려운 SharePoint 개발 진입이 조금은 쉬워지지 않을까 하는 생각입니다. ! 그리고 리스트 정의나 사이트 정의같이 CAML 을 직접 생성하려고 할 때 Code Intelligence 등을 지원하면 리스트나 사이트 정의를 생성하는 것이 한결 수월할 것 같군요.

여튼 SharePoint 툴이 VS 2010 에서 통합된다는 얘기가 여기저기서 들려오는 현재 입장에서는 일단 희망을 걸어봅니다.

Written by 송재두(짜두)

최근 대부분의 사용자들의 컴퓨터의 사양이 코어2 로 업그레이드 되고 있습니다. CPU 제품에 따라 코어에 대한 아키텍처가 다르지만, 기본적으로 이들 제품은 하나의 컴퓨터에 CPU 가 두 개인 제품들입니다. 인간과 비교하자면 뇌가 두 개인 사람인데 그다지 상상해서 떠올리고 싶지 않네요^^.
 
컴퓨터는 CPU 두 개를 보다 효율적으로 이용하기 위해 바로 Parallelism Processing(병렬 처리)를 하게 됩니다. 하나의 CPU 의 성능을 향상시키는 방법이 아닌, 두 개의 CPU 에게 작업을 할당함으로써 데이터의 처리 성능을 극대화 시키게 됩니다. 우리에게 익숙한 운영체제인 윈도우(Windows) 의 멀티 쓰레딩(Multi Threading) 을 생각하면 병렬 처리(Parallelism Processing) 는 그렇게 어려운 개념은 아닙니다.
 
[그림1] 어쨌든 뇌가 두 개 (여기에서 참조)
 
원래 오픈 소스 프로젝트로 Parallel Extension 프로젝트를 CodePlex 에서 본 기억이 있는데, 지금은 링크의 주소를 찾을 수 가 없네요. 구글을 통해 “Parallel Extension” 을 검색하시면, .NET 에서의 Parallel Programming 의 흔적을 찾아볼 수 있습니다.
 
우선 아래의 Person 클래스를 작성하여 테스트에 사용할 것입니다.
 
class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
 
 
General~
 
코어(Core) 하나로 작업할 경우, 개발자는 아무것도 염려 하지 않아도 됩니다. 그 동안 우리가 배웠던 대로 코드를 작성하기만 하면 됩니다. 병렬 처리에 대한 고민을 하지 않고 개발한 코드라면 모두 이 범주에 속하겠네요. 이러한 방법은 가장 보편적으로 작성할 수 있습니다.
 
private static void GeneralSort(List<Person> people)
{
       List<Person> resultPeople = new List<Person>();
       foreach (Person person in people)
       {
             if (person.Age >= 50)
                    resultPeople.Add(person);
       }
 
       resultPeople.Sort((p1, p2) => p1.Age.CompareTo(p2.Age));
 
       foreach (var item in resultPeople) { }
}
 
List<Person> 개체를 파라메터로 넘겨주고, Person 중에 Age 가 50이 넘는 개체를 정렬하는 코드입니다.
바로 이 코드를 병렬 처리를 하고자 합니다. 이 코드를 병렬 처리를 하고자 한다면 코드의 양은 훨씬 늘어나고, 복잡한 처리를 해야 합니다.
 
 
Manual Parallelism
 
일반적으로 데이터의 처리를 병렬 처리로 전환하기 위해서는 쓰레드(Thread) 를 사용합니다. 쓰레드(Thread) 가 생성이 되면 커널 또는 물리적인 프로세서에 의해 의해 유휴 상태 또는 처리가 가능한 코어(Core) 로 작업이 할당되어 다중 작업(Multi Process) 을 가능하게 됩니다.
 
이러한 방법의 병렬 처리는 프로세서(Processor) 개수만큼 쓰레드(Thread) 를 생성하여 비동기 작업을 합니다.
 
private static void ThreadSort(List<Person> people)
{
       var resultPeople = new List<Person>();
       int partitionsCount = Environment.ProcessorCount;
       int remainingCount = partitionsCount;
       var enumerator = (IEnumerator<Person>)people.GetEnumerator();
       try
       {
             using (var done = new ManualResetEvent(false))
             {
                    for (int i = 0; i < partitionsCount; i++)
                    {
                           ThreadPool.QueueUserWorkItem(delegate
                           {
                                 var partialResults = new List<Person>();
                                 while (true)
                                 {
                                        Person baby;
                                        lock (enumerator)
                                        {
                                              if (!enumerator.MoveNext()) break;
                                              baby = enumerator.Current;
                                        }
                                        if (baby.Age >= 50)
                                        {
                                              partialResults.Add(baby);
                                        }
                                 }
                                 lock (resultPeople) resultPeople.AddRange(partialResults);
                                 if (Interlocked.Decrement(ref remainingCount) == 0) done.Set();
                           });
                    }
                    done.WaitOne();
                    resultPeople.Sort((p1, p2) => p1.Age.CompareTo(p2.Age));
             }
       }
       finally
       {
             if (enumerator is IDisposable) ((IDisposable)enumerator).Dispose();
       }
 
       foreach (var item in resultPeople) { }
}
 
중요한 부분은 추출된 데이터의 정렬(Sort) 작업입니다. 이 작업을 하기 위해서는 모든 쓰레드(Thread) 의 작업이 끝나야 합니다. 만약 모든 쓰레드(Thread) 가 종료되지 않은 시점에서 정렬 작업을 하게 되면, 과연 정렬된 데이터를 신뢰할 수 있을까요?? ( 왜 그런지는 여러분의 상상에 맡기도록 합니다. )
 
정렬 작업을 하기 전 ManualResetEvent 의 WaitOne() 메서드를 호출하여 모든 쓰레드(Thread) 의 WaitHandle 이 작업이 신호를 받을 때까지(동기화 작업) 기다려야 합니다. 예를 들어, 두 개의 쓰레드(Thread) 가 생성 되고 첫 번째 쓰레드는 이미 작업을 종료하였지만, 두 번째 쓰레드는 아직 작업이 완료되지 않았다면, 작업을 마친 모든 쓰레드(Thread) 는 가장 늦게 처리가 완료되는 쓰레드를 기다려야 정렬 작업을 진행할 수 있습니다.
 
마지막으로, 위의 코드의 병렬 처리 작업은 성능에 한계가 있습니다. 프로세서(Processor) 개수만큼 쓰레드(Thread) 를 생성하여 작업을 분배하는 방식이기 때문에, 병렬 처리 작업의 성능은 곧 프로세서(Processor) 개수가 될테니까요!
 
 
Parallel Extension
 
C# 4.0 은 병렬 처리를 하기 위해 코드의 양을 획기적으로 줄일 수 있습니다.
 
private static void ParallelSort(List<Person> people)
{
       var resultPerson = from person in people.AsParallel()
                                    where person.Age >= 50
                                    orderby person.Age ascending
                                    select person;
 
       foreach (var item in resultPeople) { }
}
 
LINQ 식을 사용하여 데이터 처리와 정렬 작업을 간단하게 할 수 있습니다. 감격이네요^^ 바로, .NET Framework 4.0 의 Parallel Extension 을 사용하여 LINQ 처럼 사용하는 것을 PLINQ 라고 합니다.
 
Q : foreach (var item in resultPeople) { } 코드를넣었나요?
 
A: 동일한 테스트를 하기 위함입니다. LINQ 식은 내부 구조의 특성상 “쿼리식”에 불과합니다.
보다 자세한 내용은 필자의 블로그를 참고하세요.
 
Parallel Extension 은 Manual Parallelism 보다 더 복잡하고 좋은 성능을 낼 수 있는 알고리즘으로 구현이 되어 있습니다. 그렇기 때문에 아무리 많은 코어를 가진 컴퓨터에서 동일한 테스트를 한다고 하여도 결코 Manual Parallelism 은 Parallel Extension 의 병렬 처리 성능을 기대할 수 없습니다.
 
이제 살며시 그 내부 구조도 궁금해 집니다. (다음에 계속…)

Visual Studio 2010 의 특징

Visual Studio 2010 2009. 2. 8. 23:55 Posted by POWERUMC

 

통합 개발 도구인 Visual Studio IDE 는 보다 사용하기 쉽고, 다양한 플랫폼을 쉽게 개발할 수 있으며, 더 많은 고급 기능이 포함되어 있습니다. 처음 Visual Studio IDE 를 접하는 개발자에게도 쉽게 사용할 수 있는 접근성과 비주얼이 보다 강화되었고, 이제는 IT 조직에서 개발자 뿐만이 아닌, 관리자, 아키텍쳐, 데이터베이스 개발자 들이 모두 사용할 수 있는 편한 툴이 되었습니다.

 

New IDE Improvements

  • Visual Studio 환경
    • WPF 로 개발된 에디터
    • 멀티 모니터 지원
  • 네비게이터
    • 빠른 검색
    • 하이라이트 레퍼런스(Highlight Reference) 기능
  • 프로젝트 시스템
    • 다양한 버전의 소스 코드 사용성
    • 멀티 타게팅(Multi Targeting)

새로운 Visual Studio IDE 와 다수의 패키지(Package) 가 WPF 로 개발이 되었습니다. 현재 CTP 버전에서도 레지스트리를 설정하여 WPF Based Shell 로 동작시킬 수 있습니다. HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\General\EnableWPFShell 의 DWord 값을 1로 설정하면 Visual Studio 를 WPF Based Shell 로 시작하도록 설정할 수 있습니다. 하지만, 그 동작이 아직은 불안정하며 WPF Based Shell 의 사용을 권장하지 않습니다.

코드를 개발하기 위해 자주 사용하는 에디터도 WPF 로 개발이 되었고, 코드에 하이라이트 레퍼런스(Hightlight Reference) 와 같은 비주얼 요소를 다수 적용하였습니다. 단순히 코드의 컬러로 코드의 시각적인 효과를 주는 이상의 다이나믹한 시각 효과가 다수 추가가 되었습니다. 그리고, Visual Studio 의 시작 페이지도 WPF 기반으로 변경이 되었으며, 아래의 필자의 Umc Blog 에서 참고하세요.

참고
VSTS 2010 – 새로워진 UI

VSTS 2010 – Visualize Code RelationShip ( 코드 관계 시각화 )

또한 멀티 모니터를 지원하여 더 넓고 크게 IDE 를 활용할 수 있습니다. Visual Studio 2010 CTP 버전에서는 Virtual PC 이미지로 제공되기 때문에 멀티 모니터 지원을 확인할 수 없었지만, CTP 이후 버전에서는 멀티 모니터 기능을 확인할 수 있을 것 같습니다.

 

 

Code Focused Development

  • 먼저 사용하고, 나중에 선언 (Consume First, Declare Later)
  • 코드 통찰력(Code insight)
    • Call Hierarchy 기능
    • Inline call tree 기능
  • 레이어
    • 코드 서식
    • 문맥의 정보 제공
  • Document Map Margin 기능

개발자가 코드를 개발하기 위해 좀 더 높은 레벨의 작업이 가능하고, 코드를 이해하기 쉽도록 다양한 기능을 제공합니다. 그 중, 먼저 사용하고, 나중에 선언 (Consume First, Declare Later) 기능은 특정 기능을 구현하기 위해 흐름을 깨지 않고, 지속적으로 기능을 구현할 수 있도록 도와줍니다. 아직까지는 작성중인 프로젝트 외부에 코드의 선언을 추가할 수 없기 때문에 TDD(Test-Driven-Development) 로 사용하기에 부족함이 있지만, 앞으로 더욱 개선되어질 것으로 보입니다.

참고
VSTS 2010 – 똑똑해진 에디터

그리고 메서드 및 클래스의 호출을 관계를 쉽게 이해할 수 있도록 Call Hierarchy 를 제공하여, 이러한 관계를 트리 형태로 보여줍니다. 복잡한 구조의 스텍 정보를 순차적으로 접근할 수 있고, 복잡한 인터페이스 프로그래밍 시에 호출 연관 관계를 구조적으로 표현해 주어 선언과 구현부를 쉽게 검색할 수 있습니다. 또한, 코드 구조 전체를 비주얼하게 파악할 수 있는 Document Map Margin 기능도 유용합니다.

 

Web Development

  • Javascript tooling 강화
  • HTML 스니펫
  • 새로운 MVC 와 Dynamic Data Tooling
  • 웹 개발의 통합

이제 더 이상 Visual Studio 에서의 웹 개발 플랫폼은 ASP.NET 이 아닙니다. ASP.NET 뿐만 아니라 다양한 웹 개발 플랫폼을 통합하게 되었습니다. PHP/RoR 그리고 웹 환경에서의 엔터프라이즈 RIA 를 개발하기 표준적인 개발 환경을 제공해 줍니다.

그리고 ASP.NET MVC 를 개발하기 위해 많은 자동화 기능을 제공합니다. MVC 의 어플케이션 초기 구조를 만들기 위한 마법사가 제공되며, Controller, Action, View 등을 코드 에디터에서 쉽게 추가 하고, MVC 프로젝트의 테스트 프로젝트도 자동으로 생성해 줍니다.

이제는 HTML 도 코드 스니펫(Code Snippet)을 제공합니다. CSS 리팩토링을 지원하게 되며, 외부 스타일시트(CSS) 를 내 프로젝트에 쉽게 추가할 수 있습니다.

 

Office Development

  • 차기 오피스 버전을 위한 Tooling
  • 오피스 배포의 ClickOnce

차기 오피스 버전을 개발하기 위해 Tooling 을 제공합니다. 그리고 이러한 추가 기능을 배포하기 위해 ClickOnce 의 기능도 개선이 됩니다. 다양한 추가 기능(Addin) 솔루션을 생성하고, 유지, 배포하기 쉬워집니다.

 

Sharepoint Development

  • Sharepoint Tooling 과 공통 사용자 정의
    • 개발 –> 디버그 –> 배포 지원

앞으로 Sharepoint 의 개발이 용이하도록 Tooling 을 제공합니다. Sharepoint 기능을 개발하기 하고 배포하기 위해 복잡한 과정을 거쳐야 했습니다. Visual Studio 는 이러한 기능을 개발하기 용이하고 쉽게 디버깅하고 배포할 수 있도록 지원합니다.

 

Debugger

  • 다양한 플랫폼 지원
    • 64 Bit Mixed-Mode 디버깅
    • Managed 와 Mixed-Mode 의 Minidump 디버깅
  • 브레이크 포인트 개선
    • 그룹핑(Grouping)과 레이블(Labeling) 지원
    • 내보내기/가져오기 지원
  • Historical Debugger
    • 디버그 내용을 기록, 재생

Visual Studio 2010 에서 64 비트 플랫폼을 개발할 수 있게 됨으로써, 64 Bit 어플케이션의 디버깅을 지원합니다. 디버깅을 위해 브레이크 포인터를 관리할 수 있는 기능이 강화됩니다. 브레이크 포인트에 레이블을 표시할 수 있으며, 그룹핑을 통해 관련 있는 브레이크 포인트를 쉽게 관리할 수 있고, 관리되는 브레이크 포인트를 내보내고 가져올 수 있습니다.

그리고, 막강한 Historical Debugger 기능이 추가되어, 디버깅 이력을 쉽게 조사할 수 있습니다. 이러한 디버깅 이력을 기록하고 재생하여 반복적인 작업을 최소화 할 수 있고, 시나리오 별로 브레이크 포인트를 관리하는 등 다양한 용도로 이용할 수 있습니다.

 

Team System: Business Alignment

  • 프로젝트 관리
    • 프로젝트 서버
    • 클라이언트 통합
    • 경량의 프로젝트 계획 도구
  • 요구 사항 추적
  • 레포트
  • 개발 대시보드
  • 프로세스 사용자 지정
    • 다양한 예제 제공

프로젝트를 관리하기 위해 프로젝트 서버(Project Server) + 클라이언트 통합 + 경량의 프로젝트 계획 도구를 통해 다양한 팀 프로젝트를 관리할 수 있습니다. 그리고 다른 사람들의 중요한 정보를 검색하기 위해 대시보드도 추가됩니다.

더불어 마이크로소프트와 커뮤니티를 통해 다양한 예제가 포함됩니다. 자신의 팀 조직에 맞는 커스텀 프로세스를 적용하기만 하면 됩니다.

.NET Framework 4.0 의 특징

.NET Framework 2009. 2. 8. 15:54 Posted by POWERUMC

.NET Framework 4.0 은 Visual Studio 2010 에 포함되는 최신 프레임워크입니다. 이전에는 .NET Framework 의 새로운 특징이라면 .NET Framework 의 기능 향상과 안정성, 그리고 기능 개선이었습니다. 하지만 .NET Framework 4.0 은 탄탄한 Based .NET Framework 를 통해 여러 가지 새로운 변화를 가져옵니다.

이제는 .NET Framework 가 Win32 API 와 같이(Win32 API 와 비교하기 적절하지는 않지만…) 라이브러리의 집합이 아닌, 어플케이션의 차원에서 보다 견고하고 세련된 빌딩(Building) 을 할 수 있는 진정한 프레임워크로 거듭납니다. .NET Framework 4.0 의 특징을 살펴 봅니다.

Base Class Library 개선

  • MEF(Managed Extensibility Framework)
    • 확장성이 쉬운 선언과 사용
    • 런타임 확장 모니터링
  • 데이터 구조 추가
    • BigInteger & CodeplexNumber
    • Tuple, SortedSet
  • IO 개선
    • 메모리 매핑 파일
    • 모델 해제 통일

MEF 는 어플케이션과 컴포넌트의 재사용성을 높이기 위한 새로운 라이브러리입니다. 확장성 있는 어플케이션과 프레임워크를 만들기 위해 MEF 가 그 대안이라고 제시하고 있습니다. 이 프로젝트는 현재 CodePlex 를 통해 Preview 4 가 릴리즈되었고, 여기에서 다운로드 받을 수 있습니다.

또한 64 비트 프로그래밍을 위한 새로운 데이터 구조가 추가 되었습니다. 64비트 컴퓨팅 시대에 맞춰 .NET Framework 의 Int32 가 한계였다면, 이제는 그보다 더 큰 비트 연산을 할 수 있는 데이터 구조와 새로운 데이터 구조가 추가 되었습니다.

Parallel Computing

  • Task Parallel Library (TPL)
    • 수평적인 병렬 작업의 실행
    • 최대 효율을 위한 Stealing 알고리즘 작업
    • 상위 레벨을 추상화 ( 더 이상 스레드의 지식이 필요 없다 )
  • Parallel Linq (PLINQ)
    • 선언적인 데이터 병렬처리(초점은 ‘무엇’, ‘어떻게’가 아니다)
    • LINQ to Object 를 사용하여 단순한 병렬 처리
  • Coordination Data Structures (CDS)
    • 병렬 처리를 쉽게 하기 위한 공통 구조

다중 코어 프로세서의 사용을 극대화 하기 위해 이제는 병렬 처리를 위해 스레드를 생성하여 동기화 하는 과정을 더 이상 고민하지 않아도 됩니다. 병렬 처리를 하기 위한 확장 메서드를 제공하며, LINQ 식을 통해 데이터의 병렬 처리가 무척이나 쉬워졌습니다. 이제는 ‘어떻게’가 아닌, '무엇을’ 병렬 처리 할 것인지만 생각하면 됩니다.

.NET Framework Client

  • Windows Presentation Foundation
    • 클라이언트 프로파일(Client Profile)
    • 비지니스 컨트롤에 초점
    • 실버라이트 시너지 효과
    • Windows 7 지원 (멀티터치 등)

ADO.NET 4.0

  • Entity Framework v2
    • Code-Fiirst 개발 지원
    • TDD 지원
    • 외래키(Foreign Key) 지원
    • Lazy 로딩

.NET Framework 3.5 SP1 에 등장한 Entity Framework 의 차기 버전입니다. 이전 버전은 기본 키를 중심으로 한 Entity Data Model 이였다면 새로운 버전에서는 외래 키도 지원하게 되었습니다. 또한, TDD(Test-Driven-Development) 을 지원하며, Code-First 방식의 개발도 지원하게 되었습니다.

ASP.NET 4.0

  • ASP.NET Dynamic Data 개선
  • ASP.NET MVC
  • MVC 에 ASP.NET Dynamic Data 지원
    • 데이터 중심으로 뷰와 커스텀 컨트롤 만들기 쉽게
  • CSS, ID, ViewState 컨트롤이 더 좋아진 ASP.NET
  • 확장할 수 있는 캐싱 프레임워크(Caching Framework)

ASP.NET 4.0 의 가장 큰 매력은 바로 ASP.NET MVC 의 통합입니다. 그 동안 Postback, ViewState 기반의 빠른 생산성이 ASP.NET 의 핵심이었습니다. 하지만, ASP.NET MVC 를 통해 Form 기반에서도 빠른 생산성을 향상시켰습니다. 또한, MVC 를 구현하기 위해 많은 코드와 분리 작업을 자동화 할 수 있는 템플릿을 지원합니다.

Velocity

  • .NET 을 위한 분산 캐싱
  • ASP.NET 의 Session State Provider
  • 유연하고, 서로 다른 캐싱 모델
    • Partitioned
    • Replicated
    • Local

.NET 이 지원하는 가장 대표적인 분산 캐싱이 ASP.NET 의 Session State Provider 입니다. 그렇지만 Session State Provider 의 분산 캐싱 능력에는 한계가 있으며, 이러한 한계를 극복할 수 있는 프레임워크가 바로 Velocity 입니다. 캐싱을 분산 처리 하기 위해 많은 고민을 해야 하며, 이러한 분산 캐싱 환경에서 빠른 응답성, 확장성, 고사용성을 높였습니다.

엔터프라이즈 어플케이션 환경에서 많은 관심을 보일 것이며, 특히 요즘 새롭게 대두 되고 있는 SaaS 나 Cloud Computing 을 위해 빠져서는 안될 핵심 기술이 될 것입니다.

Windows Workflow & Communication Foundation

  • 완전 선언적인 서비스
  • 워크플로우 개선
    • 프로그래밍 모델 개선
    • 새로운 플로우차트 모델 스타일 & 확장 활동 팔레트
    • 워크플로우 규칙 통합
    • 디자이너 경험 향상
    • 상당한 성능 향상
    • 상호 메시지
  • WCF 개선
    • Duplex 내구성
    • In-process Channel
    • WS-Discovery & UDP Channel

ADO.NET Data Services

  • 관계형 데이터 지원
  • ‘오프라인’ 상태 지원

ADO.NET Data Services 도 .NET Framework 3.5 SP1 에서 사용하기 위해 몇 가지 추가 작업이 필요하였으며, 보다 자세한 내용은 여기를 참고 하십시오.

특히, 이 버전에서는 Data Services 의 오프라인을 지원합니다. 오프라인에서도 ADO.NET Services 의 사용은 수 많은 외부 시스템과 연동 시에 서비스의 일관성을 유지해 줄 것입니다.

ASP.NET AJAX

  • 자바스크립트 UI 템플릿과 데이터 바인딩
  • AJAX 컨트롤 툴킷 개선
  • DOM Selection, 애니메이션 등

ASP.NET AJAX 는 요즘 가장 인기 있는 AJAX 프레임워크인 JQuery 와 통합하게 됩니다. JQuery 를 사용하고 인텔리센스를 지원하기 위해 몇 가지 수작업이 있었다면, 이제는 그러한 작업 없이도 JQuery 의 고급 기능을 ASP.NET AJAX 에서 사용할 수 있습니다.

 

.NET 의 과거와 현재, 그리고 미래

.NET Framework 2009. 2. 1. 21:00 Posted by POWERUMC

학창 시절 사회/역사 시간을 통해 우리나라의 역사에 대해서 공부를 하였고, 많은 한 시대를 통치하던 왕 이름과, ~시대와 수많은 ~전쟁 이름 까지 외운 적이 있을 것입니다. 그때는 시험 때문이라도 목숨(?) 걸고 외웠던 적이 있지만, 그 때 배웠던 것을 통해 우리 사회와 문화를 이해하고, 계승할 수 있던 계기가 아니었나 생각합니다. 아마 지금의 .NET 세계도 마찬가지 일 것입니다. .NET 의 과거를 모르면 현재의 .NET 도 이해할 수 없는 것들이 많을 것입니다. 그래서 오늘날 .NET 4.0 의 출연에 앞서 .NET 의 역사를 한번 짚어 보고자 합니다.

오늘날 우리 .NET 개발자들은 수많은 개발 툴(Visual Studio IDE) 버전과 .NET Framework 버전의 홍수 속에서 처음부터 .NET 1.0 을 다루어본 독자는 그리 많지는 않을 거라고 생각합니다. 아마도 .NET 3.0, 3.5 시대에 뛰어든 독자라면 이전 .NET 버전의 특징을 잘 알 수 없기 때문에, 쓰고 있는 신 버전의 특징도 체감하기가 쉽지 않을 것입니다.

자! 그럼 .NET 의 세계를 한번 뒤돌아 보도록 합시다.

Visual Studio .NET 2002 / .NET Framework 1.0

  제품의 버전 / 특징
2002년
  • Visual Studio .NET 2002 / .NET Framework 1.0
    첫 통합 개발 환경
    발매 당초의 제품명은 ‘ Visual Studio .NET
  • C# 1.0 / Visual Basic .NET (7.0)
    C# 은 마이크로소프트의 새로운 객체 지향 언어
    Visual Basic 도 객체지향 언어


Visual Studio 와 .NET Framework 의 최초 버전이다. PDC 2000 을 통해 처음으로 Beta 버전이 세상에 공개가 되었습니다. 이 버전을 통해 Managed Code(관리 코드)가 등장 하였고, C# 이라는 객체지향 언어가 출연하였습니다. 그리고 Visual Basic 7.0 이라는 이름으로 Visual Basic 도 객체지향 언어로 탈바꿈 하였습니다. 그리고 현재까지도 특정 버전이 명시되지 않은 Visual Studio.NET 이라는 IDE(통합 개발 도구)도 공개가 되었습니다.

Visual Studio IDE 를 통해 하나의 개발 툴에서 Web Application, Windows Application, Mobile, XML, XML Web Services 를 쉽게 개발할 수 있게 되었습니다. 그리고 Java 진영의 개발자들을 위한 J# 이라는 Java 와 쉽게 호환이 되는 언어도 제공하였습니다. Visual Studio 를 통해 개발을 단순화하는 핵심 기술에 대한 엑세스를 제공하는 .NET Framework 의 기능을 활용할 수 있습니다.

.NET Framework 는 응용 프로그램을 빌드하고  실행하는 Windows 의 구성요소로서, ADO.NET, ASP.NET, Windows Forms 등을 포함하는 .NET Framework 클래스 라이브러리와 CLR(Common Language Runtime-공용 언어 런타임) 을 일컫습니다. 이 CLR 을 통해 공통된 API 집합을 만들어 다양한 언어간의 상속, 오류 처리, 디버깅이 가능하며 개발자들은 사용하려는 언어를 자유롭게 선택할 수 있게 되었습니다.


Visual Studio .NET 2003 / .NET Framework 1.1

  제품의 버전 / 특징
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 표준 탑재


하지만, 첫 출발은 대중들에게 큰 이목을 집중하기에 충분하였지만, 그 행보는 순탄치만은 않았습니다. 왜냐하면, C# 이라는 언어가 Java 의 아류작에 불과하다는 편견과 수많은 버그로 인해 사용자들에게 원성을 사야 했습니다. 그리고 얼마 지나지 않아 새로운 버그 픽스 버전인 Visual Studio.NET 2003 과 .NET Framework 1.1 을 발표하였습니다.

C# 과 Visual Basic 의 버전을 각각 C# 1.1, Visual Basic 7.1, .NET Framework 1.1 로 버전업 하였습니다. 그리고, Windows Server 2003 제품에 표준으로 탑재하여 .NET Framework 의 확산에 큰 공을 이루게 되었습니다.

실제로 엔터프라이즈 시장에서 이 버전을 기준으로 많은 기업용 시스템에 도입이 되었습니다. 현재까지도 이 버전을 기준으로 운영이 되는 기업용 시스템이 상당수 존재하고 있으며, 아직까지도 많은 사랑(?)을 받고 있는 버전입니다.

Visual Studio .NET 2005 / .NET Framework 2.0

제품의 버전 / 특징
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

 .NET Framework 2.0 과 Visual Studio 2005 와 함께 .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 의 모태가 되고 있습니다.

Visual Studio 2005 도 .NET Framework 2.0 의 새로운 기능을 제공하기 위해 외관과 내관이 보다 화려해졌습니다. ClickOnce 배포를 Visual Studio 2005 에서 쉽게 수행할 수 있게 되었으며, 리팩토링(Refectoring)과 코드 스니펫(Code Snippet) 등의 기능이 추가되었으며, 솔루션 파일을 구조적으로 분류하기 위한 솔루션 폴더 등 수많은 기능이 추가되고 개선이 되었습니다.

C# 2.0 은 기존 C# 1.0 의 Boxing(박싱), Unboxing(언박싱)의 반복적인 캐스팅(Casting) 의 비효율을 개선하고, 보다 객체지향적인 코드 품질을 생산할 수 있는 제네릭(Generic) 이 등장하였습니다.  이와 함께 .NET Framework 클래스 라이브러리에 다수의 제네릭(Generic) 클래스가 추가되었습니다.

그리고, 이 제품의 버전부터 Visual Studio Team Suite + Team Foundation Server 의 제품을 조합하여 Visual Studio Team System(VSTS) 라는 새로운 개발 패러다임을 .NET 에서도 지원하게 되었습니다. VSTS 를 통해 ALM(Application Lifecycle Management-애플케이션 수명 주기 관리) 을 수행할 수 있게 되었으며, IT 조직의 비지니스 전반의 생산성을 향상 시키고, 사람과 개발 조직의 변화를 가져다 주는 시초가 되었습니다.

.NET Framework 3.0

제품의 버전 / 특징
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 기본 탑재

.NET Framework 3.0 은 기존 2.0 보다 한층 버전업 되었지만, 그 내용은  .NET Framework 2.0 에 비해 한층 새로워졌습니다. .NET Framework 의 버전업 보다는 전혀 새로운 기술이 대거 등장하게 되었습니다.

단연, .NET Framework 3.0 의 가장 큰 특징이라면 WPF 를 꼽을 수 있을 것입니다. XAML(Extensible Application Markup Language) 과 함께 WPF 의 출연으로 UX(User Experience) 의 시대 흐름에 진입하게 되었습니다.

또한, WCF 의 출연으로 여러 가지의 분산 통신 기술이 통합되었습니다. 이전의 Remoting, XML Web Services, MSMQ 등이 하나의 WCF 컴포넌트에서 제공하게 됨으로써 Messaging Model 기반으로 통합할 수 있게 되었습니다.

Visual Studio 2005 Service Pack 1 / Expression Studio / AJAX.NET

제품의 버전 / 특징
2007년
  • Visual Studio 2005 Service Pack 1 (6월)
  • ASP.NET AJAX 1.0 (추가 모듈)
    AJAX Web Application 개발이 용이
  • Expression Blend
    Expression Studio 첫 제품
    WPF 어플케이션의 GUI 구축

ASP.NET 에서 AJAX 를 지원하기 위한 코드명 “Atlas” 의 정식 이름인 ASP.NET AJAX 1.0 이 릴리즈가 되었습니다. 클라이언트 사이드의 Sys 네임스페이스의 스크립트를 제공하고, 다양한 서버 사이드 모듈과 AJAX Control Toolkit 의 오픈 컨트롤 제공으로 이벤트 기반의 프로그래밍이 가능합니다.

WPF 도 Expression Blend 의 출시로 UI 작업을 위한 공개 도구인 XamlPad 보다 강력한 기능을 제공하게 되었습니다.

Visual Studio 2008 / .NET Framework 3.5

제품의 버전 / 특징
2007년
  • 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


이 제품의 가장 큰 특징이라면, C# 3.0 일 것이다. C# 2.0 의 제네릭(Generic) 과 C# 3.0 의 람다식(Labmda Expression), 확장 메서드(Extension Methods) 등의 결정체로 LINQ 가 탄생하였습니다. LINQ 를 통해 강력한 프로그래밍적 쿼리가 가능해졌으며, XML, Database, Object 등의 다양한 데이터 소스(Data Source) 를 통해 동일한 코딩 패턴을 사용하여 질의가 가능해졌습니다.

WPF 도 Visual Studio 2008 에서 디자이너를 제공하게 되었습니다. 이전의 XamlPad 나 Expression Blend 와 같은 외부 도구의 도움이 없이도 WPF 의 UI 개발이 용이해졌습니다.

Visual Studio 2008 Service Pack 1 / .NET Framework 3.5 Service Pack 1

제품의 버전 / 특징
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 컨트롤 등…


이번 업데이트는 정말 손가락으로 헤아리기 힘들 정도로 많은 부분에서 기능 개선과 새로운 기능을 제공하고 있습니다. 그렇기 때문에 지면상 요약하기도 굉장히 벅차지 않을까 생각하며, 필자가 월간 마이크로소프트 10월호에 기고한 내용을 참고하기 바랍니다.

마소10월호 - Visual Studio 2008 서비스 팩 1 알아보기
http://blog.powerumc.kr/article/2008/10/30/Maso-October-Visual-Studio-SP1.aspx

 

이처럼 .NET 은 그리 긴 역사는 아니지만, 많은 변화를 거듭하여 발전해왔습니다. 우리가 바라는 이상적인 개발 환경에 아직은 부족한 점도 있습니다만, VSTS 2010 은 그러한 갈증을 해소시켜 줄 수 있는 단비와도 같을 거라고 생각합니다. VSTS 2010 의 출연으로 .NET 4.0 세대 또한 우리가 바라는 최종 결정판이 아니며, 현재 진행형 입니다. 지금과 비교하면 .NET 1.0 은 초라해 보이지만, 그러한 과거를 통해 현재가 존재하고 .NET 4.0 도 거부할 수 없는 현재라는 것입니다.

참고 문헌
http://blog.powerumc.kr/article/2007/09/10/DotNet-Framework-AND-Visual-Studio-History.aspx

Visual Studio Team System 2010 (CTP10) - 작업 항목 링크

Team Foundation Server 2009. 1. 23. 16:41 Posted by 알 수 없는 사용자

Visual Studio Team System 2010 (CTP10) - 작업 항목 링크

지난 3년여 동안 VSTS에 대한 많은 프리젠테이션과 세미나, 교육을 하면서 가장 많이 들었던 질문 중 하나가 "작업 항목들을 hierarchy 형태로 표현할 수 있나요?"였습니다.. 그러면, 저의 대답은 항상 같았습니다. "아니요. 하지만, Rosario (VSTS 2010 코드 명)에서는 된다고 합니다." 그러면, 질문한 사람의 얼굴에는 '그것도 안 돼?'하는 실망의 빛이 역력했습니다. 사실, 저도 왜 hierarchy 표현이 안되는지 궁금하긴 했습니다.
 그래서, Visual Studio Team System 2010의 CTP가 나왔을 때 가장 먼저 확인해 본 것이 작업 항목들을 hierarchy 구조로 표현해 보는 것이었습니다. 결론적으로 말하면, '된다'입니다.

그러면, 어떤 식으로 작업 항목의 hierarchy 구조를 표현하고, 또 어떤 식으로 조회하는지 살펴보겠습니다.

 (참고로 이 글은 Visual Studio Team System 2010 CTP10을 기준으로 작성되었습니다.)


[작업 항목 링크 추가]

Team Foundation Server 2010 CTP10 (이하 TFS CTP10)에는 작업 항목을 연결하는 링크 유형이 추가되었습니다. 기존의 TFS 2005/2008에는 링크 유형은 한 개 (Related - Related)였습니다.

  • 작업 항목 링크 유형
    • Parent - Child: 작업 항목을 트리 (tree) 형태로 구성할 때 사용. (MS Excel에서 표현 가능).
    • Predecessor - Successor: 작업 항목의 선행/후행 관계를 표현할 때 사용. (MS Excel, MS Project에서 표현 가능)
    • Related - Related: 위의 두 경우 아닌 단순한 relationship을 표현할 때 사용. 

작업 항목 링크은 TFS 2005/2008에서처럼 링크 탭에서 추가합니다. 그러나, 링크 유형 별로 컨트롤이 분리되어 있다면 추가할 링크 유형에 맞는 컨트롤에서 링크를 추가해야 합니다 (그림 1 참조).
 

[그림 1]

링크 탭에서 Add 버튼을 클릭하면 링크 추가 창이 나타납니다. TFS CTP10에 추가된 작업 항목 링크 유형은 [그림 2]에서 보는 바와 같이 Link Type 항목에 나타납니다. 링크 유형을 선택하면 그 유형의 이해를 돕기위한 그림이 아래쪽에 표현됩니다.

 


[그림 2]

 링크로 추가할 작업 항목을 선택하고 comment를 입력하는 방법은 TFS 2005/2008과  동일합니다.

 [그림 3]은 작업 항목에 Parent - Child 링크를 추가한 예입니다.


[그림 3]

작업 항목의 링크를 추가하는 방법은 링크 창을 사용하는 것 외에도 마이스로 drag&drop한다거나 Outdent, Indent 버튼을 클릭하는 것도 있습니다.

이 기능은 작업 항목 쿼리 유형 중 Tree of Work Items 만 가능합니다 (작업 항목 쿼리 유형은 아래에 설명되어 있습니다).

쿼리 결과에서 작업 항목 (A) 하나를 클릭한 후, 다른 작업 항목 (B) 쪽으로 drag&drop하면 A와 B 작업 항목 사이에 Parent - Child 링크가 추가됩니다 (그림 4 참조)

[그림 4]

또한, 쿼리 결과에서 작업 항목을 선택한 후, Outdent 버튼을 클릭하면 작업 항목의 레벨이 올라가고 아래에 있는 작업 항목들은 그 작업 항목의 Child로 추가됩니다. 만약, 그 작업 항목이 다른 작업 항목의 Child였다면 Parent였던 작업 항목과 동등한 레벨이 됩니다. Indent 버튼을 클릭하면 Outdent와 반대로 레벨이 내려갑니다.
Outdent, Indent는 MS Project의 Outdent, Indent와 유사합니다.

 
[그림 5]

[작업 항목 링크 컨트롤]

작업 항목 링크 유형이 추가되면서, 각 유형 별로 컨트롤을 분리할 수 있게 되었습니다. [그림 1]에서는 Parent - Child 링크 유형이 다른 링크 유형과 분리되어 별도의 컨트롤로 정의되었습다. 이처럼 Predecessor - Successor 링크 유형도 별도의 컨트롤로 분리될 수 있습니다.

아래 Task.xml의 Layout은 [그림 1]의 Implementation 탭을 정의한 것입니다. 

                     <Tab Label="Implementation">
                        <Control Type="LinksControl" Name="Hierarchy" Label="Parents and &amp;Child Tasks:" LabelPosition="Top">
                            <LinksControlOptions>
                                <WorkItemLinkFilters FilterType="include">
                                    <Filter LinkType="System.LinkTypes.Hierarchy" />
                                </WorkItemLinkFilters>
                                <ExternalLinkFilters FilterType="excludeAll"/>
                                <LinkColumns>
                                    <LinkColumn RefName="System.ID" />
                                    <LinkColumn RefName="System.WorkItemType" />
                                    <LinkColumn RefName="System.Title" />
                                    <LinkColumn RefName="System.AssignedTo" />
                                    <LinkColumn RefName="System.State" />
                                    <LinkColumn LinkAttribute="System.Links.Comment" />
                                </LinkColumns>
                            </LinksControlOptions>
                        </Control>
                    </Tab>
[Task.xml]

작업 항목 링크 유형 별 Reference Name은 다음과 같습니다.

  • Parent - Child: System.LinkTypes.Hierarchy
  • Predecessor - Successor: System.LinkTypes.Dependency
  • Related - Related: System.LinkTypes.Related

작업 항목 링크 컨트롤을 분리하지 않고 TFS 2005/2008처럼 하나의 컨트롤로 정의를 하려면 예전처럼 정의하면 됩니다.

           <Tab Label="Links">
            <Control Type="LinksControl" LabelPosition="Top" />
          </Tab>

 [그림 6]은 Parent -Child 유형의 링크 컨트롤의 예입니다.


[그림 6]

[작업 항목 쿼리]

작업 항목의 Parent - Child 또는 Predecessor - Successor 관계는 작업 항목 쿼리를 통해 아래와 같이 조회할 수 있습니다 (그림 7, 그림 8 참조). 작업 항목이 hierarchy 구조로 조회되는 것을 확인할 수 있습니다.

[그림 7]

 

[그림 8] 

작업 항목을 hierarchy 구조로 조회할 수 있도록 작업 항목 쿼리 유형이 두 개 추가되었습니다.

  • Flat List of Work Items: 기존의 쿼리 유형
  • Work Items and Direct Links: 작업 항목과 연결된 작업 항목도 같이 조회. 단, 직접 연결된 작업 항목만 조회 (그림 8 참조)
  • Tree of Work Items: 작업 항목과 연결된 작업 항목도 같이 조회. 작업 항목의 hierarchy 구조를 tree 구조로 표현한다 (그림 7 참조)

작업 항목 쿼리 유형은 쿼리를 작성할 때 선택합니다. 선택한 작업 항목 쿼리 유형에 따라 쿼리를 작성하는 UI가 달라집니다.

  • Flat List of Work Items

이 유형은 기존의 TFS 2005/2008에서 쿼리를 작성하는 것과 동일합니다.

[그림 9]

  • Work Items and Direct Links

이 유형은 작업 항목과 연결된 작업 항목을 조회할 수 있는 서브 쿼리를 작성할 수 있습니다. 서브 쿼리에서는 링크 유형을 선택하여 해당 링크 유형만 조회가 가능합니다.

[그림 10]

  • Tree of Work Items

이 유형은 쿼리를 작성하는 것은 TFS 2005/2008과 같지만 쿼리를 실행했을 때 결과는 Tree 구조로 표현되는 것이 다릅니다(쿼리 결과는 그림 7 참조).

[그림 11]

 
이상으로 TFS CTP10의 작업 항목 링크 유형과 작업 항목 쿼리 유형에 대해 살펴 보았습니다.

작업 항목을 hierarchy 구조로 표현할 수 있게 되므로써 얻을 수 있는 장점은 여러가지가 있습니다.

일단, 작업 항목의 선후 관계나 상하 관계를 직관적으로 알 수 있는 장점이 있습니다. TFS 2005/2008에서는 이런 관계를 명시하기 위해서는 단지 comment에 두 작업 항목의 관계를 입력하는 정도였습니다. 하지만, 그 방법은 comment를 일일이 읽어야 한다는 불편함이 있습니다.

그리고, MS Project와 연계에 있어서 자연스러워졌다는 점입니다. MS Project에서 작업을 tree 구조로 표현한 것과 작업의 선후 관계를 표현한 것이 그대로 TFS에서도 표현이 가능해졌습니다. 따라서, 두 도구의 작업 sync.가 더욱 쉬워졌습니다.

예전에는 작업 항목을 hierarchy 형태로 보려면 보고서를 작성해야 했습니다. 이제 보고서를 작성해야 하는 번거로움이 줄어들었습니다.

앞으로도 블로그를 통해 TFS CTP10에서 새로워진 기능을 중심으로 어떻게 사용하는지, 그리고 그 기능을 통해 어떤 점이 좋아졌는지를 살펴 보겠습니다.

 webmars.

 http://cafe.naver.com/teamsystem


Visual Studio Team System(VSTS) 2010 은 현재 CTP 버전이며, 2008년 10월 31에 공개가 되었습니다. 아직 VSTS 2010 CTP 는 Install Version 이 아니며, Virtual PC 의 VHD Image 파일로 제공이 됩니다. 이 Image 는 Windows Server 2008 과 Visual Studio 2010 버전과 함께 Team Foundation Server 2010 버전도 제공이 되며, 모두 사용 가능하도록 설치되어 있습니다.

Visua Studio Team System 2010 CTP 버전은 아래의 주소에서 다운로드 받을 수 있습니다.
http://www.microsoft.com/downloads/details.aspx?FamilyID=922b4655-93d0-4476-bda4-94cf5f8d4814&DisplayLang=en

하지만, 이 VSTS 2010 CTP 버전을 다시 구동시켜 보기 위해 두 가지 문제가 있습니다. 하나는, Windows Server 2008 의 사용 만료와 VSTS 2010 CTP 가 사용 만료가 되었습니다.

  1. Windows Server 2008 사용 만료

     

    이 문제는 Windows Server 2008 Product key 를 입력하여 해결할 수 있습니다. 그리고, Virtual PC Setting 을 통해 Network 가 인터넷에 연결이 되어 있어야 합니다. Product key 를 입력하여 인터넷(또는 다른 방법)을 통해 Windows Activation 할 수 있습니다.

    하지만, 유감스럽게도 Windows Server 2008 Product key 를 가지고 있지 않다면, 달리 VSTS 2010 CTP 를 구동시켜 볼 수 없을 것 같습니다.

  2. Visual Studio Team System 2010 CTP 사용 만료

     

    첫 번째 Windows Server 2008 만료를 해결한 후에 VSTS 2010 CTP 를 실행하면 또 다시, VSTS 2010 CTP 의 사용 기간이 만료가 되었다는 메시지가 보입니다. 그리고 더 이상 VSTS 2010 CTP 를 동작시킬 수 없습니다.

    이 문제는 Virtual Server Settings File 의 설정을 조작하여 Windows 의 날짜를 되돌리는 방법으로 해결할 수 있습니다.

    우선 노트패드 등을 이용하여 VSTS 2010 CTP 의 Image 가 저장된 폴더에, VisualStudio2010CTP.vmc 파일을 열어 XML 의 <mouse> 노드 다음에 아래의 설정을 해줍니다.

    <integration>
        <microsoft>
            <mouse>
                <allow type="boolean">true</allow>
            </mouse>
            <components>
                <host_time_sync>
                    <enabled type="boolean">false</enabled>
                </host_time_sync>
            </components>

    그리고 한 가지 더, Windows 의 시간 동기화를 반드시 해제 하십시오. 그렇지 않으면 Windows 시간이 동기화 되어 반복적으로 VSTS 2010 CTP 사용이 만료되게 됩니다. 아니면, VPC 의 Network 를 해제하셔도 됩니다.


    참고 문헌
    http://blogs.msdn.com/jeffbe/archive/2008/12/09/dealing-with-the-team-system-2010-ctp-expiration.aspx 

Visual Studio Team System 2010 팀 블로그 소개

VSTS 2010 팀 블로그 2009. 1. 15. 15:23 Posted by 알 수 없는 사용자

안녕하세요.
한국마이크로소프트에서 개발자 전도사로 근무하고 있는 강성재 입니다.
.NET 개발과 관련된 커뮤니티와 블로그는 많이 있지만, 정작 개발자들와 가장 많은 시간을 보내는 Visual Studio와 관련된 정보는 부족한 것 같습니다. 이것은 제가 지난 6년간 많은 기업을 방문하면서 경험한 것으로 있는 기능을 거의 사용하지 않는 것을 보면서 이러한 내용을 제대로 소개하자고 몇분과 이야기를 나누던 중 앞으로 나오게 될 VSTS 2010부터 시작해 보자는 취지로 시작을 하게 되었습니다.

Visual Studio Team System 2010 팀 블로그의 목표는 개발자에게 유용한 정보와 유익한 내용의 전달에 있습니다.
현재는 정보가 많이 부족하지만, 팀 블로그 맴버들이 VSTS 2010 CTP 버전을 사용하면서 느끼고 있는 점과 이전 버전과의 차이 점 등을 다양한 분야에서 이야기 하도록 하겠습니다.

그리고, 팀 블로그에서 운영하는 VSTS 2010 스터디 그룹을 운영할 계획 입니다.
개발자에게 정말 유익하고 꼭 알아야 하는 정보를 제공하기 위해, 노력할 것이고, 많은 성원 부탁 드립니다.

감사합니다.

안녕하세요. Visual Studio Team System(VSTS) 2010 팀 블로그 시삽 엄준일 입니다.

이제 VSTS 2010 CTP 버전이 공개가 되고, 많은 사람들이 VSTS 2010 의 New Features 에 조금씩 이목을 집중하고 있습니다. Microsoft 는 다가올 VSTS 2010 에 개발자, 아키텍쳐, 데이터베이스, 그리고 팀 관리자 사이의 장벽을 낮추고 어플케이션 라이프 사이클 관리(Application Lifecycle Management) 의 민주화(democratize)를 선언하였습니다.

그에 발맞추어 Microsoft Korea 와 국내 최고의 Microsoft MVP 들이 함께 VSTS 2010 공식 팀 블로그를 오픈합니다. 자! 이제 우리의 IT 개발 세계가 어떻게 변화될지 기대가 되지 않습니까? 그런 기대와 궁금증을 이곳 팀 블로그의 최고의 맴버들이 여러분들에게 정확하고, 최신의 정보를 빠르게 제공하여 줄 것입니다.

그럼 VSTS 2010 의 따끈 따근한 피드를 제공해줄 팀 블로그 맴버를 소개합니다.

이름 : 강성재
회사 : 한국 마이크로소프트
하늘일 : 개발자 및 플랫폼 총괄 사업부에서 개발자 전도사로 활동
자신의 분야 : .NET, XNA, Cloud Computing Development
블로그 : 이전 개인 블로그에서 이사해서 현재 소프트웨어 팩토리 블로그 오픈 준비 중.

2000년 .NET과 C# 전문가로 활동을 시작해서 2000년 NET#과 ASP+ 커뮤니티 운영을 시작해서 2001년 데브피아 C# 시샵과 MSDN 세미나를 통해 외부 활동을 넓혀 가던 중 2002년 한국마이크로소프트 커뮤니티 스페셜리스트로 입사 이후 2003년 개발자 전도사로 현재 까지 활동. 한국 TechEd와 2003년 이후 모든 Visual Studio 제품 발표회 등 현재까지 500번이 넘는 세미나 진행.




 

이름 : 오일석
회사 :
디스트릭트
하는일 : UX 솔루션 개발
블로그 :
http://onestone.tistory.com

Microsoft Client App Dev MVP (Silverlight/WPF)

마이크로소프트 MVP 로 활동하고 있으며 마이크로소프트 UX플랫폼을 활용한 UX 솔루션 확보에 집중하고 있다. 현재 디스트릭트(
http://dstrict.com)에서 UX 솔루션 팀을 이끌며 다가올 UX 세대의 주인공을 꿈꾸고 있다.




 

이름 : 박대식
회사 : 드원테크놀러지
하는일 : ALM/방법론 컨설팅
블로그 :
http://cafe.naver.com/teamsystem , http://blog.naver.com/webmars

Microsoft Visual Studio Team System MVP

현재 ㈜드원테크놀러지에서 개발 방법론 및 ALM 관련 컨설턴트로 재직 중이다. 2001년부터 CBD 기반의 애플리케이션 개발 방법론 컨설팅을 수행했으며, 2007년부터 다수의 ALM 관련 프로젝트 수행과 세미나, 교육 등을 통한 풍부한 경험을 바탕으로 전산 조직의 성공적인 ALM 도입을 위한 컨설팅을 수행하고 있다. 또한, 마이크로소프트 Team System MVP로서 커뮤니티 운영(
http://cafe.naver.com/teamsystem )과 세미나를 통해 Team System을 활용한 ALM 구축과 관련된 기술 전파 활동을 하고 있다.




이름 : 송재두
회사 : 닷넷엑스퍼트
하는일 : 컨설팅 사업부
블로그 :
http://sharepoint.egloos.com

Microsoft SharePoint MVP, SharePoint MCTS

현 닷넷엑스퍼트에서 선임 컨설턴트로 재직 중 이다. Business Collaboration 및 Framework 컨설팅 프로젝트를 통한 수많은 실전 경험을 갖추고 있으며 MOSS 사용자 그룹 커뮤니티(http://cafe.naver.com/spsv3) 의 부시샵 및 My SharePoint 라는 블로그(http://sharepoint.egloos.com)을 운영하며 국내 SharePoint Technology 영역에서 개척자 역할을 하고 있다.




 

이름 : 엄준일
회사 : 닷넷엑스퍼트(
http://www.dotnetxpert.com)
하는일 : 닷넷 컨설팅 및 솔루션 개발
블로그 :
http://blog.powerumc.kr

Microsoft ASP/ASP.NET MVP

현재 닷넷엑스퍼트(
http://www.dotnetxpert.com)에서 컨설턴트로 재직 중이며, Microsoft ASP/ASP.NET MVP 로 활동하고 있다. 국내 유수의 대기업 프로젝트를 수행하며 많은 실전 경험을 가지고 있으며, 블로그를 통해 .NET 플랫폼의 다양한 기술을 전파하고 있다. 특히 VSX 분야에 국내 독보적인 기술력을 보유하고 있다.


이제 여러분들도 함께 다가올 VSTS 2010 에 참여해 보십시오!! 지금과 달라질 새로운 변화에 한발 먼저 참여 하시는 당신이 바로 이 시대의 승리자입니다.