당신의 Dev 스택에서 가장 중요한 도구는 들어본 적 없는 것
Source: Dev.to
(번역할 텍스트를 제공해 주시면 한국어로 번역해 드리겠습니다.)
당신이 보는 것 vs. 실제 일어나는 일
“Initializing JS/TS language features…”
VS Code 상태 표시줄에 있는 작은 회전 아이콘은 단순한 로딩 애니메이션이 아닙니다. 편집기의 지능이 뛰는 심장 박동과 같습니다.
- Hover(마우스 오버) 하면 함수의 타입 시그니처를 볼 수 있습니다.
- Ctrl + click 하면 정의로 이동합니다.
- Rename 하면 전체 코드베이스에서 심볼 이름을 일괄 변경합니다.
이 기능들은 마치 VS Code에 내장된 것처럼 보이지만 사실은 그렇지 않습니다. 이 모든 기능은 백그라운드에서 별도로 실행되는 프로그램에서 제공됩니다:
| Feature | Source |
|---|---|
| Hover info | tsserver |
| Go‑to‑definition | tsserver |
| Auto‑completions | tsserver |
| Error squiggles | tsserver |
| Rename refactoring | tsserver |
tsserver는 **Language Server Protocol (LSP)**을 통해 VS Code와 통신하는 언어 서버입니다. VS Code는 단지 메신저 역할을 할 뿐이며, 실제 지능은 다른 곳에 존재합니다.
LSP 이전 시대 (2016년 이전)
- 모든 편집기는 언어 지원을 처음부터 구현해야 했습니다.
- Vim에서 TypeScript를 사용하고 싶나요? Vim용 TypeScript 플러그인을 직접 만들어야 합니다.
- Sublime Text에서 TypeScript를 사용하고 싶나요? 다시 만들어야 합니다.
- 같은 작업을 모든 언어와 모든 편집기마다 반복했습니다.
결과:
- 대부분의 편집기에서 보통 수준의 언어 지원.
- 몇몇 편집기에서는 일부 언어에 대해 훌륭한 지원.
- 개발자들은 우연히 괜찮은 도구를 가진 편집기에 얽매이게 되었습니다.
그것은 느리고, 파편화되며, 중복된 혼란이었습니다.
LSP의 탄생 (2016)
Microsoft는 Language Server Protocol을 다음과 같은 간단한 아이디어로 도입했습니다:
편집기와 언어 인텔리전스를 분리한다.
- 편집기: 텍스트 렌더링, 탭, UI를 담당합니다.
- 언어 서버: 언어별 분석을 제공합니다.
통신은 표준 프로토콜 위에서 JSON 메시지로만 이루어집니다:
// Editor request
{
"method": "textDocument/hover",
"params": {
"textDocument": "...",
"position": { "line": 42, "character": 15 }
}
}
// Language server response
{
"contents": "function processOrder(cart: CartItem[]): Promise"
}
편집기는 TypeScript를 알 필요가 없고, 언어 서버는 어떤 편집기를 사용하는지도 알 필요가 없습니다.
왜 이것이 코드 편집기에게 “HTTP 순간”인지
- HTTP 이전: 브라우저마다 각 서버에 맞는 전용 클라이언트 소프트웨어가 필요했습니다.
- HTTP 이후: 모든 브라우저가 모든 서버와 통신할 수 있게 되어 웹이 폭발적으로 성장했습니다.
LSP는 개발자 도구에 대해 같은 일을 합니다: 하나의 프로토콜, 하나의 생태계.
파워 커플: VS Code + tsserver
tsserver는 아마도 지금까지 만들어진 가장 정교한 언어 서버일 것입니다.- VS Code는 얇고 빠른 LSP 클라이언트로 설계되었습니다.
VS Code에서 TypeScript 프로젝트를 열면 다음을 얻을 수 있습니다:
- 즉시 제공되는 타입 정보.
- 지능형 자동 import.
- 파일 간 리팩터링.
- 실시간 오류 감지 (저장하기 전에도).
이것은 VS Code가 똑똑해서가 아니라, tsserver가 무거운 작업을 수행하고 VS Code가 완벽한 클라이언트 역할을 하기 때문입니다.
통신이 표준화되어 있기 때문에 동일한 tsserver가 Neovim, Helix, Emacs, Sublime 등에서도 동작합니다. VS Code는 단순히 가장 부드러운 클라이언트가 되어 “에디터 전쟁”에서 승리하도록 도왔습니다.
AI 코딩 도구는 역시 LSP 클라이언트일 뿐
Cursor, Continue, GitHub Copilot, Cody, Windsurf 등과 같은 도구들:
- LSP 요청 전송 (예: hover, definition, diagnostics)하여 구조화된 컨텍스트를 얻음.
- 그 컨텍스트를 **대형 언어 모델(LLM)**에 전달.
- 더 스마트한 제안 (리팩토링, 자동 완성 등)을 받음.
AI는 LSP를 대체하지 않으며, 그 위에 구축됩니다. 2016년에 설계된 프로토콜이 이제 AI 코딩 도구를 실제로 유용하게 만드는 컨텍스트를 제공합니다.
TL;DR
- 회전 아이콘은
tsserver가 시작되어 전체 프로젝트를 파싱하고 있다는 표시입니다. - LSP는 편집기를 언어 인텔리전스와 분리하는데, 이는 HTTP가 브라우저와 서버를 분리한 것과 같습니다.
- VS Code의 성공은 최고의 LSP 클라이언트가 최고의 언어 서버와 결합했기 때문입니다.
- 최신 AI 코딩 어시스턴트는 구조화된 이해를 얻기 위해 LSP에 의존합니다.
다음에 로딩 스피너를 볼 때는 현대 개발자 도구를 구동하는 엔진을 목격하고 있는 것입니다. 🚀
The Unsung Hero of Modern Development: Language Server Protocol (LSP)
“가장 혁신적인 인프라는 헤드라인을 장식하는 것이 아니다. 배경에 사라져 버리는, 너무나 눈에 띄지 않고, 너무나 신뢰할 수 있어 존재 자체를 잊게 만든다. 당신이 의존하는 모든 것이 그 위에 구축되어 있다는 것을 깨달을 때까지.”
AI 코딩 도구에 대한 과대 광고는 왜?
- 어떤 LLM이 더 나은 코드를 작성하나요?
- 에이전트가 개발자를 대체할까요?
그 모든 소음 뒤에는 조용히 무거운 작업을 수행하는 9년 된 프로토콜이 있습니다: JSON‑RPC 기반 Language Server Protocol.
What LSP Actually Does
- 라인 47에 있는 사용자와 라인 12에 정의된 사용자가 동일함을 보장합니다.
- 한 파일에서 함수 이름을 바꾸어도 다른 곳에서의 import가 깨지지 않도록 합니다.
- 밀리초 단위로 에이전트에 타입 시그니처를 제공하여 스마트한 제안을 가능하게 합니다.
요약하면, LSP는 코드 인텔리전스를 열린, 조합 가능한 인프라로 전환했습니다—이제는 단일 편집기에 국한되거나 특정 기업에 종속되지 않습니다. 편집기, 플러그인, AI 에이전트가 모두 동등하게 구축할 수 있는 공유 기반이 되었습니다.
Real‑World Impact
- 라고스에 있는 프리랜서 개발자가 Neovim을 사용하면 Google의 스태프 엔지니어가 VS Code를 사용할 때와 동일한 TypeScript 인텔리전스를 얻습니다.
- 완전히 새로운 AI 스타트업도 GitHub Copilot에 동력을 제공하는 동일한 구조화된 코드 이해를 활용합니다.
그것이 LSP가 제공한 것입니다: 편집기와 언어 서버 사이의 연결 고리만이 아니라 코드 인텔리전스를 위한 공공 유틸리티입니다.
Takeaway
다음에 편집기가 마법처럼 코드를 이해하거나 AI 에이전트가 실제로 작동하는 리팩토링을 제안할 때, 상태 표시줄에 있는 작은 로딩 아이콘을 찾아보고 개발자 도구의 HTTP가 조용히 된 2016년 프로토콜에 감사하세요.
제가 자랑스러워하는 프로젝트
- 음성 제어 IDE (16일) – “이제 내 목소리가 편집기다.”
- 애니메이션에서 영감을 받은 VS Code 테마 번들 – “17세기 일본 예술에서 영감을 받음.”
두 프로젝트는 제 GitHub Copilot Competition 제출물에서 확인하실 수 있습니다:
나에 대해
저는 AI 도구, 개발자 워크플로, 그리고 기술이 접근 가능해질 때 누가 권력을 잡는가에 대해 씁니다.
- 📧 구독: Substack 에서 매주 심층 다이브를 받아보세요
- 🐦 팔로우: X (formerly Twitter) 에서 짧은 글과 비하인드 스토리를 확인하세요
읽어 주셔서 감사합니다. 언어 서버 프로토콜이 배경에서 조용히 작동하면서 개발자들의 삶을 더 편하게 만들어 주길 바랍니다.