몽당연필과 함께 하는 VSTS 2010 모델링 1/4

Architect Development 2009. 11. 17. 02:05 Posted by 알 수 없는 사용자

 

안녕하세요. ^^

 

그 동안 바쁘다는 핑계로.. 소원 했던 글쓰기를 다시 합니다. 제가 이 글을 쓰는 시점에서는 Visual Studio 2010 버전이 드디어 베타 2를 기준으로 합니다.

 

첫번째로 드디어 모델링에 대한 것을 이야기 하게 되었습니다.

모델링.. 기존에 사용하고 계시는 모델링 도구는?? 어떤것이였나요? 저는 대 부분 Visio로 UML을 하거나, XP화면을 직접 그리는 것을 했습니다. 여러분들은 그 외 다른 도구들을 사용하실거나, 저와 비슷할 거라 생각합니다. 또는 더 오래되신 분들은 별도의 프로그램등을 이용하여 S/W 모델링을 하실거라 생각합니다.(대 부분 별도의 프로그램이 많을 것이란 예상을 합니다^^)

 

모델링은 정확히 우리가 만들고자 하는 플랫폼을 정확히 그림을 그린 다음, 사용자의 요구사항에 맞는 부분을 글이 아닌 그림을 이용하여 표시하고, 개발자들에게는 그 사항에 맞는 부분을 그림으로 표현하여 실제 만들고자 하는 솔루션으로 한눈에 알아보기 쉽게 그리는 것입니다.

 

Microsoft의 VS 2005의 아키텍쳐 버전은 사실 이 부분을 충실히(?) 지켰고 실제 응용 프로그램 개발에 필요한 부분일 모델링 할 수 있었지만, 그것을 대중적으로 하기에는 조금 부족했다 할 수 있습니다.

여기서 대중적이란 실제 프로젝트에서 사용하는 것은 UML로 그리고 문서화하고, 개발자는 클래스 다이어그램을 그리거나 이미 그린것을 참고로 개발하는 환경이였습니다.

그렇다고 실제 문서화한 UML 처럼 응용 프로그램들이 개발되었다고 장담은? 네 저 역시 실제 프로젝트를 해보면 절대 하지 말라고 하는 코딩 부터 하고 난 다음 설계를 하는 방법을 쓰거나 설계는 하지 않고 넘어 경우, 또는 설계는 설계, 개발은 개발로 설계와 다른 산출물(응용 프로그램)이 나오는 일을 많이 헀습니다.(조금 부끄럽습니다 ㅠ.ㅠ)

 

이제 VS 2010 에서는 모델링에서 일반적으로 사용한 UML을 지원하게 됩니다. 기존의 모델링은 대중적인 것이 부족했다면 이번 Visual Studio은 현재 우리가 하고 있는 업무에 도움이 되는 것을 지원하고 있습니다.

 

Visual Studio 2010에서 모델링을 위하여 이제 VS 2010을 실행하여 프로젝트를 만듭니다.

프로젝트는 File-> New -> Project  선택합니다.

 

선택하면 프로젝트를 만들 수 있는 창이 뜨며 이곳에서 왼쪽 메뉴에의 "Rectnt Templates" 에서 "Modeling Prjects"를 선택합니다.



 

선택하면 프로젝트를 만들 수 있는 창이 뜨며 이곳에서 왼쪽 메뉴에의 "Rectnt Templates" 에서 "Modeling Prjects"를 선택합니다.

 

이 화면에서 각각의 정보를 입력합니다. 

 

이름 : BookshoppingMallUML

Location : 특정위치

Solution :  Default

Solution Name : BookshoppingMall 

 

이제 여기에서 새로운 UML 모델을 그릴 것을 추가합니다. 추가는 첫번째는 Use Case를 추가하여 사용자의 요구사항에 맞는 그림을 그립니다.

그 다음이 중요 포인트 입니다. 무엇인지?? 한번 보시죠.



이제 여기에서 새로운 UML 모델을 그릴 것을 추가합니다. 추가는 첫번째는 Use Case를 추가하여 사용자의 요구사항에 맞는 그림을 그립니다.
그 다음이 중요 포인트 입니다. 무엇인지?? 한번 보시죠.


 

네 바로 유스케이스 다이어그램으로 통해 제가 그려 보았는데 잠시 힌트를 드리자면..

다이어그램을 그린 것을 작업항목에 바로 연결할 수 있다면 어떻게 될까요??

네 Architect 개발에서 그림을 그린것을 작업항목에 연결하여 TFS 서버와 연결할 수 있고, 이 작업항목은 기존에 알고 있는 TFS의 작업항목이라면??? 이것이 Architect 개발의 시작점 입니다. 뭐?

바로 UML로 그린 다음 이것을 작업 항목으로 연결하는 것이 시작점 입니다.

 

정말 그런지는 바로 다음 화면에서 확인 가능합니다.



 

액터를 그려서 그 액터에 해당하는 작업항목을 생성할 수 있습니다. 앞에서 제가 설명한 그대로 인거죠?

(액터가 졸라맨이 아닌... 이쁘장한 그림으로 ㅎㅎㅎ 옛날엔 졸라맨 이였는뎅 ㅋㅋㅋ)

 

그렇다면 이게 시작점 이라고 했습니다. 네 여기서 제가 몇가지 더 그린다음 이제 TFS와 연결하고 이것을 작업항목으로 연결하려 합니다.

연결하여 작업하는 것은 2번째에 하기로 하고, UML 설계를 것을 TFS 저장한다는 것은 이제 문서화하기 설계된 것도 TFS 저장소에 저장하고 이를 언제든지 활용할 있으며, UML이라는 대중적인 지원으로 이제 Visual Studio 에서도 모델링을 이용한 설계를 하고 바로 개발 까지 이여야 있습니다. 그럼 이제 다음으로 넘어가 2번째 부분을 하는데.. 이건 .Soon 입니다.^^

바로 올리겠습니다. TFS 연동한 모습을. ㅎㅎㅎ 금주에 다시~~


 

task group에서의 병렬 작업 취소 - 1  에 이은 두 번째 글입니다.


3. 작업이 취소되었을 때 해야 할 것


취소는 그것을 호출했을 때 즉시 동작하지 않습니다. task group이 취소되면 런타임은 각 task interruption point를 발동하여 런타임을 throw 시켜서 활동중인 task가 취소될 때 내부 예외 형을 잡을 수 있습니다. Concurrency Runtime은 런타임이 언제 interruption point를 호출할지 정의되어 있지 않습니다. 런타임이 취소를 할 때 던지는 예외를 잡아서 처리할 필요가 있습니다.

그래서 만약 task의 처리 시간이 긴 경우는 정기적으로 취소 여부를 확인할 필요가 있습니다.

 

< 리스트 4. >

auto t5 = make_task([&] {

   // Perform work in a loop.

   for (int i = 0; i < 1000; ++i)

   {

      // To reduce overhead, occasionally check for

      // cancelation.

      if ((i%100) == 0)

      {

         if (tg2.is_canceling())

         {

            wcout << L"The task was canceled." << endl;

            break;

         }

      }

 

      // TODO: Perform work here.

   }

});

 

<리스트 4>의 굵게 표시한 코드는 task5가 정기적으로 task group tg2가 취소 되었는지 조사하고 있는 것입니다.

 

<리스트 4>는 명시적으로 task5가 속한 task group tg2가 취소되었는지 조사하고 있는데 만약 해당 task가 속한 task group을 직접적으로 호출하지 않고 취소 여부를 조사하고 싶을 때는 is_current_task_group_canceling() 을 사용합니다.

 

 

4. 병렬 알고리즘에서의 취소

 

task group에서 사용하는 병렬 알고리즘도 위에서 소개한 방법으로 취소할 수 있습니다.

 

< 리스트 5. Task group에서 병렬 알고리즘 사용 >

structured_task_group tg;

 

task_group_status status = tg.run_and_wait([&] {

   parallel_for(0, 100, [&](int i) {

      // Cancel the task when i is 50.

      if (i == 50)

      {

         tg.cancel();

      }

      else

      {

         // TODO: Perform work here.

      }

   });

});

 

// Print the task group status.

wcout << L"The task group status is: ";

switch (status)

{

case not_complete:

   wcout << L"not complete." << endl;

   break;

case completed:

   wcout << L"completed." << endl;

   break;

case canceled:

   wcout << L"canceled." << endl;

   break;

default:

   wcout << L"unknown." << endl;

   break;

}

 

<리스트 5> task group tg task를 넣을 때 병렬 알고리즘을 넣었습니다. 그리고 이번 beta2에 새로 생긴 run_and_wait 멤버를 사용하여 task의 실행이 끝날 때 까지 대기하도록 했습니다(예전에는 run 이후에 wait를 호출해야 했습니다).


물론 cancel이 아닌 예외를 발생 시켜서 취소 시킬 수도 있습니다.


< 리스트 6. 병렬 알고리즘에서 예외를 발생시켜서 취소 시키기 >

try

{

   parallel_for(0, 100, [&](int i) {

      // Throw an exception to cancel the task when i is 50.

      if (i == 50)

      {

         throw i;

      }

      else

      {

         // TODO: Perform work here.

      }

   });

}

catch (int n)

{

   wcout << L"Caught " << n << endl;

}

 

<리스트 6>은 하나의 task만 예외를 발생시키고 있기 때문에 task group의 모든 task를 취소

시키기 위해서는 모든 task에서 예외를 발생시켜야 합니다.

그래서 아래의 <리스트 7>과 같이 전역 변수 flag를 사용합니다.

 

< 리스트 7. 모든 병렬 알고리즘의 task 취소 시키기 >

bool canceled = false;

 

parallel_for(0, 100, [&](int i) {

   // For illustration, set the flag to cancel the task when i is 50.

   if (i == 50)

   {

      canceled = true;

   }

 

   // Perform work if the task is not canceled.

   if (!canceled)

   {

      // TODO: Perform work here.

   }

});

 

 


5. Parallel 작업을 취소를 사용하지 못하는 경우

 

취소 작업은 모든 상황에서 다 사용할 수 있는 것은 아닙니다. 특정 시나리오에서는 사용하지 못할 수가 있습니다. 예를 들면 어떤 task는 활동중인 다른 task에 의해 block이 풀렸지만 아직 시작하기 전에 task group이 최소되어 버리면 계속 시작하지 못하여 결과적으로 애플리케이션이 dead lock 상황에 빠지게 됩니다.




이것으로 task group에서의 병렬 작업의 취소에 대한 것은 마칩니다. 다음에는 Beta2에 드디어 구현된 Concurrency Container에 대해서 설명하겠숩니다.


참고 url
MSDN : http://msdn.microsoft.com/en-us/library/dd984117(VS.100).aspx

SQL Azure 사용 시 주의점(1) - 방화벽 설정

Cloud 2009. 11. 12. 14:00 Posted by 알 수 없는 사용자
SQL Azure 에 방화벽 설정이 추가 됐습니다.
아래 스샷의 빨간 박스 탭이 설정하는 곳 입니다.



이 방화벽 설정을 안하시면 아래와 같이 Access 할 수 없다는 메세지를 보게 됩니다 ^^;



방화벽 설정(Firewall Settings) 탭에서 "Add Record" 로 접근 IP 또는 대역을 설정하시면 SQL Azure DB 를 원격으로 사용 할 수 있습니다.
( 단, 바로 되진 않고 몇분의 시간이 소요 되야 합니다. )


설정을 마치셨으면 정홍주님의 SQL Azure 포스팅을 참고하셔서 사용해 보시면 되겠습니다 ^^