Code Server

작성일:2026.04.17|조회수:6

Code Server

처음 코드 서버를 만들었던 건 아마도 3년쯤 전의 일이다. 맥미니만 있던 탓에 밖에서 개발하는 게 쉽지 않았고, 아이패드로 언제 어디서든 개발을 하고 싶었던 끝에 찾아낸 해결책이었다. 다행히 집에는 Synology NAS가 있었고, Docker를 통해 어렵지 않게 코드 서버를 만들 수 있었다. 문제는 당시의 내가 개발자 해보겠다고 까분지 얼마 안 되었을 때라는 것이었다. 프론트엔드 개발자였던 나는 shell 환경과 Docker 모두 잘 알지 못했고, 나의 코드 서버는 겨우 포트포워딩만 해놓은 수준이었다.

이제는 다르다! 많은 것이 달라졌고 지난 3년 동안 나는 꽤 많이 성장했다. 그래서 그 기념이라고 하기는 뭣하지만, 코드 서버 올리는 방법을 다시 한 번 정리해보고자 한다.

Synology NAS에 코드 서버 올리기

예전에는 이름이 Docker Station이었던 거 같은데, 언젠가부터 Synology의 도커 관련 패키지 이름이 Container Manager로 바뀌었다. 이걸 설치하고 레지스트리에서 linuxserver/code-server 를 다운받아 실행시키면 아래와 같은 화면을 볼 수 있다. 나는 컨테이너 이름으로 code-server로 했고, CPU 우선 순위는 높음, 메모리는 가능한 많이 줬다.

그리고 나서는 포트 설정을 해야한다. 나는 기본적으로 노드 위에서 작업하는 사람이라 3000번이나 3001번 정도 열어두면 큰 문제는 없다.

여기서 말하는 볼륨 설정은 Docker Volume이다. 나는 /docker/code-server.config 를 연결했다.

변수 설정은 DockerFile에서 이제 도커 실행시킬 때 받아다가 쓰기 위해 필요한 것들이다. 나는 늘 아래와 같이 다섯 개의 변수를 추가적으로 할당한다.

변수

TZ

Asia/Seoul

PUID

1000

PGID

1000

PASSWORD

코드 서버에 접근할 때 비밀번호

SUDO_PASSWORD

리눅스 root 비밀번호

이렇게 하고서, 내부 포트랑 외부 포트랑 연결될 수 있도록 공유기나 라우터(사실 같은 말이긴 한데)에서 포트포워딩 해주면 끝이다.

이것 저것 설치

예전에는 nodejs랑 npm만 설치해도 좋았는데, 요즘은 설치할 게 많다. pnpm도 설치해야 하고, bun도 설치해야 한다. 코덱스를 멀쩡하게 쓰려면 opencode랑 oh-my-opencode도 설치해야 한다. 나는 아래의 명령어를 복사해서 한 번에 붙여넣고 돌려버리는 편이다.

SH
// CURL 설치
sudo apt-get install -y curl

// nodejs 설치
cd ~
curl -sL https://deb.nodesource.com/setup_14.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh 
sudo apt-get install nodejs -y

// npm 설치
sudo apt-get install build-essential

// pnpm 설치
export SHELL=/bin/sh
curl -fsSL https://get.pnpm.io/install.sh | ENV=/dev/null SHELL=/bin/sh sh -
echo 'export PNPM_HOME="/config/.local/share/pnpm"' >> ~/.bashrc
echo 'export PATH="$PNPM_HOME:$PATH"' >> ~/.bashrc

// bun 설치
sudo apt-get install -y unzip
curl -fsSL https://bun.sh/install | bash
echo 'export BUN_INSTALL="$HOME/.bun"' >> ~/.bashrc
echo 'export PATH="$BUN_INSTALL/bin:$PATH"' >> ~/.bashrc

// opencode 설치
curl -fsSL https://opencode.ai/install | bash
echo 'export PATH="/config/.opencode/bin:$PATH"' >> ~/.bashrc

// oh-my-opencode 설치
bun x oh-my-opencode install

source ~/.bashrc

글꼴 변경

코드 서버의 기본 글꼴은 시력에 영향을 주는 것이 분명하다. 몇 분만 보고 있어도 시신경이 퇴화하는 것이 느껴진다. 그런 까닭에 커스텀 폰트를 넣어준다. 나는 MapleMono를 주력으로 사용하지만 기분에 따라서는 JetBrainsMono가 쓰고싶어질 때도 있어서 둘 다 넣어준다.

SH
// 폰트 저장 위치
sudo mkdir -p /app/code-server/lib/vscode/out/vs/code/browser/workbench/fonts

// 폰트 옮기기 (synology 쪽으로 넣어서)
sudo cp ~/workspace/JetBrainsMonoNL-Regular.ttf /app/code-server/lib/vscode/out/vs/code/browser/workbench/fonts/
sudo cp ~/workspace/MapleMono-NF-Regular.ttf /app/code-server/lib/vscode/out/vs/code/browser/workbench/fonts/

sudo apt install -y vim
sudo vim /app/code-server/lib/vscode/out/vs/code/browser/workbench/workbench.html
XML
<style>
@font-face {
  font-family: 'JetBrains Mono NL';
  src: url('/static/out/vs/code/browser/workbench/fonts/JetBrainsMonoNL-Regular.ttf') format('truetype');
  font-weight: 400;
  font-style: normal;
}

@font-face {
  font-family: 'Maple Mono NF';
  src: url('/static/out/vs/code/browser/workbench/fonts/MapleMono-NF-Regular.ttf') format('truetype');
  font-weight: 400;
  font-style: normal;
}
</style>
JSON
{
  "editor.fontFamily": "'Maple Mono NF', 'JetBrains Mono NL', monospace",
  "editor.fontLigatures": true
}

결과물

야호

이제 아이패드를 통해 vscode와 유사한 개발환경을 구축할 수 있게 되었고, opencode와 omo를 통해 언제든 OpenAI의 강력한 모델과 함께 코드를 짤 수 있게 되었다.

더 읽어보기

  • 2026.02.02

    Git Worktree

    Git으로 여러 작업을 병렬로 진행하다 보면 브랜치 전환 자체가 비용이 되는 순간이 잦다. 기능 개발 중에 긴급 핫픽스를 처리해야 하거나, PR 리뷰를 위해 다른 브랜치를 실행해 봐야 하는 상황에서 git checkout과 stash를 반복하는 방식은 작업 흐름을 지속적으로 끊는다. 이…

  • 2025.11.05

    Steiger

    FSD(Feature-Sliced Design)는 프론트엔드 아키텍처를 장기적으로 유지하기에 매우 유용한 방법론이다. 레이어와 슬라이스를 명확히 구분하고 의존 방향을 제한함으로써, 프로젝트 규모가 커질수록 코드베이스의 복잡도를 구조적으로 통제할 수 있다. 다만 이 장점은 동시에 부담이…

  • 2025.08.16

    pnpm과 terborepo로 시작하는 모노레포

    최근 개발 현장에서는 여러 프로젝트를 하나의 저장소에서 관리하는 모노레포 구조가 빠르게 확산되고 있다. 모노레포는 여러 패키지를 한 곳에서 관리하기 때문에 공통 코드 재사용이 쉽고, 여러 팀이 동시에 작업하더라도 의존성과 변경 이력을 일관되게 관리할 수 있다는 장점이 있다. 반면, 패키…

  • 2025.02.01

    Pandas

    pandas pandas는 표 형식 데이터를 다루기 위한 파이썬의 대표 도구다. 핵심은 “데이터를 표로 생각한다”는 관점이고, 이를 Series(열)와 DataFrame(표)로 모델링한다. list와 dict로도 데이터를 다룰 수 있지만, 컬럼 단위 연산과 결측치 처리, 그룹화 같은 작…

  • 2026.04.23

    너만의 월남쌈을 싸

    이 포스트의 제목은 유튜브 영상 <너만의 월남쌈을 싸 - 아이네 INE>에서 따왔다. 4월 초부터 @ilokesto 네임스페이스에 속한 거의 모든 라이브러리를 리뉴얼 하고 있다. 이미 deprecated 처리는 끝났고, 새로운 기준 위에서 라이브러리의 구조를 재정의하는 단계를 거치고 있…

  • 2026.04.11

    Trie 자료구조

    문자열 데이터를 다룰 때 단순히 “이 단어가 있나?”만으로는 부족한 순간이 있다. 자동 완성처럼 특정 접두사로 시작하는 후보를 모아야 할 때도 있고, 어떤 키에 값을 두고 빠르게 찾고 싶을 때도 있다. 이럴 때 가장 자연스럽게 떠올릴 수 있는 자료구조가 바로 Trie이다. Trie는 무…

  • 2026.03.19

    Streams API 부록 2. 왜 이미지는 위에서 아래로 나타날까

    웹 페이지에서 이미지를 로드할 때 흥미로운 장면을 종종 볼 수 있다. 이미지가 한 번에 완전히 나타나는 것이 아니라, 위에서 아래로 조금씩 채워지면서 나타나는 경우가 있기 때문이다. 특히 네트워크가 느리거나 이미지가 큰 경우 이런 현상이 더 분명하게 보인다. 마치 이미지가 위쪽부터 스캔…

댓글

댓글을 불러오는 중...