Language Server 프로토콜
Language Server ProtocolLSP(Language Server Protocol)는 소스 코드 편집기 또는 IDE(Integrated Development Environment)와 프로그래밍 언어별 기능을 제공하는 서버 간에 사용하기 위한 개방형 JSON-RPC 기반 프로토콜이다.프로토콜의 목표는 프로그래밍 언어 지원이 주어진 편집자 또는 IDE와 독립적으로 구현되고 배포될 수 있도록 하는 것이다.[1]
역사
LSP는 원래 Microsoft Visual Studio Code용으로 개발되었으며 현재 공개 표준이다.2016년 6월 27일 마이크로소프트는 Red Hat 및 Codenvy와 협력하여 프로토콜의 규격을 표준화한다고 발표했다.이 의정서는 3개 회사가 지원하고 채택했다.[2][3]사양은 GitHub에서 주최, 개발한다.[4]
배경
현대의 IDE는 개발자들에게 코드 완성, 리팩터링, 기호 정의 탐색, 구문 강조, 오류 및 경고 표시와 같은 정교한 기능을 제공한다.
예를 들어, 텍스트 기반 프로그래밍 언어에서 프로그래머는 메서드의 이름을 바꾸기를 원할 수 있다.read
프로그래머는 각각의 소스 코드 파일을 수동으로 편집하여 이전 방법 이름의 적절한 항목을 새 이름으로 변경하거나, 대신 IDE의 리팩터링 기능을 사용하여 필요한 모든 변경을 자동으로 수행할 수 있다.이러한 리팩터링 스타일을 지원할 수 있으려면 IDE는 프로그램의 출처가 기재된 프로그래밍 언어에 대한 정교한 이해가 필요하다.예를 들어 순진한 검색과 교체를 대신 수행하는 것과 같은 이해가 없는 프로그래밍 도구는 오류를 발생시킬 수 있다.이름을 변경할 때read
예를 들어, 툴은 호출될 수 있는 변수의 부분 일치를 대체하지 않아야 한다.readyState
, 또한 "already"라는 단어를 포함하는 코드 설명의 부분을 대체해서는 안 된다.둘 다 로컬 변수의 이름을 변경해서는 안 된다. read
예를 들어, 다른 범위에서 동일한 이름의 변수를 변경하십시오.
특정 프로그래밍 언어에 대한 기존의 컴파일러나 통역사는 소스 코드를 객체 코드로 변환하거나 코드를 즉시 실행할 목적으로 작성되기 때문에 일반적으로 이러한 언어 서비스를 제공할 수 없다.또한, 언어 서비스는 프로그래머가 편집 중이고 아직 문, 절차 또는 기타 구성의 입력을 완료하지 않았기 때문에, 예를 들어, 제대로 형성되지 않은 소스 코드를 처리할 수 있어야 한다.또한, 타이핑하는 동안 이루어지는 소스코드 파일의 작은 변경은 대개 프로그램의 의미 체계를 바꾼다.사용자에게 즉각적인 피드백을 제공하기 위해 편집 도구는 특정 수정의 구문적 및 의미적 결과를 매우 신속하게 평가할 수 있어야 한다.따라서 컴파일러와 통역사는 편집 툴이 소비하는 데 필요한 정보를 생산하는데 서투른 지원자를 제공한다.[5]
Visual Studio Code 개발을 위한 Language Server Protocol의 설계와 구현 이전에 대부분의 언어 서비스는 일반적으로 주어진 IDE나 다른 편집자에 묶여 있었다.Language Server Protocol이 없는 경우, 언어 서비스는 일반적으로 툴별 확장 API를 활용하여 구현된다.다른 편집 도구에 동일한 언어 서비스를 제공하려면 서비스가 두 번째 편집자의 확장 인터페이스를 대상으로 할 수 있도록 기존 코드를 수정하는 노력이 필요하다.[6]
Language Server Protocol은 편집기에서 언어 서비스를 디커플링하여 서비스가 범용 언어 서버 내에 포함될 수 있도록 허용한다.편집자라면 누구나 기존의 언어 서버를 활용함으로써 여러 언어에 대한 정교한 지원을 이어받을 수 있다.마찬가지로, 새로운 프로그래밍 언어의 개발과 관련된 프로그래머는 기존 편집 도구에 해당 언어의 서비스를 이용할 수 있게 할 수 있다.[5]따라서 Language Server Protocol을 통한 Language Server의 사용은 또한 편집 도구의 벤더의 부담을 줄여준다. 왜냐하면, 벤더는 Language Server가 이미 구현된 한 벤더가 지원하고자 하는 언어에 대해 자체적인 언어 서비스를 개발할 필요가 없기 때문이다.또한 Language Server Protocol은 사용 중인 프로그래밍 언어에 대한 컴파일러의 벤더나 언어 지원이 추가되고 있는 편집자의 벤더가 추가 개입하지 않고 최종 사용자와 같이 관심 있는 제3자가 제공하는 서버의 배포와 개발을 가능하게 한다.[citation needed]
LSP는 프로그래밍 언어에 제한되지 않는다.규격이나[7] 도메인별 언어(DSL)와 같은 모든 종류의 텍스트 기반 언어에 사용할 수 있다.[8]
기술 개요
사용자가 언어 서버 프로토콜 실행 도구를 사용하여 하나 이상의 소스 코드 파일을 편집할 때, 이 도구는 언어 서버가 제공하는 언어 서비스를 소비하는 클라이언트 역할을 한다.도구는 텍스트 편집기 또는 IDE일 수 있으며 언어 서비스는 리팩터링, 코드 완료 등이 가능하다.
클라이언트는 사용자가 파일을 열고 특정 텍스트 위치에 문자를 삽입하는 등의 작업을 서버에 알려준다.또한 클라이언트는 텍스트 문서에 지정된 범위를 포맷하는 등의 언어 서비스를 수행하도록 서버에 요청할 수 있다.서버는 클라이언트의 요청에 적절한 응답으로 응답한다.예를 들어 서식 요청은 서식 있는 텍스트를 클라이언트로 전송하는 응답이나 오류에 대한 세부 정보를 포함하는 오류 응답으로 응답한다.
Language Server Protocol은 클라이언트와 Language Server 간에 교환할 메시지를 정의한다.HTTP와 유사한 헤더가 선행하는 JSON-RPC이다.메시지는 서버 또는 클라이언트에서 발생할 수 있다.
프로토콜은 요청, 응답 및 통지가 클라이언트와 서버 간에 어떻게 전송되는지에 대한 어떠한 규정도 만들지 않는다.예를 들어 클라이언트와 서버는 메서드 호출을 통해 JSON 문자열을 교환하는 동일한 프로세스 내의 구성요소가 될 수 있다.그것들은 또한 네트워크 소켓을 통해 통신하는 같은 기계나 다른 기계에 있는 다른 과정일 수 있다.
레지스트리
Eclipse Foundation이 주최하는 글로벌 언어 서비스 레지스트리는 언어 서버를 공개적으로 사용할 수 있도록 해야 한다.[9]또한 커뮤니티 주도 Langserver.org[10] 또는 마이크로소프트가 관리하는 LSP 호환 구현 목록이 있다.[11]
참조
- ^ Efftinge, Sven; Spönemann, Miro (11 December 2016). "Language Server Protocol Explained". Eclipse Foundation. Retrieved 25 April 2017.
- ^ Krill, Paul (27 June 2016). "Microsoft-backed Language Server Protocol strives for language, tools interoperability". InfoWorld. Retrieved 26 April 2017.
- ^ Handy, Alex (27 June 2016). "Codenvy, Microsoft and Red Hat collaborate on Language Server Protocol". SD Times. Retrieved 26 April 2017.
- ^ "microsoft/language-server-protocol". GitHub. Retrieved 29 March 2021.
- ^ a b Juarez, Seth (12 May 2016). "Anders Hejlsberg on Modern Compiler Construction". Microsoft. Retrieved 22 February 2017.
- ^ Efftinge, Sven (December 2016). "Eclipse Is Learning New Protocols". Retrieved 26 April 2017.
- ^ Tomassetti, Gabriele (16 February 2017). "Why You Should Know the Language Server Protocol". Federico Tomassetti. Retrieved 8 May 2017.
- ^ Neumann, Alexander (1 June 2016). "Xtext 2.11 unterstützt Language Server Protocol" [Xtext 2.11 supports Language Server Protocol]. Heise Developer (in German). Heise Medien. Retrieved 8 May 2017.
- ^ Mohilo, Dominik (28 June 2016). "Polyglott dank Language Server Protocol: Microsoft, Red Hat und Codenvy streben nach der universellen IDE" [Polyglot thanks to the Language Server Protocol: Microsoft, Red Hat and Codenvy are striving for the universal IDE]. Jaxenter (in German). Software & Support Media. Retrieved 8 May 2017.
- ^ "Langserver.org". Langserver.org. Retrieved 8 May 2017 – via Sourcegraph.
- ^ Gamma, Erich (21 January 2019). "Language Servers". Microsoft. Retrieved 25 January 2019 – via GitHub.