Ollama과 Self-hosting DeepSeek으로 간단한 VS Code Extention 만들기
설 연휴를 떠들썩하게 만든 DeepSeek 논란
DeepSeek는 중국의 AI 스타트업이 개발한 오픈소스 기반의 대규모 언어모 델(LLM)입니다. GPT-4와 유사한 기능을 제공하면서도 훨씬 낮은 비용으로 개발되었다는 점에서 큰 주목을 받고 있습니다.
한편 DeepSeek는 개인정보 유출 우려로 여러 국가에셔 경계의 대상이 되고 있습니다. DeepSeek의 개인정보 보호 정책에 따르면, 사용자 데이터는 중국 내 서버에 저장되며, 이는 중국 법률의 적용을 받습니다.
이러한 데이터 처리 방식으로 인해 사용자 정보가 중국 정부에 유출될 수 있다는 우려가 제기되고 있습니다.
그렇다면 로컬 환경에서 DeepSeek를 사용해볼까?
DeepSeek를 로컬 환경에서 실행하면 데이터 유출 위험은 최소화 할 수 있습니다. 로컬 실행은 데이터를 외부 서버로 전송하지 않고, 모든 처리를 사용자의 컴퓨터에서 수행하기 때문에 데이터 프라이버시와 보안 문제는 걱정이 없겠죠.

fireship youtube 영상을 따라 만든 DeepSeek 챗봇 VS Code Extension
마침 제가 즐겨보는 fireship이라는 개발 관련 컨텐츠 유투버가 해당 예제를 올리길래 재빠르게 따라해보았습니다.
VS Code Extension 인터페이스에서 로컬 AI 서버 API와 통신하는 예제를 따라하며 Ollama, VS Code Extension API에 대해 간단히 배워보세요.
원본 링크 https://youtu.be/clJCDHml2cA
Ollama, 로컬에서 LLM을 실행하기 위한 툴
Ollama는 로컬 환경에서 대규모 언어 모델(LLM)을 실행할 수 있도록 설계된 플랫폼 또는 툴입니다. 주로 개인 사용자가 자신의 하드웨어에서 언어 모델을 실행하여 데이터 프라이버시를 보장하고, 클라우드 의존도를 줄이는 데 초점이 맞춰져 있습니다.
Ollama의 주요 특징
- 데이터 프라이버시: 모든 작업이 로컬에서 이루어지므로 민감한 데이터가 외부로 유출되지 않습니다.
- 비용 절감: 클라우드 비용 없이 로컬 자원을 활용.
- 성능 최적화: 로컬 하드웨어에 맞게 최적화된 모델 제공.
- 오픈소스 친화적: 다양한 오픈소스 모델과 호환 가능.
Ollama 설치

링크에 들어가 본인의 운영 체제에 맞는 설치 파일을 받으시면 됩니다.
설치하게 되면 자동으로 ollama CLI 툴을 설치하게 됩니다.

이제 원하는 AI 모델을 pull 받아서 실행할 수 있게 됩니다.
Ollama로 원하는 AI 모델 Pull 받기

위 페이지에서 마치 도커 이미지처럼 원하는 모델을 찾습니다.

저는 deepseek-r1:7b 모델을 선택했습니다.
특정 태그를 선택하면 우측에 CLI 명령어를 복사할 수 있는 UI가 보이는데, 이걸 로컬 TTY 콘솔에서 실행합니다.
$ ollama run deepseek-r1
명령어를 입력하면 해당 모델을 다운로드 받은 후 CLI에서 프롬프트를 직접 띄워줍니다.
여기서 직접 질문, 답변을 할 수도 있지만 우리의 목적은 VS Code Extension을 호스트로 해서 통신을 주고받기 위함이므로 다음 스텝으로 넘어갑니다.
VS Code Extension 프로젝트 개발을 위한 초기 환경 설정(스캐폴딩)
Yeoman(yo)는 프로젝트 템플릿을 자동으로 생성해주는 도구입니다.
VS Code 확장 프로그램을 만들 때, generator-code 템플릿을 사용하면 필요한 파일과 폴더 구조를 자동으로 생성할 수 있습니다.
npx --package yo --package generator-code -- yo code
위 명령어를 실행하면, VS Code 확장 개발을 위한 기본 프로젝트가 자동으로 생성되며, 확장 유형과 설정을 선택할 수 있는 마법사가 실행됩니다.
이를 통해 확장 개발을 빠르게 시작할 수 있습니다.
위와 같이 대화형 프롬프트가 나타나 어떤 익스텐션을 만들 것인지 차례대로 설정할 수 있습니다.
셋업이 완료되면 우리가 흔히 보던 npm 패키지 프로젝트가 생성됩니다. extension.ts가 VS Code Extension을 실행했을때 제일 처음 도달하는 진입점이 됩니다.