본문 바로가기

.NET Framework/Visual Studio

[Visual Studio] VSHOST : 01 VSHOST? 너 누구니?

 회차
[Visual Studio] VSHOST : 01. VSHOST? Who are U?

[Visual Studio] VSHOST : 02. VSHOST Entry point & Etc

01| VSHOST? 넌 누구니?
혹시 VSHOST에 대해서 아시나요? Visual Studio라는 편리한 도구에 그가 있었기에 가능 했다는것을...
이번 포스팅은 2004년 8월 VS2005 Bata 1때부터 등장한 VSHOST에 대해서 이야기를 해볼까 합니다.

" 그가 있었기에 가능 했다 " 라고 표현을 할 만큼Visual Studio의 주역, 숨은 MVP인데요.
마치 축구 선수의 12번째 선수인 붉은 악마와 비슷합니다.


도대체 VSHOST는 뭘까요?

Visual Studio(2005 이상)를 사용하다보면 bin 폴더 아래 xxxx.vshost.exe 이라는 vshost 별칭이 붙은 파일 이름들이 생성 된것을 볼수 있습니다.  WindowsApplication1이라는 윈폼 프로젝트를 만들어서 F5를 누르면 "WindowsApplication1.vshost.exe"와 "WindowsApplication1.vshost.exe.config"가 생성됩니다.

또한 작업 표시줄을 통해 확인 할수 있습니다.



혹시 이 파일을 보신 분은 파일을 지워도 되는 것인지? 배포 할 때 같이 배포를 해야 할것인지?
한번쯤 의문을 가지거나 고민 하신적이 있으실거라고 생각이 듭니다.

vshost?! 어떤 프로세스일지 궁금하지 않으세요? Dave Templin이라는 MS 개발자 블로그 원문 자료를 참고하세요
- VSHOST -- the Hosting Process :
http://blogs.msdn.com/b/dtemp/archive/2004/08/17/215764.aspx

* vshost?
vshost는 Visual Studio IDE 내에서 프로젝트 빌드할 때마다 출력 폴더(Debug, Release)에 생성되며 디버깅 향상을 위한 호스팅 프로세스입니다. 이 프로세스의 목적은 크게 3가지로 구분 되어집니다.
- 향상된 F5 성능
- 부분 트러스트 디버깅(Partial Trust Debugging)
- 디자인 타임 수식 평가(Design Time Expression Evaluation)

vshost은 호스팅 프로세스의 대상이 개발하고자하는 어플리케이션이 그 대상이 된다는 사실을요^^;
VS IDE → vshost.exe → 어플리케이션

그럼 하나씩 살펴보도록 하겠습니다.

1. 향상된 F5 성능

향상된 F5 성능, 개발자는 2005버전후 부터 프로세스 수행 작업이 상당히 줄이든 것을 알수 있습니다.
2005 이전 버전에서 개발 해보신 경험이 있으분들이라면 디버깅을 수행하면 한참 후에야 디버깅이 시작되는 걸 경험 하셨을겁니다. 실제로 Managed Application은 Application이 실행되는 런타임 환경을 구축하는 AppDomain 생성을 필요로로 하고 AppDomain을 생성하고 디버그를 초기화하는데 상당한 시간이 소요됩니다.

이러한 작업을 시작할때마다 AppDomain 영역을 생성하고 지우고 생성하고 과정을 반복하게 된다면
연현상은 뻔한 사실이겠죠?  무엇보다 가장 심각한 문제는 어플리케이션의 상태가 종료된다면 모든 AppDomain과 디버깅의 상태가 증발해버린 아픈 과거가 있습니다. 디버깅을 누르고 다시 생성과 초기화를 해야하는 번거로움이 있었습니다.
F5 성능 속도를 향상시키기 위해서 디버깅 프로세스가 시작전 백그라운드에서 작업을하고 애플리케이션을 여러번 실행하는 도중에도 상태를 유지하도록 하고있습니다.

2. 부분 트러스트 디버깅(Parial Trust Debugging)

부분 트러스트 디버깅. 프로젝트 속성 창의 Security 페이지에서 정의한 권환 설정(Permisson Settings)만을 가지도록 부분적으로 신뢰된 환경 상에서 디버깅을 할수 있게 해줍니다.

주로 Windows 및 콘솔 응용 프로그램에서 적용이 되는데. 그중 스마트 클라이언트를 대표적인 사례로 뽑을수가 있습니다.
부분적으로 신뢰된 애플리케이션을 배포할 때, 이 애플리케이션은 자동적으로 제한된 보안 컨텍스트에서 실행되므로 보안 권환 및 동작이 달라지므로 디버깅하기 어려웠습니다. 결국 이를 해결하기 위해서 원격 디버깅 설정등 까다롭고 어려운 작업이 많았는데요. VS 2005부터 호스팅 프로세스가 별도의 권한을 부여 할 수 있게 되어 제하된 또는 허용된 권환에서 디버깅을 할수 있게 되었습니다.

3. 디자인 타임 수식 평가(Design Time Expression Evaluation)

디자인 타임 수식 평가. 실제로 애플리케이션을 실행할 필요없이 immediate 창에서 애플리케이션 코드를 테스트 해볼수 있다는것입니다. 이러한 디자인 타임 수식 평가 하에서 코드를 실행하는데도 역시 호스팅 프로세스가 사용됩니다.

* 디자인 타임 수식 평가 적용 사례



디자인 타임에 대해서는 아래 링크를 참조하시길 바랍니다.
- 직접 실행 창 : http://msdn.microsoft.com/ko-kr/library/f177hahy(v=VS.80).aspx

- 연습: 디자인 타임에 디버깅 : http://msdn.microsoft.com/ko-kr/library/83hd8f1e(v=VS.80).aspx

포스팅을 마치며...


긴 포스팅 읽어주셔서 감사드리며 ^^
다음 포스팅에서는 호스팅 프로세스의 진입 시점과 기타사항에 대해 포스팅을 해보겠습니다 ^^
좋은 하루 되세요 : )

정은성 드림