IT 서비스 바라보기/Programming

vshost 란 무엇인가?

하늘다래 2008. 8. 8. 17:47

Visual Studio 2005 를 사용하다보면 bin 폴더 아래에 "vshost" 라는게 포함된 파일 이름들이 생성되는 것을 볼 수 있습니다. 예를 들어 WindowsApplication1이라는 윈폼 프로젝트를 만들어서 F5를 누르면 "WindowsApplication1.vshost.exe"와 "WindowsApplication1.vshost.exe.config"가 생성되는 것이죠.

또한 작업 관리자를 열어서 보면 프로세스로도 등록 되어있는 것을 알 수 있습니다.


대충 디버깅에 관련된 호스팅 프로세스일 것이라고 추정만 했었는데, Dave Templin이라는 MS 개발자가 자신의 포스트에 관련된 글을 실어놓았더군요. 원문은 다음 링크를 참조하세요.

VSHOST -- the Hosting Process

기사 내용을 간단하게 번역해보았습니다. 포스트가 Beta1 시절 때 쓰여진 것이라서 몇가지 내용은 Beta2 이후에 맞게 정정했습니다.


"vshost"란 무엇인가?

vshost는 Visual Studio 2005 IDE 내에서 프로젝트를 빌드할 때마다 생성되는 호스팅 프로세스입니다. 이 프로세스의 목적은 향상된 F5 성능, 부분 트러스트 디버깅(partial trust debugging), 디자인 타임 수식 평가(Design time expression evaluation)입니다.

향상된 F5 성능. 누구나 알 듯이 F5를 누르면 프로그램이 실행됩니다. 하지만 Managed 애플리케이션은 애플리케이션이 실행되는 런타임 환경을 구축하는 애플리케이션 도메인(AppDomain)의 생성을 필요로 합니다. 실제로 AppDomain을 생성하고 디버거를 초기화하는데는 상당한 시간이 소요됩니다. 이러한 작업을 계속 반복할 때마다 지연 현상은 특히 뚜렷해집니다. 더욱 심각한 문제는 애플리케이션이 종료되면 모든 AppDomain과 디버거의 상태가 날라가버린다는 것입니다. F5를 다시 누르면, 모든 것이 다시 생성 및 초기화되어야 합니다.

호스팅 프로세스는 이 과정의 속도를 향상시키기 위해 F5를 누르기 전에 백그라운드에서 이러한 작업들을 수행하고, 애플리케이션을 여러번 실행하는 도중에도 상태를 유지합니다.


부분 트러스트 디버깅. Visual Studio 2005의 새로운 기능 중 하나는 프로젝트 속성 창의 Security 페이지에서 정의한 권한 설정(Permisson Settings)만을 가지도록 부분적으로 신뢰된 환경 상에서 애플리케이션을 디버깅할 수 있다는 것입니다. 부분적으로 신뢰된 애플리케이션을 배포할 때, 이 애플리케이션은 자동적으로 제한된 보안 컨텍스트에서 실행됩니다. 하지만, Visual Studio 디버거가 부분적으로 신뢰된 환경을 시뮬레이션하려면 AppDomain을 특수하게 초기화해야 하는데, 호스팅 프로세스가 이를 처리합니다.


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


"bin"폴더에서 무엇을 하나? (bin 폴더에 있어야 하는 이유?)

vshost 파일이 여러분의 프로그램과 동일한 폴더에 있어야 하는데는 수많은 기술적인 이유들이 있습니다. 애플리케이션이 호스팅 프로세스 내에서 실행될 때, AppDomain 내의 최상위 실행 어셈블리는 여러분의 애플리케이션이 아닌 vshost입니다. 그래서 vshost 파일이 다른 파일들과 동일한 폴더에 있지 않으면 어셈블리, config 파일, ClickOnce, Side-by-Side maniffest 등이 모든 시나리오에서 올바르게 로드될 수 없습니다.


"vshost" 파일을 애플리케이션과 함께 배포해야 합니까?

아닙니다. ".vshost.exe" 및 ".vshost.exe.config"는 Visual Studio 2005 IDE 내에서만 사용됩니다. 이 프로세스는 직접 실행되어서는 안되며, 애플리케이션과 함께 배포해서도 안됩니다.


"vshost" 파일을 생성하지 않게 할 수 있나요?

아래 그림과 같이 프로젝트 속성에서 이 기능을 끌 수 있습니다. 대신 이걸 끄게 되면 위에서 언급한 장점들은 모두 사라지게 된다는 것에 유의하십시오.