Visual Studio Extensibility 이야기
VSX(Visual Studio Extensibility) 는 Visual Studio 의 기능을 확장할 수 있는 SDK(Software Development Kit) 를 통해 툴의 기능을 확장할 수 있는 소프트웨어 개발 키트입니다. 잘 설계된 Visual Studio 의 확장 가능한 모델은 Visual Studio 2005 부터 비약적으로 발전했습니다. 그리하여 현재 Visual Studio 2010 은 MEF(Managed Extensibility Framework) 를 기반으로 하여 개발, 패키징, 배포에 이르러 훨씬 단순화된 새로운 확장 모델인 VSIX 를 내놓게 되었습니다.
Visual Studio 2003 부터 Visual Studio SDK 를 제공해 주었지만, Visual Studio 2003 버전에서는 확장 기능을 개발할 수 있는 그리 좋은 여건은 아니었습니다. 왜냐하면 Visual Studio 2003 의 Customizing Point 는 대부분 자동화 개체 모델인 DTE 에 굉장히 의존적이었습니다.
Visual Studio 2005 는 이전의 IDE 기반을 갈아엎었다고 할 수 있을 정도로 상당히 파격적인 모습으로 다가왔습니다. 사실 이때만해도 Visual Studio 2003 에 비해 너무 느려지지 않았냐는 불만을 상당히 많이 들었습니다. 하지만 개발자들의 하드웨어 스팩이 좋아지고, Visual Studio 2005 가 제공하는 다양한 기능은 안쓸래야 안쓸수 없었답니다. 그리고 Visual Studio 2005 SDK 는 2008 버전까지 고스란히 답습하고 있었습니다.
Visual Studio 2008 은 이제 .NET 개발의 국민 IDE 로 자리매김 하였습니다. 그리고 빠르게 많은 기업에서 Visual Studio 2008 과 .NET Framework 3.5 기반으로 마이그레이션을 하고 있습니다. (적어도 제 주변 대부분이..) 그리고 이 시점부터 Software Factories 개념을 도입한 Guidance Automation 과 Blueprints 등 Visual Studio 확장 기능들이 대거 모습을 드러내기 시작했습니다. (GA 는 2005 버전부터 등장했지만 실제 활성화된 시점은 개인적으로 2008 부터가 아닐까 생각합니다)
그렇다면 Visual Studio 2010… 이제는 IDE 환경의 지존을 논한다고 생각합니다. 광고성 멘트라고 생각하시면 그냥 스킵 하셔도 좋습니다. .NET Framework 는 더없이 탄탄해지고, 딱딱했던 IDE 환경은 UX 친화적인 면을 보여주기 위해 노력한 흔적이 엿보입니다. 그리고 Oslo, Velocity, Pex, T4 Templates, 미려해진 DSL Tools, 진정한 통합을 꿈꾸는 Team System, 그리고 이번 주제였던 정말 편한 개발 환경 확장을 제공해주는 VSX...
Visual Studio Extensibility 종류
그럼 기존의 VSX 는 어떻게 IDE 도구를 확장하였을까요?
-
Visual Studio Macro
VB 스크립트 언어를 이용하여 Visual Studio 의 자동화 개체 모델의 DTE 객체를 제어할 수 있습니다. 아무래도 스크립트 언어이다보니 개발의 편의성은 좋지만 배포와 코드 보안에 좀 떨뜨름합니다.
-
Visual Studio Addin
기능적인 면에서 Visual Studio Macro 와 큰 차이는 없습니다만, 스크립트 언어가 아닌 C# 과 같은 Managed 언어로 개발이 가능합니다. 태생적으로 Visual Studio Macro 와 동일선상이기 때문에 Addin 의 독립적인 기능만으로는 확장에 한계는 있었습니다. 하지만, DTE 개체 모델을 통해 개발이 굉장히 쉽고, 배포 또한 단순하여 가장 많은 사랑을 받은 VSX 분야입니다.
-
Visual Studio Integration Package (이하 VSIP)
Visual Studio 를 진정으로 통합할 수 있는 확장 방법입니다. Visual Studio 의 COM Interface 를 고스란히 사용할 수 있고, 이것을 이용하여 Visual Studio 의 모든 기능을 활용하고 확장할 수 있습니다. 실제로 Visual Studio 기능의 대부분이 VSIP 를 통해 개발이 되었고 Visual Studio 의 특징을 가장 잘 보여주는 Interface 들로 구성이 되어있습니다. 여러분이 잘 알고 있는 솔루션 탐색기, 오류 리스트, 팀 탐색기 등 셀 수 없을 정도의 많은 VSIP 들이 Visual Studio 에 포함되어 있습니다.
-
Visual Studio Shell Isolated
Visual Studio Shell Isolated 는 Visual Studio 와 같은 Shell 을 제공하고 개발할 수 있는 방법입니다. VSIP 가 Visual Studio 확장 기능에 필요한 요소를 가르킨다면, Shell Isolated 는 VSIP 를 담는 그릇이 되겠군요. Visual Studio Shell Isolated 를 이용하게 되면 기존에 Visual Studio 에서 제공하는 여러 가지 인터페이스를 고스란히 사용할 수 있는 이점이 있습니다. 가량, Project Type, Intellisence 와 Microsoft 의 통합 빌드 솔루션인 MSBuild 등 다양한 기능을 곧바로 사용할 수 있다는 장점이 있는 것이죠.
-
Visual Studio Language Package
Visual Studio 에서 사용할 수 있는 언어를 개발할 수 있습니다. 기본적으로 C#, VB.NET, C++ 등을 사용할 수 있지만 PHP, RoR, Native C 등의 언어를 개발할 수 있도록 하고, 이미 Visual Studio for PHP, Visual Studio for RoR 가 상용화 되었고, Visual Studio for C 는 Visual Studio SDK 예제로도 포함이 되어 있답니다.
-
Domain-Specific Language Package
도메인에 특화된 언어를 개발할 수 있는 방법을 제공합니다. 일반적으로 IT 조직과 개발 조직은 서로가 사용하는 언어가 다릅니다. 즉, 경영진과 실무진과 같은 물과 기름의 관계를 이해시키기 위한 언어로써, 이미 Visual Studio 에서 광범위하게 사용되고 있는 방법입니다.
어휴,, 정말 다양한 방법으로 Visual Studio 를 확장하는 방법을 제공해 주는군요. 이러한 아키텍처는 Visual Studio 2005 부터 제대로 뿌리를 내렸는데, 그 중 일부분은 Visual Studio 2010 에서 좀 더 획기적으로 변신을 합니다.
변신을 하면서 기존의 COM 기반의 인터페이스는 더 이상 WPF 기반의 어플리케이션에서 상당수 비호환적인 면이 있고, 한계점을 드러내지 않았나 생각을 해봅니다. 실제로 기존의 인터페이스는 WPF 의 Managed 환경에서 더 이상 호환할 수 없어집니다. WPF 기반의 IDE 환경에서는 새로운 인터페이스가 필요했고, MEF 를 도입함으로써 새로운 확장 가능한 모델이 필요했습니다. 바로 그것이 새로운 확장 가능한 모델인 VSIX 입니다.
VSIX 는 기존의 IDE 확장 모델과 새로운 MEF 기반의 확장 기능을 개발부터 패키징, 배포까지 통합할 수 있는 방법을 제공해 줍니다. 뿐만 아니라 기존의 확장 기능과 새로운 MEF 기반의 확장 기능을 통합하고 연동까지 할 수 있으니 이것이야 말로 누이 좋고 매부 좋은 일이 아닐까 합니다.
이제부터 위의 다양한 확장 기능을 개발하는 방법을 시작하여 VSIX 에 이르기 까지 한번 짚고 넘어가볼 예정입니다. 아직까지 국내에서는 이러한 희귀한 분야를 다루는 곳도 흔치 않고, 관심이 있더라도 정보가 부족하여 어느 정도 종점을 찍고 포기하는 분들도 많이 있습니다. 아마 이 연재를 통해서 Visual Studio 에 보다 관심을 갖고 널리 기술을 알리는 좋은 기회가 되지 않을까 생각을 하면서, 연재를 기대해 주세요.