개발자

비주얼 스튜디오의 새로운 확장 모델 이해하기

Simon Bisson | InfoWorld 2022.09.05
최근 비주얼 스튜디오 코드(Visual Studio Code)가 엄청난 인기를 누리고 있긴 하지만, 그래도 마이크로소프트의 개발 툴 핵심은 비주얼 스튜디오 IDE다. 25년 이상의 역사를 가진 비주얼 스튜디오 IDE는 사용자별 맞춤 개발환경을 구축하는 데 큰 역할을 했다.
 
ⓒ Getty Images Bank 

비주얼 스튜디오는 프로젝트를 빌드하기 위해 툴과 언어를 동적으로 로드하는 애플리케이션이다. 개발자는 툴체인을 미리 구성하고 코드를 완성하는데 필요한 여러 기능을 선택해 조합할 수 있다. 비주얼 스튜디오 같은 도구는 유연한 개발환경을 제공하기 때문에 원격 개발 및 코드 공유를 자주 하는 현대 개발 문화에서 특히 유용하다. 최근에는 AI 기반 코딩 도구까지 지원한다.

비주얼 스튜디오의 유연성을 더욱 높여주는 기능이 있다. 바로 확장(extension) 모델이다. 확장 모델을 이용하면 UI의 후크와 자체 언어 서버를 사용해 나만의 코드 하이라이트 및 완성 기능을 추가할 수 있다. 결과적으로 비주얼 스튜디오 환경으로 통합되는 나만의 툴을 구축할 수 있는데, 템플릿, API 래퍼(wrapper), 개발 툴을 이용하는 과정을 돕기도 한다. 

이런 확장 모델은 최근 변화를 맞고 있다. 비주얼 스튜디오 2022 버전은 64비트 확장 지원을 추가했고, 더 큰 주소 공간을 지원하는 것 이상으로 다양한 기능을 도입하고 있다. 기존 확장을 새 환경으로 옮기기 위해서는 여러 작업을 해야 하긴 하지만, 그리 어렵지 않은 작업들이다. 64비트에서 사용되는 일반적인 툴체인은 비주얼 스튜디오 2022에서 충분히 재조합할 수 있을 것이다.
 

새로운 확장의 주요 특징

비주얼 스튜디오 확장은 VisualStudio.Extensibility라는 이름으로 바뀐 완전히 새로운 확장 모델을 도입해 변화를 꾀했다. 새로운 확장 코드는 비주얼 스튜디오와 상호작용하는 방식을 바꾸고 확장이 IDE에서 충돌하거나 멈추는 경우를 줄인다. 비주얼 스튜디오 프로세스 확장을 외부에서 실행하도록 허용해 충돌이 일어나거나 멈춰도, 호스트 IDE에 영향을 미치지 않도록 만든 것이다.

비주얼 스튜디오 개발팀은 새 확장 모델로 여러 가지 중요한 개선을 구현했다. 예를 들어, 새로운 API 모음은 리팩터링과 재설계를 거쳐 더 단순해졌다. C++ 개발자에게는 안타까운 소식이지만 새 모델은 닷넷 기반에서만 사용할 수 있다. 이런 변화는 여러 이점을 제공하는데, 대표적으로 확장의 새 버전을 핫로드해서 전체 개발 환경을 다시 시작하지 않고도 업데이트할 수 있다. 크로스 플랫폼이므로 앞으로 나올 비주얼 스튜디오 ARM 버전에서도 추가적인 작업 없이 실행할 수 있을 것이다. 별도의 설정을 통해 향후 출시될 비주얼 스튜디오 버전의 신뢰 수준은 따로 선택할 수 있다. 예를 들어 파일 시스템 액세스를 잠그고 비주얼 스튜디오에서 제공한 API만으로 API 호출을 제한하는 식으로 설정할 수 있다. 

현재 마이크로소프트는 새 확장 모델을 단계별로 나누어 적용하고 있다. 첫 번째 단계는 2021년 9월에 적용됐으며, 공개 문서에 사용하기 위한 프로세스 외부 확장을 지원했다. 두 번째 단계는 거의 1년이 지나 지난달 적용됐는데 이후로도 몇 가지 단계가 더 남았다. 이전 확장 모델과 완전히 호환되는 기능은 다음 비주얼 스튜디오의 메인 버전 출시 후에야 구현될 것으로 보인다. 업데이트 주기가 너무 느리다고 생각할 수 있지만, 비주얼 스튜디오는 마이크로소프트 생태계에서 매우 중요한 부분이고 사소한 문제도 많은 개발자에게 영향을 미칠 수 있다는 점을 고려하면 어느 정도 이해가 되는 일정이다.

첫 번째 단계는 프로세스 외 작업을 활용해 코드를 분석하고 파싱하는 확장을 호스팅하면서 문서 트리를 다뤘다. 문서 트리는 상당히 커질 수 있는데, 이 경우 메모리 사용량이 많을 수 있다. 확장이 자체 프로세스 내에서 실행되므로 윈도우 스케줄러가 확장을 관리해 비주얼 스튜디오를 보호할 수 있다. 예를 들어 주 비주얼 스튜디오 프로세스에 영향을 미치지 않으면서 현재 문서 창 콘텐츠를 로드하고 파싱하고 결과를 전달하는 린터를 쓸 수 있다. 이전에는 스캔되는 코드가 많으면 편집 창이 잠길 수 있었다. 이제는 스캔이 별도의 프로세스에서 실행되므로 흐름과 집중을 유지하면서 작업을 지속할 수 있다.
 

두 번째 단계의 핵심은 원격 UI

얼마 전 적용된 새 확장성 모델의 두 번째 단계는 원격 UI 프레임워크를 지원해 프로세스 외 모델의 범위를 훨씬 더 넓혔다. 대부분 최근 닷넷 UI 툴의 중심에 있는 익숙한 모델-뷰-뷰모델 패턴을 사용한다. MAUI 앱 또는 그와 비슷한 것을 빌드한 적이 있다면 비주얼 스튜디오 확장에 사용되는 접근 방식도 대부분 동일하다는 것을 알 수 있을 것이다. 확장 창은 비주얼 스튜디오 내에서 생성해서 코드 바로 옆에 배치하거나 비주얼 스튜디오에서 자동으로 배치하도록 할 수 있다.

이런 방법으로 만들어진 창은 유연한 툴이 된다. 비주얼 스튜디오에 비동기적으로 연결되며 필요에 따라 켜고 끌 수 있다. 확장 창은 마이크로소프트 IDE에 내 툴을 추가할 때 중요한 부분이다. 동작을 시각화하거나, 코드의 새 요소를 선택하기 위해 복잡하지 않은 방법을 추가할 수 있다. 예를 들어 데스크톱 애플리케이션에 쓰이는 XAML 레이아웃을 빠르게 생성하기 위한 확장을 작성한다면, 레이아웃의 카탈로그를 저장하는 창을 생성해서 애플리케이션에 코드 뼈대를 자동으로 로드하면서 맞춤 구성이 가능한 선택기로 이 창을 사용할 수 있다.

비주얼 스튜디오에 UI를 추가하는 것은 강력한 효과를 만든다. 즉 간단한 확장 옵션으로 빠르게 생산성이 올라갈 수 있다. 2단계에는 확장에는 툴팁(tooltips)을 추가할 수 있는 옵션, 장기 실행 외부 명령에 진행 상황 알림을 추가하는 옵션도 있다. 후자의 옵션은 외부 작업 또는 테스트 현황을 볼 수 있도록 비주얼 스튜디오를 데브옵스 워크플로우에 통합할 수 있다. 이런 알림은 확장에서 비동기 작업을 다룰 때 작업이 완료되기 전에 사용자가 나가지 않도록 하는 데 유용하다.

새로운 확장의 접근 방식은 전통적인 윈도우 프레젠테이션 파운데이션(Windows Presentation Foundation, WPF) 개발과 구별되는 여러 차이점이 있다. 가장 큰 차이는 자체 컨트롤을 사용할 수 없다는 점이다. 새로운 확장에서는 원격 UI(Remote UI)의 컨트롤 집합만 사용할 수 있다. 확장이 애플리케이션의 일부와 충돌하는 것을 피하면서 비주얼 스튜디오의 테마를 지원하는 것이다. 비주얼 스튜디오 셸에서 스타일 리소스를 가져와 확장에 스타일을 적용하는 방법으로 테마 지원을 추가할 수 있다.

2단계의 또 다른 유용한 기능은 프로세스 내 API 지원이다. 따라서 개발자는 예전 확장을 새 모델로 옮기거나 예전 기능과 새 기능을 동일한 코드로 혼합할 때 확장을 예전 API와 함께 작동할 수 있다. 몇 가지 문제가 발생될 수 있지만, 다음 업데이트가 나오기 전에 비주얼 스튜디오 마켓플레이스로 확장을 통합해 필요한 API와 기능을 추가하는 데는 좋다.

오픈소스 프로젝트는 아니지만 새로운 확장 관련 문서는 깃허브에 공개되고 있다. 문서 외에 확장을 테스트하고 디버깅하는 것과 관련된 프로젝트 템플릿과 툴 모음은 비주얼 스튜디오 마켓플레이스에서 제공한다. 즉 확장을 이용하기 위해 필요한 모든 것이 제공되고 있는 셈이다. 덕분에 비주얼 스튜디오는 사용자 모두에게 안정적인 개발 플랫폼이 되고 있다. 
editor@itworld.co.kr

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.