이 출시되었습니다! 11월의 새로운 기능 및 수정 사항을 읽어보세요.

언어를 위한 공통 프로토콜

2016년 6월 27일, VS Code 팀, @code

Visual Studio Code는 어떤 프로그래밍 언어를 사용하든 모든 개발자를 위한 편집기입니다. 도구에 포함된 언어 또는 Marketplace의 확장 프로그램을 통해 150개 이상의 언어를 지원합니다. 또한 VS Code를 공개적으로 개발하고 VS Code를 구동하는 구성 요소를 공개적으로 사용할 수 있도록 하는 데 전념하고 있습니다. 가장 주목할 만한 구성 요소 중 하나는 Monaco 에디터이지만, VS Code를 구동하는 또 다른 기술은 누구나 "언어 서버"를 구현하여 VS Code에 새로운 프로그래밍 언어를 지원하는 데 사용할 수 있는 JSON 기반의 개방형 프로토콜입니다.

any developer any language any tool

모든 언어, 모든 도구

오늘 샌프란시스코에서 열린 DevNation 컨퍼런스에서 Red Hat 및 Codenvy와 함께 이 언어 서버 프로토콜이 업계의 도구 제작자 및 언어 제공업체에서 채택되었다고 발표했습니다. 언어 제작자에게는 TypeScript 개발자 또는 C# 개발자( OmniSharp 경유)가 오늘날 얻는 경험과 유사하게 다양한 개발 도구 및 운영 체제에서 해당 언어에 대한 향상된 도구 경험을 의미합니다. 또한 모든 개발자가 VS Code가 아닌 도구에서도 좋아하는 프로그래밍 언어에 대해 일관된 편집 경험을 가질 수 있음을 의미합니다.

작동 방식

Visual Studio Code는 많은 프로그래밍 언어에 대해 풍부한 언어 지원을 제공합니다. 특정 프로그래밍 언어에 대한 지원은 해당 언어를 깊이 이해하는 **언어 서버**에 의해 제공됩니다. VS Code는 이러한 서버와 통신하여 '오류 및 경고', '리팩터링', '정의로 이동'과 같은 풍부한 편집 기능을 활성화합니다.

language server protocol

일반적인 편집 세션 중에 도구와 언어 서버가 의미론적 정보를 통신하는 방법에 대한 예시입니다.

  • 사용자가 도구에서 파일을 엽니다(문서라고 함): 도구는 언어 서버에 문서가 열렸음(didOpen)을 알리고 해당 문서에 대한 정보가 도구에서 메모리로 유지됨을 알립니다.

  • 사용자가 편집을 수행합니다: 도구는 문서 변경(didChange)에 대해 서버에 알리고 프로그램의 의미론적 정보가 언어 서버에 의해 업데이트됩니다. 이 과정에서 언어 서버는 이 정보를 분석하고 발견된 오류 및 경고(diagnostics)를 도구에 알립니다.

  • 사용자가 기호에 대해 '정의로 이동'을 실행합니다: 도구는 서버에 definition 요청을 보냅니다. 서버는 정의를 포함하는 문서의 uri와 문서 내의 range로 응답합니다. 이 정보를 기반으로 도구는 정의 위치에서 해당 문서를 열 수 있습니다.

  • 사용자가 문서를 닫습니다(파일): 도구에서 didClose 알림이 전송되어 언어 서버에 문서가 더 이상 메모리에 없으며 대신 파일 시스템에서 유지 관리됨(즉, 저장됨)을 알립니다.

이 통신은 JSON-RPC를 통해 발생하며 일반적인 세션 동안 여러 번 발생합니다.

language server sequence

이 아키텍처를 통해 VS Code는 여러 언어 서버와 상호 작용할 수 있으며, 각 서버는 도구가 구현된 언어와 독립적으로 어떤 언어로든 구현될 수 있으며, 일반적인 JSON 기반 프로토콜을 활용하는 한 다양한 기능을 지원할 수 있습니다.

또한 주어진 언어 서버를 한 번 구현하고 다른 도구가 이를 활용할 수 있도록 합니다. 그렇기 때문에 Codenvy가 차세대 Eclipse IDE인 Eclipse Che에 이를 추가하고, Red Hat이 프로토콜을 활용하는 모든 도구에서 사용할 수 있는 독립 실행형 Java 언어 서버를 게시하기 위해 노력하고 있다는 점이 흥미롭습니다.

개방형 명세

이 프로토콜의 전체 명세는 공개 GitHub 저장소에서 확인할 수 있으며, 지금까지 프로토콜이 어떻게 발전해 왔는지에 대한 역사도 확인할 수 있습니다. 더 많은 언어 및 도구에서 채택함에 따라 Red Hat, Codenvy 및 오픈 소스 커뮤니티의 다른 파트너와 함께 프로토콜을 지원하고 발전시킬 의도가 있습니다. 누구나 다른 오픈 소스 프로젝트처럼 저장소에서 질문하고, 이슈를 제기하거나, 풀 요청을 제출할 수 있습니다.

다음 단계

이것은 시작에 불과합니다. OmniSharp(C#), JSON, C++, xText, JavaFX, R과 같은 프로그래밍 언어 커뮤니티는 향후 해당 언어에 대한 언어 서버를 출시할 것을 약속했습니다. 언어 서버, 편집기 및 SDK를 포함한 프로토콜 구현 전체 목록은 GitHub 저장소에서 사용할 수 있습니다.

더 자세히 알고 싶으시면 브레이크아웃 세션을 시청하시고, Red Hat 및 Eclipse Che 팀의 블로그 게시물을 확인하시고, GitHub의 언어 서버 프로토콜 저장소를 방문하세요. TypeScript와 Node.js로 구현된 작동하는 언어 서버의 소스 코드를 단계별로 살펴볼 수 있는 언어 서버 연습도 있습니다. 물론 어떤 언어로든 언어 서버를 구현할 수 있습니다!

행복한 코딩 되세요!

VS Code 팀, @code

© . This site is unofficial and not affiliated with Microsoft.