TRENDSHIFT 딥다이브 · 2026-06-20

DevSpace 딥다이브
— ChatGPT를 내 컴퓨터에 안전하게 연결하는 MCP 서버

Waishnav/devspace"ChatGPT(또는 Claude)가 내 진짜 로컬 프로젝트 폴더의 파일을 읽고·고치고·검색하고·명령을 실행하게 해 주는" 셀프호스팅 MCP 서버다. 코드를 클라우드에 올리지 않는다 — 내 컴퓨터에서 서버를 켜고, 내가 통제하는 터널로 노출하고, 나만 아는 비밀번호로 연결을 승인한다. 한마디로 "ChatGPT를 Codex처럼" 만들어, 채팅창에서 실제 내 코드베이스를 다루게 한다. (저장소: Waishnav/devspace · 언어 TypeScript · 패키지 @waishnav/devspace v1.0.1 · 런타임 Node ≥20.12 <27 · 프로토콜 MCP(Streamable HTTP) · 라이선스 MIT · 제작 Waishnav)
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

한 문장으로 이 프로젝트가 뭘 하는지부터.

DevSpace = "ChatGPT에게 내 컴퓨터의 특정 폴더만 안전하게 빌려주는 원격 작업실." 보통 ChatGPT에게 코드를 봐 달라고 하려면 파일을 복사해 붙여넣어야 한다. 길고 번거롭고, 실제로 실행해 볼 수도 없다. DevSpace를 켜면 ChatGPT가 내 진짜 프로젝트 폴더를 직접 열어 파일을 읽고, 코드를 고치고, 검색하고, 테스트·빌드 명령까지 돌린 뒤 "무엇이 바뀌었는지" 보여 준다. 단, 아무 폴더나 되는 게 아니라 내가 허락한 폴더(allowlist)만, 내 비밀번호로 승인한 연결에서만 가능하다.

🔑 한 줄 비유

"원격 기사에게 작업실 열쇠를 딱 한 칸만 쥐여 주기"

실력 좋은 기사(ChatGPT)에게 일을 맡기고 싶은데, 집 전체 열쇠를 줄 순 없다. 그렇다고 부품을 일일이 택배로 보냈다 받았다(복붙) 하면 너무 느리다.

DevSpace는 작업실의 특정 칸만 열리는 열쇠를 만들어, 내가 통제하는 출입구(터널)를 통해 기사에게 건넨다. 출입할 땐 내 비밀번호로 직접 승인해야 하고, 기사는 그 칸 안에서만 도구(읽기·수정·검색·명령 실행)를 쓸 수 있다. 일을 끝내면 "이 부분을 이렇게 바꿨습니다"라고 변경 내역까지 보여 준다. 열쇠 범위·출입구·승인을 전부 내가 쥔다는 게 핵심.

용어
MCP (Model Context Protocol · 모델 컨텍스트 프로토콜)
AI 모델(ChatGPT·Claude 등)이 외부 도구·데이터에 접속하는 표준 규약. "AI를 위한 USB 포트"라고 생각하면 쉽다. DevSpace는 이 규약을 따르는 MCP 서버라서, MCP를 지원하는 어떤 AI 클라이언트든 똑같은 방식으로 내 컴퓨터의 파일 도구에 꽂아 쓸 수 있다. 모델 쪽은 "read_file·edit_file·shell 같은 도구가 있다"는 목록을 받고, 필요할 때 그 도구를 호출한다.
용어
셀프호스팅 (Self-hosted)
남의 클라우드가 아니라 내 컴퓨터/서버에서 직접 돌리는 방식. DevSpace는 내 기계에서 실행되고, 내 파일은 어디로도 업로드되지 않는다. "데이터가 내 손을 안 떠난다"가 셀프호스팅의 핵심 가치 — 보안·프라이버시가 중요한 코드 작업에 잘 맞는다.
용어
터널 (Tunnel) · Codex
터널은 내 컴퓨터의 로컬 서버를 외부에서 접근 가능한 공개 HTTPS 주소로 이어 주는 통로다(Cloudflare Tunnel·ngrok·Tailscale 등). ChatGPT는 클라우드에 있으니, 내 로컬 서버에 닿으려면 이 통로가 필요하다. Codex는 OpenAI의 코딩 에이전트 — DevSpace의 목표는 "ChatGPT를 Codex처럼" 만들어, 채팅에서 실제 내 코드를 다루게 하는 것이다.

정리하면 DevSpace의 핵심 약속은 세 가지다. ① ChatGPT/Claude가 실제 로컬 코드를 읽고 고치고 실행한다(복붙 불필요). ② 코드는 클라우드로 안 올라간다(셀프호스팅). ③ 접근 범위·출입구·승인을 전부 사용자가 통제한다(allowlist + 터널 + Owner 비밀번호). AGENTS.md가 직접 못 박는다 — "보안은 나중에 붙이는 게 아니라 핵심 설계의 일부다."

2왜 주목받는가

"ChatGPT를 진짜 코드에 연결"하려는 수요 + "보안을 기본값으로" 설계.

2025~2026년은 AI 코딩 에이전트가 폭발한 시기다. 하지만 대부분은 "복사-붙여넣기" 또는 "코드를 클라우드에 올리기"에 머물렀다. DevSpace가 주목받는 이유는, 그 사이의 빈칸 — "내 코드는 내 컴퓨터에 두되, ChatGPT가 직접 만지게" — 를 보안 우선으로 채웠기 때문이다. 다섯 가지로 본다.

① "ChatGPT를 Codex로" — 시점이 정확하다

ChatGPT가 앱/MCP를 통해 외부 도구를 쓰는 흐름이 커지면서, "그럼 내 로컬 코드도 직접 다루게 하면?"이라는 자연스러운 수요가 생겼다. DevSpace는 바로 그 다리를 놓는다 — 별도 IDE 플러그인 없이, MCP를 지원하는 호스트라면 어디서든.

② 보안을 "기능"이 아니라 "전제"로 둔다

원격에서 내 컴퓨터에 명령을 실행한다는 건 무서운 일이다. DevSpace는 이를 정면으로 다룬다 — 좁은 파일 allowlist(roots)로 접근 범위를 묶고, Owner 비밀번호 승인 페이지로 연결을 검문하며, 내가 통제하는 터널로만 노출한다. "신뢰하는 코딩 파트너에게 기계 접근권을 주는 것과 같다"고 솔직하게 경고하는 태도도 신뢰를 준다.

③ 검증된 코딩 도구를 재발명하지 않는다

파일 읽기·수정·grep·find·ls·bash 같은 까다로운 코딩 원시기능을 직접 다시 짜지 않고, 성숙한 Pi 코딩 에이전트 SDK(@earendil-works/pi-coding-agent)를 백엔드 어댑터로 쓴다. DevSpace는 그 위에 "원격 MCP 인터페이스 + 보안 + 워크스페이스 관리"라는 자기 가치를 얹는다. 영리한 레버리지다.

④ 워크스페이스 + Git 워크트리 모델

폴더마다 open_workspace를 한 번 호출해 workspaceId를 받고 이후 재사용하는 깔끔한 모델을 쓴다. 게다가 격리된 Git 워크트리로 "병렬 코딩 세션"을 지원해, 여러 작업을 서로 간섭 없이 돌릴 수 있다. AGENTS.md/CLAUDE.md 지침도 자동으로 모델에 전달한다.

⑤ ChatGPT Apps 호환 UI + 변경 미리보기

단순 텍스트 응답을 넘어, ChatGPT Apps 호환 호스트에서 툴 카드·변경 요약 UI를 보여 준다(React로 작성된 src/ui/). "무엇을 바꿨는지" диff를 사람이 검토(review)할 수 있는 체크포인트도 있어, 자율 실행의 불안을 줄인다.

방식ChatGPT가 내 코드를 다루는 법DevSpace와의 차이
복사-붙여넣기코드를 채팅창에 직접 붙임느리고 실행 불가·맥락 제한. DevSpace는 실제 파일을 직접 읽고 실행.
클라우드 코딩 서비스코드를 업체 서버에 올림코드가 외부로 나감. DevSpace는 셀프호스팅(내 컴퓨터에 유지).
IDE 확장(예: 코파일럿)특정 에디터 안에서만에디터에 종속. DevSpace는 MCP 표준이라 ChatGPT·Claude 등 호스트 무관.
DevSpaceMCP 서버로 로컬 폴더를 안전하게 노출로컬 유지 + 보안 통제 + 워크트리 + UI 카드. "ChatGPT를 Codex처럼".
강점
"로컬 유지 + 사용자 통제"라는 어려운 균형을 잡았다

편의(ChatGPT가 직접 코드 작업)와 안전(코드는 로컬, 접근은 내가 통제)을 동시에 노린다. allowlist·비밀번호·터널이라는 세 겹의 통제로 "강력하지만 무섭지 않은" 원격 코딩을 만든다. 성숙한 Pi SDK를 빌려 도구 품질도 확보.

냉정하게 보기
결국 "내 기계에 원격 셸" · 설정 난도 · 초기 버전

아무리 통제를 둬도, 본질은 원격 클라이언트가 내 컴퓨터에서 셸 명령을 실행한다는 것이다 — README도 "연결된 클라이언트를 내 기계에 접근하는 신뢰하는 파트너처럼 대하라"고 경고한다. allowlist를 넓게 잡거나 비밀번호가 새면 위험이 커진다. 또 터널·MCP 클라이언트 설정은 초보자에게 진입장벽이 있고(Windows는 PowerShell/cmd 단독 미지원, Git Bash/WSL 필요), 아직 v1.0대 초기라 빠르게 바뀔 수 있다. "자율 실행"은 편하지만, 그래서 변경 검토 습관이 중요하다.

3기술 스택 전체 지도

package.json · src/ 소스 트리에서 실제로 확인한 구성.

DevSpace는 전부 TypeScript로 짜인 Node 서버다. 역할별로 ⓐ MCP 서버 본체, ⓑ 코딩 도구(Pi SDK), ⓒ 저장소, ⓓ ChatGPT용 UI, ⓔ CLI·보안으로 나뉜다. 핵심은 "직접 만든 부분(보안·워크스페이스·원격 인터페이스)"과 "빌려 온 부분(코딩 원시기능)"의 조합이다.

ⓐ MCP 서버 계층 — 원격으로 도구를 노출

구성요소무엇역할
@modelcontextprotocol/sdkMCP 공식 SDKStreamableHTTPServerTransport로 HTTP 기반 MCP 서버 구현. 도구 등록·호출 처리.
express 5웹 서버 프레임워크/mcp 엔드포인트와 승인 페이지를 띄우는 HTTP 레이어.
zod 4스키마 검증각 도구의 입력 인자(workspaceId·경로 등)를 타입·형식 검증.
@modelcontextprotocol/ext-appsMCP Apps 확장ChatGPT Apps 호환 호스트에 UI 카드를 띄우기 위한 연동.

ⓑ 코딩 도구 계층 — 실제 파일 작업(빌려 온 엔진)

구성요소무엇역할
@earendil-works/pi-coding-agentPi 코딩 에이전트 SDKread·edit·write·grep·find·ls·bash 같은 성숙한 파일 원시기능. DevSpace의 도구 실체.
src/pi-tools.tsPi 도구 래퍼Pi의 결과를 MCP 응답 형식으로 변환하고 허용 경로로 한정(resolveAllowedPath).
src/roots.tsallowlist 해석요청 경로가 허용된 루트 안인지 검사. 보안의 1차 관문.

ⓒ 저장소 계층 — 워크스페이스 상태 기억

구성요소무엇역할
better-sqlite3임베디드 SQLite워크스페이스·체크포인트 상태를 로컬 DB에 저장(외부 DB 불필요).
drizzle-ormTypeScript ORMsrc/db/schema.ts로 테이블 정의, 타입 안전하게 조회.
review-checkpoints.ts변경 스냅샷작업 전/후 상태를 찍어 "무엇이 바뀌었나" diff를 만들 근거.

ⓓ UI 계층 + ⓔ CLI·보안

ChatGPT Apps 호환 호스트에서 보일 툴 카드·변경 요약 UIReact 19로 작성돼 src/ui/에 있고(workspace-app.tsx·review-payload.tsx), vite로 빌드된다. diff 렌더는 @pierre/diffs를 쓴다. 사용자 진입점인 CLI(src/cli.ts)는 @clack/promptsinit 마법사(루트·포트·터널 URL 입력, Owner 비밀번호 생성)와 serve·doctor를 제공한다. 보안은 src/oauth-provider.ts(OAuth 승인 흐름)와 ~/.devspace/auth.json(Owner 자격) 중심이다.

4아키텍처 심화 분석

먼저 전체 그림을 한 장으로 본 뒤, "ChatGPT가 파일을 하나 수정하기까지"를 끝까지 따라간다.

DevSpace의 일은 "원격 AI 클라이언트의 도구 호출을, 허용된 로컬 폴더 안의 실제 파일 작업으로 안전하게 중계하는 것"이다. 큰 그림은 이렇다. (1) 클라우드의 ChatGPT가 (2) 내가 통제하는 터널을 거쳐 (3) 내 컴퓨터의 DevSpace 서버에 닿고, (4) Owner 비밀번호로 승인되면, (5) open_workspace로 허용된 폴더를 열어 workspaceId를 받고, (6) 그 ID로 read/edit/shell 도구를 호출하면 (7) 서버가 allowlist를 검사한 뒤 Pi SDK로 실제 작업을 수행한다. 부품 이름보다 숲을 먼저 보자.

독수리 시점 — 전체 구조 한 장

┌──────────────┐ ┌──────────────────────┐ │ ChatGPT │ │ 내가 통제하는 터널 │ │ (MCP 클라이언트)│──HTTPS─▶│ Cloudflare/ngrok/… │ └──────────────┘ └───────────┬──────────┘ │ /mcp (공개 HTTPS) ▼ ┌────────────────── 내 컴퓨터: DevSpace 서버 (localhost:7676) ─────────────┐ │ │ │ express + StreamableHTTP MCP transport (server.ts) │ │ │ │ │ ├─ ① 인증: Owner 비밀번호 승인 페이지 (oauth-provider · auth.json) │ │ │ │ │ ├─ ② open_workspace(folder) ─▶ roots.ts: folder 가 allowlist 안인가? │ │ │ └─ OK → workspaceId 발급 (+ AGENTS.md · skills 로드) │ │ │ │ │ └─ ③ read/edit/search/shell(workspaceId, …) │ │ └─ resolveAllowedPath 검사 → pi-tools → Pi SDK 실행 │ │ └─ 실제 파일 읽기/수정/명령 (허용 루트 안에서만) │ │ │ │ 상태: better-sqlite3 + drizzle (워크스페이스·review checkpoint) │ └────────────────────────────────────────────────────────────────────────────┘ ▲ 결과 + (ChatGPT Apps 호스트면) React 툴 카드 · 변경 diff 로 응답
용어
workspaceId · roots(allowlist) — 도구 호출의 두 기둥
roots는 사용자가 init 때 정한 "ChatGPT가 열 수 있는 폴더 목록"이다 — 그 밖의 경로는 거부된다(보안 울타리). workspaceIdopen_workspace로 폴더를 한 번 열면 받는 핸들로, 이후 모든 도구 호출에 이 ID를 붙인다. "폴더당 한 번 열고, 그 ID를 재사용"하는 규칙 덕에 매 호출마다 경로를 다시 검증·해석하는 비용과 실수를 줄인다.

흐름 ① — "ChatGPT가 파일 하나를 고치기까지" (해피패스)

사용자가 "이 프로젝트의 버그를 고쳐 줘"라고 했을 때, 막 뒤에서 벌어지는 일을 순서대로 풀면(실제 server.ts의 도구 흐름):

// 사전: devspace init(루트·비번 설정) → 터널 켜기 → devspace serve
1. 연결·승인  ChatGPT가 공개 /mcp 에 접속 → Owner 비밀번호 승인 페이지 통과
2. 워크스페이스 열기  open_workspace("~/myproj") → roots 검사 OK → workspaceId 발급
3. 맥락 로드  AGENTS.md/CLAUDE.md·사용 가능한 skills 를 함께 반환(모델이 먼저 읽음)
4. 탐색       search/grep(workspaceId, "buggyFn") → 의심 파일 위치 찾기
5. 읽기      read_file(workspaceId, "src/x.ts") → 내용 확인
6. 수정       edit_file(workspaceId, oldText→newText) → resolveAllowedPath 검사 후 적용
7. 검증      shell(workspaceId, "npm test") → 테스트 실행
8. 변경 요약  show changes → 작업 전 체크포인트와 diff 비교해 "무엇이 바뀌었나" 카드

핵심 관례 둘. 첫째, 경로는 매번 다시 검문한다 — workspaceId가 있어도 resolveAllowedPath가 "이 경로가 허용 루트 안인가"를 한 번 더 확인한다(이중 잠금). 둘째, 서버 프롬프트가 모델에게 "파일 생성·수정은 shell로 하지 말고 edit/write 도구로 하라"고 명시한다(셸 리다이렉트·sed -i 등 금지). 도구마다 책임을 못 박아, 변경이 추적 가능하고 안전하게 흐르도록 설계했다.

흐름 ② — 워크트리로 "병렬 코딩 세션"

open_workspacemode:"worktree"를 주면, DevSpace가 격리된 Git 워크트리를 만들어(git-worktrees.ts) 그 안에서 작업한다. 같은 저장소를 두고 여러 작업을 서로 간섭 없이 동시에 돌릴 수 있다(예: 한쪽은 기능 개발, 한쪽은 리뷰). 기본은 실제 체크아웃(checkout)이고, 사용자가 "분리된 세션"을 원할 때만 워크트리를 쓴다 — 안전한 기본값 + 필요 시 확장이라는 좋은 패턴이다.

초보자 함정
"open_workspace를 매번 호출"하면 안 된다

도구를 쓸 때마다 open_workspace를 다시 부르고 싶어지지만, 그건 비효율이고 설계 의도에 어긋난다. 폴더당 한 번만 열어 workspaceId를 받고, 이후엔 그 ID를 재사용한다. 다시 여는 건 폴더를 바꾸거나, checkout↔worktree 모드를 바꾸거나, ID가 거부될 때뿐 — 서버 설명도 이 점을 반복해 강조한다.

5디렉토리 구조 해부

복잡성의 대부분은 src/server.ts(1,453줄)에 모여 있다. 큰 것만 본다.

모든 게 src/ 안에 있고, 그중 server.ts가 MCP 서버 + 도구 등록의 심장이다. 나머지는 server가 부르는 부품들 — 보안(roots·oauth), 워크스페이스(workspaces·store·worktrees), 도구(pi-tools), UI(ui/), 저장(db/)로 묶어 보면 길이 보인다.

devspace/ ├── src/ │ ├── server.ts (1453줄) ★ MCP 서버 본체: 도구 등록·요청 처리 │ ├── cli.ts (382줄) init / serve / doctor 명령(@clack/prompts) │ ├── pi-tools.ts Pi SDK 래퍼(read·edit·grep·bash → MCP 응답) │ ├── roots.ts allowlist 해석(resolveAllowedPath) — 보안 관문 │ ├── oauth-provider.ts Owner 비밀번호/OAuth 승인 흐름 │ ├── workspaces.ts 워크스페이스 열기·검증 로직 │ ├── workspace-store.ts 워크스페이스 레지스트리(상태 보관) │ ├── git.ts · git-worktrees.ts Git 연동 · 격리 워크트리(병렬 세션) │ ├── review-checkpoints.ts 작업 전/후 스냅샷 → 변경 diff │ ├── skills.ts 로컬 스킬 폴더 탐색(모델에 노출) │ ├── config.ts·user-config.ts 설정 읽기/쓰기 │ ├── db/ schema.ts·client.ts (sqlite + drizzle) │ └── ui/ React 툴 카드 UI(ChatGPT Apps) │ ├── workspace-app.tsx (595줄) 메인 카드 │ ├── review-payload.tsx 변경 요약 카드 │ └── card-types.ts·*.css·*.html ├── docs/ setup·security·configuration·workflow·gotchas ├── scripts/ dev-server 등 보조 스크립트 ├── AGENTS.md 모델용 프로젝트 지침(보안 원칙 명시) ├── package.json 의존성·스크립트(build:app=vite, test=tsx …) └── vite.config.ts UI 빌드 설정
위치한 줄 역할
src/server.ts모든 것의 중심. MCP 전송·도구 등록(open_workspace·read·edit·shell…)·요청 라우팅.
src/cli.ts사용자 진입점. init(설정 마법사)·serve(서버 실행)·doctor(환경 점검).
src/roots.ts보안의 1차 관문. 요청 경로가 허용 루트 안인지 검사.
src/pi-tools.ts실제 파일 작업의 다리. Pi SDK 도구를 MCP 응답으로 변환.
src/git-worktrees.ts격리 Git 워크트리 생성 — 병렬 코딩 세션의 토대.
src/review-checkpoints.ts변경 전/후 스냅샷으로 "무엇이 바뀌었나" diff를 만든다.
src/ui/workspace-app.tsxChatGPT Apps 호스트에 뜨는 React 툴 카드.
AGENTS.md모델용 지침 + "보안은 핵심 설계"라는 프로젝트 철학.

6학습 포인트 (기술별)

이 레포 한 채로 "MCP 서버 + 원격 보안 + ChatGPT Apps UI"를 한 번에 본다.

DevSpace는 "AI에게 시스템 접근권을 안전하게 주는 법"이라는, 요즘 가장 뜨거운 주제의 살아 있는 예제다. 기술별로 무엇을 건질지 짚는다.

① MCP 서버 만들기 (Streamable HTTP)

AI에게 도구를 노출하는 표준의 실전

@modelcontextprotocol/sdk로 HTTP 기반 MCP 서버를 세우고, open_workspace·read_file 같은 도구를 zod 스키마와 함께 등록하는 전 과정을 server.ts에서 볼 수 있다. "MCP 서버를 어떻게 짜나"의 모범 답안.

실습: server.ts의 도구 등록부를 읽고, 새 읽기 전용 도구(예: file_stat)를 하나 추가해 보기.

② 원격 접근의 보안 설계

allowlist · 승인 · 경로 이중검문

"내 기계에 원격 접근"이라는 위험을 어떻게 다루는지가 핵심 교훈이다. roots.ts의 경로 검문, Owner 비밀번호 승인, "셸로 파일 쓰지 말라"는 도구 책임 분리 — 실전 위협 모델링을 코드로 배운다.

실습: resolveAllowedPath를 읽고, 허용 루트 밖 경로(../ 탈출 시도)가 어떻게 막히는지 추적.

③ 워크스페이스 + Git 워크트리

병렬 세션을 깔끔하게 관리하는 법

"폴더당 한 번 열어 ID 재사용"이라는 상태 관리와, 격리 워크트리로 병렬 작업을 지원하는 설계(git-worktrees.ts)를 본다. 동시성·격리를 실제 Git 기능으로 푸는 실용적 패턴.

실습: mode:"checkout"mode:"worktree"의 차이를 코드로 비교하고, 워크트리가 어디에 생기는지 확인.

④ 성숙한 SDK 레버리지 (Pi)

바퀴를 다시 만들지 않는 어댑터 패턴

까다로운 코딩 원시기능을 직접 짜는 대신 @earendil-works/pi-coding-agent를 어댑터로 감싸는 방식(pi-tools.ts)을 본다. "외부 엔진을 내 인터페이스로 변환"하는 어댑터 패턴의 좋은 예.

실습: toMcpContent가 Pi 결과(텍스트·이미지)를 MCP 형식으로 바꾸는 부분을 읽기.

⑤ ChatGPT Apps UI + 변경 검토

도구 결과를 "사람이 검토 가능한 카드"로

React로 만든 툴 카드(src/ui/)와 변경 diff(review-checkpoints + @pierre/diffs)가 자율 실행의 불안을 어떻게 줄이는지 본다. "AI 작업 결과를 사람이 승인"하는 UX의 실전 예.

실습: review-payload.tsx를 읽고 변경 요약이 어떤 데이터로 렌더되는지 파악.

7시스템 요구사항

GPU 불필요. "Node + Git + Bash"와 "내가 통제하는 터널"이면 충분하다.

DevSpace는 추론 모델이 아니라 중계 서버라 고사양·GPU가 필요 없다. 대신 Node 런타임, Git, Bash 호환 셸, 그리고 외부에서 내 서버에 닿게 할 터널이 필요하다. Windows는 PowerShell/cmd 단독으론 안 되고 Git Bash나 WSL이 있어야 한다.

항목요구사항
Node.js≥20.12 <27 (Node 22 LTS 권장). npm install -g @waishnav/devspace.
Git필수(워크트리·변경 추적). 프로젝트가 Git 저장소면 기능을 100% 활용.
Bash 호환 셸 필요. Win은 Git Bash/WSL/MSYS2/Cygwin(PowerShell·cmd 단독 미지원).
터널공개 HTTPS 노출용 — Cloudflare Tunnel·ngrok·Pinggy·Tailscale Funnel 등(내가 통제).
포트로컬 기본 7676 (엔드포인트 http://127.0.0.1:7676/mcp).
MCP 클라이언트ChatGPT(MCP/Apps 지원) 또는 Claude 등 MCP 호환 호스트.
자격 저장Owner 비밀번호는 ~/.devspace/auth.json에 저장(외부 노출 금지).
GPU불필요.

가장 빠른 점검은 devspace doctor다 — Node·Git·Bash 등 로컬 환경이 준비됐는지 한 번에 확인해 준다. 그다음 devspace init으로 허용 폴더·포트·터널 URL을 정하고 비밀번호를 받은 뒤, 터널을 켜고 devspace serve로 서버를 띄우면 된다.

8직접 해볼 수 있는 실습 과제

"doctor·init"은 10분, "터널 연결·워크트리"는 한나절. 난이도 순으로.

실습 1 난이도 ★☆☆ 입문

설치하고 doctor·init 돌려 보기

npm install -g @waishnav/devspacedevspace doctor로 환경을 점검하고, devspace init으로 허용 폴더 1개·포트·(임시) 터널 URL을 설정한다. 생성된 Owner 비밀번호와 ~/.devspace/auth.json을 확인.

목표: 설정 마법사의 질문(루트·포트·터널)이 무엇을 의미하는지 체감. 보안 기본값 이해.
실습 2 난이도 ★☆☆ 입문

로컬에서 서버 띄우고 엔드포인트 확인

devspace serve로 서버를 켜고 http://127.0.0.1:7676/mcp가 응답하는지 확인한다. 로그에 어떤 도구가 등록됐는지(open_workspace·read_file·shell …) 관찰.

목표: MCP 서버가 실제로 도는 모습 보기. "어떤 도구가 노출되나"를 눈으로 확인.
실습 3 난이도 ★★☆ 중급

터널로 ChatGPT에 실제 연결하기

Cloudflare Tunnel이나 ngrok으로 localhost:7676을 공개 HTTPS로 노출하고, ChatGPT MCP 클라이언트에 https://<터널>/mcp를 등록한다. Owner 비밀번호로 승인한 뒤 "내 프로젝트 열어 줘"를 시켜 본다.

목표: 클라우드 AI ↔ 내 로컬 코드의 전체 연결을 완성. 승인 페이지·allowlist가 실제로 작동함을 확인.
실습 4 난이도 ★★☆ 중급

allowlist 경계 시험 (보안 직접 체감)

허용 루트 밖의 경로(예: 홈 디렉터리 다른 폴더, ../ 탈출)를 읽으라고 요청해 본다. 거부되는 동작과, roots.ts/resolveAllowedPath가 그것을 어떻게 막는지 코드로 대조한다.

목표: "보안 울타리"가 말뿐이 아님을 확인. 경로 검문이 실제로 어떻게 구현됐는지 이해.
실습 5 난이도 ★★★ 고급

워크트리 모드로 병렬 세션 만들기

open_workspacemode:"worktree"로 호출해 격리 세션을 만들고, 같은 저장소에서 두 작업을 동시에 진행해 본다. 워크트리가 어디 생기고, 메인 체크아웃과 어떻게 분리되는지 git worktree list로 확인.

목표: 동시성·격리를 Git 워크트리로 푸는 패턴 습득. 병렬 코딩의 충돌을 어떻게 피하는지 이해.
실습 6 난이도 ★★★ 고급

새 MCP 도구 추가하기

server.ts의 도구 등록 패턴을 따라, 읽기 전용 도구(예: "프로젝트 트리 요약")를 zod 스키마와 함께 추가하고 Pi/직접 구현으로 결과를 만든다. 빌드 후 클라이언트에서 호출해 본다.

목표: MCP 서버를 직접 확장. 도구 등록→스키마→실행→응답의 한 사이클을 손에 익히기.

9관련 기술 심화 학습 로드맵

DevSpace를 100% 소화하기 위한 6주 코스(주당 5~7시간 가정).

주차주제학습 자료 / 할 일
1주차MCP 기초MCP가 무엇이고 도구/리소스가 어떻게 노출되는지. 공식 문서 + DevSpace 설치·doctor. 실습 1·2.
2주차터널 · 원격 연결Cloudflare Tunnel/ngrok 개념, HTTPS 노출. ChatGPT에 실제 연결. 실습 3.
3주차원격 접근 보안roots.ts·oauth-provider.ts 정독. 위협 모델·경로 검문 이해. 실습 4.
4주차MCP 서버 내부server.ts의 도구 등록·요청 처리 흐름 추적. zod 스키마 패턴.
5주차워크스페이스 · Git 워크트리workspaces.ts·git-worktrees.ts 읽기. 병렬 세션 실습. 실습 5.
6주차도구 확장 · UI 카드새 도구 추가(실습 6) + src/ui/ React 카드·diff 구조 이해.

10핵심 키워드 사전

이 문서와 레포에 등장한 용어를 한자리에.

용어의미
DevSpaceChatGPT/Claude가 내 로컬 코드를 안전하게 다루게 하는 셀프호스팅 MCP 서버.
MCPModel Context Protocol. AI가 외부 도구·데이터에 접속하는 표준 규약("AI용 USB 포트").
Streamable HTTPMCP의 HTTP 기반 전송 방식. DevSpace 서버가 /mcp로 이를 노출.
셀프호스팅남의 클라우드가 아닌 내 컴퓨터에서 직접 실행. 코드가 외부로 안 나감.
터널(tunnel)로컬 서버를 공개 HTTPS로 잇는 통로(Cloudflare·ngrok 등). 사용자가 통제.
CodexOpenAI의 코딩 에이전트. DevSpace의 목표는 "ChatGPT를 Codex처럼".
roots(allowlist)ChatGPT가 열 수 있는 폴더 목록. 그 밖 경로는 거부 — 보안 울타리.
workspaceIdopen_workspace로 폴더를 열면 받는 핸들. 이후 도구 호출에 재사용.
open_workspace폴더를 작업공간으로 여는 도구. AGENTS.md·skills도 함께 로드.
Owner 비밀번호연결 승인용 자격. init이 생성, ~/.devspace/auth.json에 저장.
Pi SDK@earendil-works/pi-coding-agent. read·edit·grep·bash 등 파일 원시기능 제공.
resolveAllowedPath요청 경로가 허용 루트 안인지 매 호출 재검문하는 함수(이중 잠금).
Git 워크트리같은 저장소의 격리 작업 디렉터리. 병렬 코딩 세션을 충돌 없이 지원.
review checkpoint작업 전/후 상태 스냅샷. "무엇이 바뀌었나" diff의 근거.
ChatGPT AppsChatGPT 안에서 앱 UI(툴 카드 등)를 띄우는 체계. DevSpace는 React로 카드 제공.
AGENTS.md / CLAUDE.md프로젝트별 모델 지침 파일. open_workspace가 자동 로드해 모델에 전달.
doctor / init / serveDevSpace CLI 명령: 환경점검 / 초기설정 / 서버실행.

11참고 링크

원문·문서·관련 기술 더 파기.