News Feed

고를 활용해 대폭 빨라지는 타입스크립트

컨텐츠 정보

  • 조회 678

본문

마이크로소프트가 지난 주 타입스크립트 언어의 아키텍처 방향에 있어 중대한 변화를 발표했다. 기존 타입스크립트 컴파일러인 tsc는 타입스크립트 자체로 만들어져 자바스크립트로 컴파일되고 Node.js에서 실행된다. 그러나 앞으로는 고 언어를 사용하는 독립형 네이티브 바이너리 컴파일러로 바뀐다.

타입스크립트가 설계 단계부터 염두에 둔, 예를 들어 클라우드에 호스팅되는 오피스 애플리케이션, 비주얼 스튜디오 코드 IDE와 같은 대규모 프로젝트의 컴파일 속도가 대폭 향상됨을 의미한다. 마이크로소프트에 따르면 컴파일 속도는 이전에 비해 10배 이상 빠를 것으로 전망된다.

타입스크립트를 위한 새로운 컴파일러

수치만 보면 확실히 좋다. 비주얼 스튜디오 코드의 150만 줄 코드를 컴파일하는 경우 현재 툴을 사용한다면 약 78초가 걸리지만 새로운 네이티브 컴파일러는 단 7.5초만에 완료된다. 10.4배 더 빠른 속도로, 큰 폭의 개선이다. 즉, 개발팀은 새로운 컴파일러를 닷넷의 로슬린(Roslyn)과 비슷하게 다룰 수 있다. 개발 툴 내에서 컴파일러를 사용해 코드를 작성하면서 동적으로 디버깅하거나 깃허브 코파일럿과 같은 툴과 더 긴밀하게 작업하는 기능을 추가하는 것도 가능하다.

새로운 기능을 위한 핵심은 속도다. 자바스크립트 엔진 내부에서 실행되는 컴파일러가 아닌 네이티브 컴파일러가 필요하다. 코드를 작성하는 과정에서 코드를 분석할 수 있는 컴퓨팅 기능이 있으면 타입스크립트의 접근성이 높아지고 개발자 생산성과 만족도가 모두 향상된다. 생산성 증대 요구를 받는 개발자에게는 예를 들어 비주얼 스튜디오 코드 코드베이스 전체를 리팩터링하는 데 필요한 수준의 컴파일러 지원이 필수적이다.

타입스크립트 컴파일러 속도를 10배 높이면 편집기 언어 서버에서 코드를 하이라이팅하고 괄호와 세미콜론을 추적하는 데 필요한 정보를 제공하기가 더 쉬워진다. 동시에 인텔리센스(IntelliSense)와 같은 툴은 더 정확한 코드 완성 기능을 제공하게 된다. 이 업데이트는 언어 서버 프로토콜에 대한 지원을 추가하므로 더 많은 IDE와 프로그래머 편집기가 타입스크립트 지원을 추가할 수 있게 된다.

마이크로소프트는 메모리 사용이 대폭 개선됐다는 점을 강조한다. JIT 플랫폼에서 컴파일러를 실행하는 데 따르는 오버헤드를 제거함으로써 이미 약 50%가 개선되며, 여기에 팀 자체적인 최적화까지 더하면 개선 폭은 더 커진다.

상대적으로 작은 메모리 오버헤드는 타입스크립트 애플리케이션을 빌드하는 툴과 환경에도 영향을 미친다. 깃허브 코드스페이스, 애저 데브 스페이스와 같은 가상 환경으로 전환하는 조직이 증가하는 상황에서 가장 복잡한 프로젝트에서도 리소스 요구사항을 최소한으로 유지할 수 있으면 비용을 관리하고 가상 환경이 최대한 빠르게 로드되도록 하는 데 도움이 된다.

공개적인 타입스크립트-고 개발

지금은 새로운 타입스크립트 컴파일러의 초기 단계로, 기존 자바스크립트 기반 툴의 다음 릴리즈와 병행 개발되고 있다. 릴리즈 노트에 따르면 필요한 기능은 대부분 준비됐지만 아직 많은 부분이 빠져 있고, 결과적으로 타입스크립트의 다음 소규모 릴리즈와 주 릴리즈(5.9 및 6.x)는 여전히 현재 플랫폼을 기반으로 빌드된다. 새로운 컴파일러에 충분한 기능이 추가돼서 타입스크립트 6.x 코드를 지원할 수 있게 되면 타입스크립트 7.0으로 릴리즈될 예정이다. 닷넷이 닷넷 프레임워크에서 벗어나는 것이나 파워셸이 닷넷을 기반으로 빌드되는 것과 비슷한 변화라고 보면 된다. 마이크로소프트는 기존 타입스크립트를 버려도 되는 시점까지 기존 타입스크립트와 새로운 타입스크립트를 계속 함께 개발할 것이다.

그동안 새 컴파일러를 웹 기반 플레이그라운드의 일부로 실행하는 것은 불가능하다는 비판이 있었지만, 언어 설계자인 앤더스 하일스버그가 깃허브 코멘트에서 언급한 바와 같이 고 컴파일러의 웹어셈블리 버전을 사용해서 웹 기반 개발을 계속 지원하면서 웹 코드 플레이그라운드에 다수의 새로운 컴파일러 기능을 제공할 가능성이 있다.

개발은 깃허브에서 자바스크립트 릴리즈와는 별개의 리포지토리를 통해 공개적으로 진행되고 있다. 지금으로서는 공개 바이너리 릴리즈는 없지만 현재 코드베이스를 가져와서 각자 자신의 툴을 컴파일하는 방식으로 자유롭게 사용해볼 수 있다. 마이크로소프트는 고 기반 타입스크립트 컴파일러를 빌드하기 위한 지침, 그리고 비주얼 스튜디오 코드를 지원하는 관련 언어 서버를 제공한다.

직접 빌드하기

새로운 타입스크립트 컴파일러와 언어 서버 빌드는 비교적 간단하다. 시작하기 전에 필수 요소인 고 컴파일러 최신 버전Node.js 자바스크립트 플랫폼, 그리고 작업 실행기인 hereby를 설치해야 한다. 참고로 hereby는 작업을 함께 연결하고 타입스크립트 빌드 프로세스를 조율하는 데 사용되는 Node.js 기반 툴이다. 컴파일러를 빌드하는 실행기, 테스트를 빌드하는 실행기, 코드가 제대로 린트되는지 확인하는 실행기 등 다양한 출력에 대해 다양한 실행기를 사용할 수 있다.

기술적으로 hereby를 꼭 사용해야 하는 것은 아니며 고 자체 툴을 사용해도 되지만 hereby를 사용하면 여러가지가 간소화된다. 한 가지 중요한 점은 hereby를 전역 툴로 설치하지 않은 경우 npm의 npx 명령을 사용해 실행할 수 있다는 것이다. 따라서 hereby build를 사용해 빌드를 실행하는 대신 간단히 npx hereby build를 사용하면 된다. 이렇게 하면 경로 편집의 복잡함 없이 동일한 출력을 얻을 수 있다.

시작하려면 먼저 하위 모듈과 함께 타입스크립트-고 깃허브 리포지토리를 클론한다. 하위 모듈의 경로 길이가 너무 길다는 이유로 윈도우 시스템에서 문제가 발생했지만 이후 깃의 하위 모듈 업데이트 명령을 사용해 설치할 수 있었다. 이렇게 해서 빌드를 완료한 후 npx hereby test를 사용해 타입스크립트-고의 테스트를 실행했다.

필수 요소가 설치되면 고 기반 타입스크립트를 빌드하는 과정은 간단하다. npx hereby build를 실행하면 소스 코드와 함께 빌드된 디렉터리에 실험적 tsgo 컴파일러가 설치된다. 빌드가 완료된 후 제공된 테스트를 실행해 확인했다. 완전한 테스트 집합은 아직 없지만 지금 있는 테스트만으로 컴파일러의 뛰어난 성능은 충분히 느낄 수 있었다. 현재 테스트 모음은 필자의 테스트 하드웨어에서 약 3분 30초만에 통과됐다.

컴파일러와 새로운 언어 서버

새로운 툴에는 새로운 컴파일러를 위한 언어 서버의 초기 버전이 포함된다. 아직 새로운 개발 툴에 연결되지는 않지만 비주얼 스튜디오 코드에 설치하고 코드 디버거에서 출력을 확인해 타입스크립트 코드의 변경 사항을 파싱하는 성능을 확인할 수 있다.

마이크로소프트는 깃허브 리포지토리의 일부로 필요한 JSON과 함께 설치 지침을 비주얼 스튜디오 코드에서 제공한다. 설명서의 이 부분이 약간 혼란스러워서 처음에는 구성 JSON이 빌드 프로세스의 일부로 생성됐다는 의미로 잘못 이해했다. 빌드된 폴더에서 필요한 파일을 찾지 못해 설명서를 다시 읽어보고 해당 파일들이 컴파일러와 언어 서버를 위한 소스 코드와 함께 복제됐다는 사실을 알게 됐다.

이 혼란을 극복한 후 비주얼 스튜디오 코드에서 확장 개발 모드로 실행되는 언어 서버 출력을 볼 수 있었다. 이 방식에서는 서드 파티 확장 개발자가 타입스크립트-고 언어 서버에 연결해 새 컴파일러 위에 자체 확장 툴을 빌드할 수 있다. 코드 편집기 창에서 타입스크립트를 변경하면 그에 대한 반응으로 이벤트가 발생하고, typescript-go 또는 typescript-go(LSP)를 선택하면 출력 창에 출력이 표시된다.

마이크로소프트가 자체 컴파일러의 개발자 생산성에 투자하는 모습은 긍정적이다. 최근 닷넷의 부활에는 언어 및 UI 툴의 개선 외에 로슬린 컴파일러도 큰 역할을 했는데, 타입스크립트 업데이트 역시 이와 같은 종류의 혜택을 다수 제공하는 것으로 보인다. 빠른 컴파일러는 현대 개발 툴에서 가치를 얻는 데 있어 중요하다. 실시간 오류 수정을 구현하고 리팩터링과 같은 기술을 최대한 활용하는 데 필요한 컴파일된 코드에 대한 심층적인 이해를 제공할 수 있기 때문이다.

공개 개발이 진행되면서 플랫폼의 다른 영역에서도 성능을 개선하기 위한 커뮤니티의 풀 요청이 이미 확인되고 있다. 이 정도 규모의 프로젝트에서 이처럼 조기에 외부 참여가 이뤄지는 현상은 타입스크립트 리엔지니어링에 대한 커뮤니티의 지지, 그리고 플랫폼 자체의 인기와 유용성을 모두 보여주는 좋은 신호다.

타입스크립트는 비주얼 스튜디오와 오피스 제품군의 웹 버전, 두 가지 모두 구동하므로 마이크로소프트에는 필수적인 툴이 됐다. 새로운 컴파일러는 마이크로소프트 자체 개발 팀이 고품질 코드를 더 쉽게 제공할 수 있게 해준다. 또한 우리 모두가 각자의 애플리케이션에서 이를 활용해서 자체 대규모 자바스크립트 애플리케이션을 동일한 구문 대부분을 공유하는, 강력한 타입의 관리하기 쉬운 언어로 옮길 수 있다. 마이크로소프트 스스로의 문제 해결이 목적일 수도 있지만 어쨌든 마이크로소프트 개발자의 생산성이 높아진다면 우리의 생산성도 높아질 것이다.
dl-itworldkorea@foundryco.com

관련자료

댓글 0
등록된 댓글이 없습니다.
Member Rank