응용 프로그램 가상화 - 가상화의 또다른 측면

현재 IT 업계에서 나오는 가상화라는 단어는 꽤 많은 측면에서 사용되고 있습니다. 서버, 데스크톱, 저장소, 프로파일, 프리젠테이션, 응용 프로그램등이 바로 그것이죠. 지금까지 제 블로그에서 많이 언급했었던 가상화는 대부분이 서버 가상화에 속합니다. 서버 가상화에는 Windows Server 2008 with Hyper-V, VMWare, XEN과 같은 다양한 가상화 솔루션들이 제시되고 있고, 경쟁하고 있습니다.

오늘은 또다른 측면의 가상화에 대해서 논해볼까 합니다. 바로 응용 프로그램 가상화(Application Virtualization)입니다. 응용 프로그램 가상화에 대한 이야기를 드리기 전에 질문드리고 싶은 사항이 있습니다.

"응용 프로그램 가상화가 무엇일까요?"

감이 안오시나요? 얼마전 제가 잘아는 스터디 모임에서 비슷한 질문을 드렸었는데.. 답변이 매우 달랐었습니다. 그때 처럼 또하나의 힌트를 던져볼까요? 한대의 머신에서 여러 버전의 프로그램을 동작시킬 수 있나요? 예를 들어, Word 97, Word 2000, Word XP, Word 2007과 같이 다양한 버전의 프로그램을 한대의 머신에서 사용할 수 있느냐는 질문입니다. 대부분 불가능한 경우가 많습니다. 이유는 바로 DLL 파일들의 중복 또는 디렉터리의 겹침 문제, 레지스트리 중복등이 되겠죠. 회사의 다양한 업무를 하시다보면, 원치 않게 다양한 버전의 프로그램을 동시에 사용해야 하는 경우가 많습니다. 기존 솔루션과의 연계성, 이에 대한 업그레이드 이슈등 최신의 프로그램에서 다양한 업무를 보시고 싶으시겠지만, 쉽지 않죠. 그럼 해당 업무를 보시기 위해서 각각의 버전에 따라 PC를 가진다? 이것도 무리성이 있습니다. 비용이랑 직결되기 때문입니다. 물론! 해당 업무가 회사에 엄청난 이득을 주는 경우라면 틀리겠지만요 :) SBC(Server Based Computing) 환경을 사용하시는 경우에도 비슷합니다. 여러 버전의 프로그램을 하나의 터미널 서버에 설치하는 것도 앞서 말씀드린 여러 중복 이슈가 발생합니다.

"Eliminate DLL Hell"

응용 프로그램 가상화를 왜 쓰냐고 물었을 때, 가장 일반적으로 보여지는 답변입니다. 응용 프로그램 가상화는 각각의 응용 프로그램의 입장에서 봤을 때, 현재 한대의 PC를 전용하고 있는 것처럼 보여지게 해주는 기술입니다. 한대의 머신에서 응용 프로그램 가상화가 되어진 프로그램을 사용할 때, 해당 여러 프로그램은 자신이 한대의 PC를 전용하고 있다고 여기게 해주는 것이죠.

image

그럼 결국, 플랫폼 위에, 어떤 추상의 계층(Abstract Layer)가 있고, 이 위에 응용 프로그램이 올라가는 형태로 동작한다는 의미고, 이 추상의 계층에서 개개별 프로그램에 대한 고유의 환경을 꾸며주게 됩니다. 프로그램은 정상적으로 DLL, 레지스트리, 서비스, 각종 구성 파일, 데이터등을 읽어들이고, 쓰고, 수정하겠죠? 그렇지만 실제 운영 체제엔 영향을 주기 않는 형태입니다.

응용 프로그램 가상화는 이러한 형태로 동작하기 때문에, 깔끔하게 설치된 플랫폼 위에서 모니터링된 설치 작업을 진행해줘야 합니다. 이 시점에서 응용 프로그램 가상화 프로그램은 해당 응용 프로그램이 시스템을 어떻게 변경하는지 감지하고, 이를 저장하게 됩니다. 폴더의 변경, 새로운 파일의 설치, 변경, 레지스트리 변경, 서비스 설치등을 하나의 패키지 형태로 저장을 해주게 된다는 의미입니다. Microsoft의 응용 프로그램 가상화 솔루션인 SoftGrid의 경우, 이러한 작업을 시퀀싱(Sequencing)이라고 부르고 있습니다. 시퀀싱된 프로그램은 하나의 패키지 형태로 저장되게 됩니다. 클라이언트는 이러한 패키지를 스트리밍(Streaming)받아 사용할 수 있게 되죠. 시퀀싱된 프로그램은 해당 프로그램이 변경시킨 여러 부분에 대해서 저장하고 있고, 클라이언트가 사용시 이를 플랫폼 위 추상화된 계층으로 제공해줍니다. 이러한 추상화된 계층을 SystemGuard라고 부릅니다.

image

SystemGuard를 통해, 응용 프로그램은 실제 플랫폼 위에서 동작하는 것처럼 보여지게 된다는 사실은 이제 이해가 되셨죠? 간단하게 클라이언트측면을 살펴보셔야 하는데, 클라이언트에는 사용할 응용 프로그램이 설치되는 것은 아닙니다. 해당 클라이언트에는 응용 프로그램 가상화 서버에 연결하고, 가상화된 응용 프로그램을 사용하기 위한 클라이언트만 설치됩니다. 사용자의 데스크톱, 시작 메뉴, 퀵 런치등에 아이콘을 배치시키고, 이를 클릭하여 실행할 시, 사용자에게 가상화된 프로그램 패키지가 스트리밍(SoftGrid의 경우에는 RTSP 프로토콜을 사용합니다. 포트 번호 554)되고, 이를 통해 프로그램은 실행되게 됩니다. 실제 플랫폼에는 어떠한 변화도 주지 않은채 사용자는 프로그램을 일반적인 형태로 사용할 수 있습니다. 응용 프로그램이 개별적으로 고립되어진 형태이지만, 시퀀싱에 따라, 응용 프로그램 여러개를 하나의 슈트(Suite)형태로 배포하여, 상호 연동되게 만드실 수 있으며, 응용 프로그램간에 복사/붙여넣기등도 당연히 가능합니다. 또한 응용 프로그램뿐만 아니라, 브라우저에 내장되는 각종 솔루션에 대해서도 가상화할 수 있습니다.

image

이제 다시 첫번째 질문으로 돌아가보죠. 하나의 머신에서 이제 다양한 버전의 프로그램을 사용할 수 있겠죠? 개별 버전별로 패키징을 하게 되고, 이를 응용 프로그램 가상화 환경에서 사용한다면, 사용자들은 다양한 버전의 프로그램을 사용할 수 있게 됩니다. 터미널 서비스도 마찬가지입니다. 터미널 서비스 서버 자체가 응용 프로그램 가상화 환경에선 클라이언트가 되는 것이죠. 현재 Microsoft의 SoftGrid는 4.5 Beta가 가장 최신의 버전이며, 이는 베타 다운로드를 통해 사용해보실 수 있습니다.

 

 

Microsoft Application Virtualization version 4.5

응용 프로그램 가상화에 대해서 이제 조금은 이해가 되셨나요? 프로그램간의 충돌을 막고, 아주 깨끗한 환경에서 다양한 응용 프로그램을 문제없이 사용할 수 있게 해주는 응용 프로그램 가상화도 가상화 분야에서 떠오를 또하나의 토픽일 것입니다.