(→배경) |
|||
13번째 줄: | 13번째 줄: | ||
* 이러한 기능을 지원하려면 IDE가 프로그램 소스와 프로그래밍 언어를 잘 이해해야 한다. | * 이러한 기능을 지원하려면 IDE가 프로그램 소스와 프로그래밍 언어를 잘 이해해야 한다. | ||
* 이러한 이해가 없는 단순 검색·치환 도구는 오류를 발생시킬 수 있다. | * 이러한 이해가 없는 단순 검색·치환 도구는 오류를 발생시킬 수 있다. | ||
* 예를 들어, <code>read</code>라는 메소드 이름을 변경할 때, 부분일치하는 변수 <code>readyState</code>나, 주석에 포함된 | * 예를 들어, <code>read</code>라는 메소드 이름을 변경할 때, 부분일치하는 변수 <code>readyState</code>나, 주석에 포함된 <code>already</code>라는 단어를 교체해서는 안된다. | ||
* 또한 지역변수 이름을 바꿀 때는 같은 이름일지라도 다른 범위에 있는 변수를 변경하면 안된다. | * 또한 지역변수 이름을 바꿀 때는 같은 이름일지라도 다른 범위에 있는 변수를 변경하면 안된다. | ||
31번째 줄: | 31번째 줄: | ||
* 사용자는 언어 서버를 사용하여 다양한 언어에 대한 정교한 지원을 이어갈 수 있다. | * 사용자는 언어 서버를 사용하여 다양한 언어에 대한 정교한 지원을 이어갈 수 있다. | ||
* 언어 서버를 사용하면 편집기 벤더의 부담도 줄어들 수 있다. | * 언어 서버를 사용하면 편집기 벤더의 부담도 줄어들 수 있다. | ||
* LSP의 개념은 프로그래밍 언어에만 국한되지 않고, 스펙 또는 DSL(도메인 특정 언어)과 같은 모든 종류의 텍스트 기반 언어에 적용할 수 있다 | * LSP의 개념은 프로그래밍 언어에만 국한되지 않고, 스펙 또는 DSL(도메인 특정 언어)과 같은 모든 종류의 텍스트 기반 언어에 적용할 수 있다 | ||
==같이 보기== | ==같이 보기== |
2022년 6월 10일 (금) 01:57 판
1 개요
- Language Server Protocol (LSP)
- 언어 서버 프로토콜
- IDE와 프로그래밍 언어별 기능을 제공하는 서버 사이에 사용하는 개방형 JSON-RPC 기반 프로토콜
- 목적: IDE와 독립적으로 프로그래밍 언어 지원을 구현·배포하는 것
- 본래 Microsoft Visual Studio Code 용으로 개발되었는데 현재는 공개 표준이다.
- 스펙은 GitHub 에서 호스팅 및 개발된다.
2 배경
- 최신 IDE는 개발자에게 코드 완성 , 리팩토링 , 기호 정의 탐색 , 구문 강조 표시, 오류 및 경고 표시와 같은 기능을 제공한다 .
- 메소드 이름을 바꾸고 싶은 경우를 생각해보자.
- 각각의 소스코드 파일들을 수작업으로 편집하여 새 이름으로 변경하는 대신, IDE의 리팩토링 기능을 사용하여 자동으로 수행할 수 있다.
- 이러한 기능을 지원하려면 IDE가 프로그램 소스와 프로그래밍 언어를 잘 이해해야 한다.
- 이러한 이해가 없는 단순 검색·치환 도구는 오류를 발생시킬 수 있다.
- 예를 들어,
read
라는 메소드 이름을 변경할 때, 부분일치하는 변수readyState
나, 주석에 포함된already
라는 단어를 교체해서는 안된다. - 또한 지역변수 이름을 바꿀 때는 같은 이름일지라도 다른 범위에 있는 변수를 변경하면 안된다.
- 일반적으로 기존 컴파일러나 인터프리터는 이러한 언어 서비스를 제공하기 어렵다.
- 그 목표가 소스코드를 오브젝트 코드로 변환하거나 코드를 실행하는 것이기 때문이다.
- 한편 언어 서비스는 완전히 작성되지 않은 소스코드도 처리할 수 있어야 한다.
- 편집을 하는 중에는 명령문, 프로시저 등의 입력을 완료하지 않은 경우가 있기 때문이다.
- 소스코드의 변화에 따라 프로그램의 의미도 바뀐다.
- 사용자에게 즉각적인 피드백을 제공하려면, 편집기가 수정된 구문과 의미를 매우 빠르게 평가할 수 있어야 한다.
- Visual Studio Code 개발을 위한 언어 서버 프로토콜의 설계 및 구현 이전에는 대부분의 언어 서비스가 IDE 또는 편집기에 결합되어 있었다.
- LSP가 없는 경우, 언어 서비스는 일반적으로 도구별 확장 API를 사용하여 구현되었다.
- 다른 편집기에 동일한 언어 서비스를 제공하려면 그 편집기의 확장 인터페이스에 맞게 작동하도록 기존 코드를 조정하는 노력이 필요했다.
- 언어 서버 프로토콜을 사용하면 편집기에서 언어 서비스를 분리할 수 있으므로 범용 언어 서버로 활용할 수 있다.
- 사용자는 언어 서버를 사용하여 다양한 언어에 대한 정교한 지원을 이어갈 수 있다.
- 언어 서버를 사용하면 편집기 벤더의 부담도 줄어들 수 있다.
- LSP의 개념은 프로그래밍 언어에만 국한되지 않고, 스펙 또는 DSL(도메인 특정 언어)과 같은 모든 종류의 텍스트 기반 언어에 적용할 수 있다
3 같이 보기
4 참고
편집자 Jmnote
로그인하시면 댓글을 쓸 수 있습니다.