TRENDSHIFT 딥다이브 · 2026.06.02

Odysseus 딥다이브
— 내 컴퓨터 위에 통째로 올리는 self-hosted AI 워크스페이스

ChatGPT·Claude의 웹 UI 경험을, 내 하드웨어·내 데이터 위에서 그대로 재현하는 오픈소스 프로젝트. 채팅만이 아니라 에이전트·딥리서치·모델 비교·문서편집·메모리/스킬·이메일·캘린더·노트/할일까지 한 앱에 다 들어있다. local-first · privacy-first를 내세우고, 로컬 모델(vLLM·llama.cpp·Ollama)과 API(OpenAI·OpenRouter)를 자유롭게 꽂는다. 백엔드는 FastAPI, 프런트는 순수 JavaScript, 벡터 메모리는 ChromaDB, 검색은 자체 SearXNG로 돌린다. 가중치가 아니라 코드 전체가 AGPL-3.0-or-later (오픈소스 의무). (저장소: pewdiepie-archdaemon/odysseus · ★ 12.6k · TrendShift 데일리 1위 · 2026 신규)
목차
  1. 한줄 요약
  2. 왜 지금 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 하드웨어·시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1한줄 요약

한 문장으로 무엇을 하는 프로젝트인가
한 문장 정리

"클라우드 구독 없이 — 채팅·에이전트·딥리서치·이메일·캘린더·문서·메모리를 한 화면에 모은 'AI 운영체제'를, FastAPI + 순수 JS로 짜서 도커 한 방으로 내 PC/홈서버에 통째로 띄우는 자가호스팅 워크스페이스."

흔한 "오픈소스 ChatGPT 클론"은 채팅창 하나가 거의 전부다. Odysseus는 거기서 더 나아가 일을 실제로 처리하는 도구(이메일 자동분류, 캘린더 동기화, 할일/예약작업, 문서 편집, 하드웨어에 맞는 모델 추천·다운로드·서빙)까지 한 앱에 묶었다. README의 표현을 빌리면 "더 거칠지만(jank) 더 재미있는" 셀프호스팅 버전이다.

친숙한 비유

상용 AI 서비스는 "고급 호텔"이다. 편하지만 내 데이터는 호텔 서버에 맡겨야 하고, 매달 방값(구독료)을 낸다. 메뉴(기능)도 호텔이 정한다.

Odysseus는 "내 집에 직접 차린 풀옵션 작업실"이다. 도커로 한 번 올려두면, 어떤 LLM을 쓸지·메일과 캘린더를 어떻게 붙일지·에이전트에게 셸을 줄지 전부 내가 정한다. 데이터(data/ 폴더)는 내 디스크에만 남고, 인터넷에 노출할지조차 내 선택이다.

2왜 지금 주목받는가

트렌딩 이유와 기존 셀프호스팅 AI 도구 대비 차별점
먼저 알아둘 용어
셀프호스팅 (Self-hosting)
남의 클라우드 서버가 아니라 내가 관리하는 컴퓨터(내 PC·홈서버·NAS·VPS)에 소프트웨어를 직접 올려서 쓰는 방식. 데이터 주권·프라이버시·비용 통제가 장점, 설치/유지보수 부담이 단점이다. Odysseus는 "AI 작업 환경 전체"를 셀프호스팅 대상으로 삼는다.

1. "채팅 클론"이 아니라 "워크스페이스" — 일이 실제로 돌아간다

오픈소스 LLM UI는 많지만(Open WebUI, LibreChat 등) 대부분 채팅 + 약간의 RAG에 머문다. Odysseus는 채팅을 출발점으로 두되, 그 위에 에이전트·딥리서치·이메일·캘린더·노트/할일·문서편집·모델 서빙을 한 묶음으로 올려 "AI로 하루 업무를 처리하는 공간"을 지향한다.

기존 셀프호스팅 챗 UI의 한계
"예쁜 채팅창"에서 멈춤

모델을 붙여 대화는 잘 되지만, 메일을 분류하거나 일정에 약속을 넣거나 예약 작업을 돌리는 등 실제 업무 행위는 별도 도구로 흩어진다. 에이전트가 있어도 "도구"가 빈약해 데모 수준에 그치는 경우가 많다.

Odysseus의 접근
한 앱 안에 도구를 가득 채운 에이전트 허브

에이전트가 웹·파일·셸·스킬·메모리 + MCP 서버를 도구로 쥐고 작업 전체를 스스로 굴린다. 이메일은 IMAP/SMTP로 직접 받아 AI가 긴급도 태깅·요약·답장 초안까지 만들고, 캘린더는 CalDAV로 Nextcloud·Apple·Fastmail과 동기화된다. 도구가 풍부하니 에이전트가 "데모"를 넘어 쓸모를 갖는다.

2. Cookbook — 내 GPU를 스캔해 "돌아갈 모델"을 추천·다운로드·서빙

로컬 LLM의 가장 큰 벽은 "내 그래픽카드로 뭘 돌릴 수 있지?"다. Odysseus의 Cookbookllmfit을 기반으로 하드웨어(VRAM)를 스캔하고, GGUF/FP8/AWQ 양자화별로 fit 점수를 매겨 "이 카드엔 이 모델"을 추천한다. 클릭하면 받아서 vLLM·llama.cpp로 바로 서빙까지 해준다.

왜 중요한가

지금까지는 사용자가 직접 모델 카드를 뒤지고, 양자화 종류를 고르고, 서빙 엔진 옵션을 맞춰야 했다. Cookbook은 이 "모델 고르기 → 받기 → 띄우기" 3단계를 하드웨어 인식 기반으로 자동화한다. 초보자가 로컬 LLM에 진입하는 마찰을 크게 줄인 게 트렌딩의 핵심 동력 중 하나다.

3. 거인의 어깨 위에 영리하게 조립

Odysseus는 모든 걸 바닥부터 만들지 않고, 검증된 오픈소스를 모듈로 흡수했다. 에이전트 코어는 opencode, 하드웨어 적합도는 llmfit, 딥리서치는 알리바바의 Tongyi DeepResearch를 각색했다. "통합이 곧 가치"라는 전형적인 슈퍼앱 전략이다.

4. 화제의 저장소 이름과 "셀프호스팅 르네상스"

저장소 소유 계정명 pewdiepie-archdaemon은 2025년을 달군 개인 셀프호스팅·로컬 AI 붐의 밈을 그대로 얹은 핸들이다. ("no trojan"·돛단배 ASCII아트 같은 유쾌한 톤이 README 전반에 깔려 있다.) 유명 유튜버 본인이 만들었다는 근거는 저장소에 없으므로, 정확히는 "그 흐름의 정서를 입은 익명/필명 프로젝트"로 보는 게 맞다. 다만 이름값과 별개로, 12.6k 스타·1.6k 포크가 보여주듯 결과물 자체의 완성도가 높다.

3기술 스택 전체 지도

백엔드 · 프런트엔드 · 인프라를 각각 뜯어보기

언어 비중은 Python 49% · JavaScript 40% · CSS 8% · HTML 2%. 즉 "FastAPI 백엔드 + 빌드 도구 없는 순수 JS 프런트"라는 의외로 클래식한 조합이다. 프레임워크 의존을 최소화해 도커 한 방으로 가볍게 뜨는 걸 노렸다.

백엔드 — Python / FastAPI

분류라이브러리역할
웹 프레임워크fastapi · uvicorn비동기 API 서버. app.py가 진입점
데이터 검증pydantic · pydantic-settings요청/설정 스키마, 타입 안전성
DB / ORMSQLAlchemy (기본 SQLite)세션·메시지·문서 저장. DATABASE_URL로 교체 가능
HTTP 클라이언트httpxLLM 백엔드·외부 API 비동기 호출
벡터 메모리chromadb-client · fastembed의미 기반 메모리/RAG. 로컬 ONNX 임베딩(외부 API 불필요)
에이전트/도구mcp (Model Context Protocol SDK)외부 도구를 표준 프로토콜로 연결
이메일표준 imaplib/smtplib 기반 라우트IMAP 수신 · SMTP 발신 + AI 분류/요약
캘린더caldav · icalendarCalDAV 동기화, .ics 가져오기/내보내기
예약 작업cronitercron 스타일 스케줄 작업(에이전트가 실행)
보안/인증bcrypt · cryptography · pyotp · qrcode비밀번호 해시 · 암호화 · TOTP 2FA · QR 발급
문서 처리pypdf · beautifulsoup4 · markdownPDF 추출 · HTML 파싱 · 리포트 렌더
유튜브youtube-transcript-api영상 자막을 컨텍스트로 끌어오기
SDK@anthropic-ai/sdk (package.json)Anthropic 모델 연동(JS 측)
테스트pytest · @antithesishq/bombadil단위 테스트 + Antithesis 결정론적 시뮬레이션 테스트
눈여겨볼 선택
fastembed (로컬 ONNX 임베딩)
메모리/RAG의 "의미 검색"에 보통 OpenAI 임베딩 API를 쓰지만, Odysseus는 fastembed로 임베딩을 로컬에서 ONNX로 돌린다. 외부에 텍스트를 보내지 않아도 벡터 검색이 되므로 "privacy-first" 원칙과 맞물린다. 만약 의존성이 빠지면 키워드 검색으로 graceful하게 강등(fallback)된다.

프런트엔드 — 빌드리스(Build-less) 순수 JavaScript

React·Vue 같은 프레임워크나 Webpack/Vite 같은 번들러가 없다. static/index.html + app.js + style.css + 모듈화된 js/ 폴더로 구성된 클래식 SPA에 가깝다. 덕분에 빌드 단계 없이 파일만 서빙하면 되고, 도커 이미지가 가벼워진다.

왜 빌드리스로 갔을까

요즘 웹은 거의 다 React + 번들러인데, Odysseus는 일부러 "파일 그대로 서빙"을 골랐다. 셀프호스팅 사용자가 코드를 열어 고치기 쉽고(트랜스파일 불필요), 컨테이너가 단순해지며, "내가 통제하는 소프트웨어"라는 철학과도 맞는다. 단점은 대규모 상태관리가 번거로워진다는 것 — 그래서 프런트가 전체 코드의 상당 부분(JS 40%)을 차지할 만큼 손으로 많이 짜야 했다.

인프라 — Docker Compose 4종 묶음

핵심은 docker compose up -d --build 하나로 앱 + 부속 서비스 3개가 한꺼번에 뜨는 구조다.

서비스이미지/포트역할
odysseus자체 빌드 · :7000FastAPI 본체. data/·logs/·SSH키·HF캐시를 호스트에 볼륨 마운트
chromadbchromadb/chroma · :8100→8000벡터 메모리 저장소(텔레메트리 끔)
searxngsearxng/searxng · 127.0.0.1:8080자체 메타 검색 엔진(웹/딥리서치용). 기본 LAN 미노출
ntfybinwiederhier/ntfy · :8091푸시 알림(노트 핑·작업 알림 채널)
도커 디테일
PUID/PGID + gosu 엔트리포인트
컨테이너가 root로 돌면 호스트의 data/ 폴더에 root 소유 파일을 써서, 나중에 일반 사용자가 못 고치는 EPERM 사고가 난다. Odysseus의 엔트리포인트는 gosuPUID/PGID(기본 1000:1000)로 권한을 떨군 뒤 uvicorn을 실행하고, 마운트된 폴더의 소유권을 맞춰준다. 셀프호스팅에서 흔히 데는 함정을 미리 막은 설계.

이미지는 python:3.14-slim 기반에 build-essential·cmake·git(Cookbook이 첫 실행 때 llama.cpp를 빌드), tmux(백그라운드 다운로드/서빙), openssh-client(원격 서버 서빙), nodejs/npm(브라우저 MCP용 npx)을 깐다. GPU는 docker/gpu.nvidia.yml · gpu.amd.yml 오버레이를 COMPOSE_FILE에 추가해 켠다.

4아키텍처 심화 분석

시스템 구조도와 핵심 설계 패턴

전체 시스템 구조도

┌──────────────────────────────────────────────────────────────┐ │ 브라우저 / 모바일 (PWA, 빌드리스 Vanilla JS) │ │ static/index.html + app.js + style.css + js/ │ └───────────────────────────────┬──────────────────────────────┘ │ HTTP (:7000) ┌───────────────────────────────▼──────────────────────────────┐ │ app.py · FastAPI + uvicorn │ │ core/ 인증(bcrypt·pyotp 2FA)·미들웨어·세션·SQLAlchemy(SQLite) │ ├───────────────────────────────────────────────────────────────┤ │ routes/ (54개 엔드포인트 모듈) │ │ chat · agent · document · memory · cookbook · email · │ │ calendar · shell · mcp · vault · webhook · task · tts/stt ... │ ├───────────────────────────────────────────────────────────────┤ │ src/ (95개 이상 코어 로직) │ │ llm_core · agent_loop · agent_tools · chat_processor · │ │ deep_research · mcp_manager · context_compactor · │ │ prompt_security · rag_* · memory_vector · embeddings ... │ ├───────────────────────────────────────────────────────────────┤ │ services/ (도메인 서비스 묶음) │ │ hwfit(Cookbook) · memory(skill_extractor) · research · │ │ search(providers·ranking·cache) · shell · stt · tts · youtube │ └───┬────────────┬─────────────┬─────────────┬─────────────────┘ │ │ │ │ ▼ ▼ ▼ ▼ LLM 백엔드 ChromaDB SearXNG ntfy vLLM (벡터 메모리) (메타 검색) (푸시 알림) llama.cpp fastembed Ollama (ONNX 임베딩) OpenRouter │ OpenAI ▼ └──────► mcp_servers/ email · image_gen · memory · rag + 외부 MCP(@playwright/mcp 등)

핵심 설계 패턴 ① — 계층 분리: routes → src → services

코드가 3층으로 깔끔히 나뉜다. routes/는 HTTP 입출력(얇은 컨트롤러), src/는 에이전트 루프·LLM 호출 같은 코어 로직, services/는 검색·메모리·하드웨어적합도 같은 도메인 기능을 캡슐화한다. 덕분에 "검색 제공자를 바꾸기"나 "메모리 백엔드 교체" 같은 변경이 한 폴더 안에 갇힌다.

배울 점
관심사 분리(Separation of Concerns)

54개 라우트 파일이 도메인별로 쪼개져 있어(email_routes.py·cookbook_routes.py…), 한 파일이 비대해지지 않는다. FastAPI의 APIRouter로 모듈을 합치는 전형적 모범 사례 — 중대형 FastAPI 앱 구조를 공부하기에 좋은 표본이다.

핵심 설계 패턴 ② — MCP 기반 도구 연결 + 내장 MCP 서버

에이전트의 도구는 MCP(Model Context Protocol)로 표준화돼 붙는다. Odysseus는 외부 MCP를 등록할 뿐 아니라, mcp_servers/이메일·이미지생성·메모리·RAG 서버를 직접 내장한다. 브라우저 제어(페이지 이동·스크린샷·비전)는 @playwright/mcp를 npx 캐시에 있을 때만 자동 등록 — 없으면 건너뛰고 로그만 남겨, 신규 설치가 수 분짜리 npm 다운로드에 멈추지 않게 했다.

핵심 설계 패턴 ③ — Graceful Degradation(우아한 강등)

벡터 메모리(ChromaDB/fastembed)가 없으면 키워드 검색으로 자동 강등되고, 브라우저 MCP 패키지가 없으면 그 도구만 빠진 채 나머지가 정상 동작한다. "의존성 하나 빠졌다고 앱 전체가 죽지 않는다"는 셀프호스팅 친화적 견고함이 곳곳에 박혀 있다.

보안 설계 — "관리자 콘솔처럼 다뤄라"
셸·파일·모델다운로드·메일·토큰을 쥔 강력한 앱

Odysseus는 셸 접근·파일 업로드·웹 리서치·메일/캘린더·API 토큰을 모두 가진다. 그래서 AUTH_ENABLED=true 유지, 공개 인터넷 직노출 금지(HTTPS 리버스 프록시 필수), 비관리자는 셸/파이썬/파일 권한 기본 차단, MCP관리·토큰·웹훅·백업은 admin 전용 게이팅 — 권한 모델이 촘촘하다. 셀프호스팅 시 가장 먼저 읽어야 할 부분이다.

5디렉토리 구조 해부

주요 폴더/파일이 각각 무슨 일을 하는가
odysseus/ ├── app.py # FastAPI 진입점 (모든 라우터 조립) ├── setup.py # 첫 부팅 설정(관리자 비번 생성 등) ├── docker-compose.yml # odysseus + chromadb + searxng + ntfy ├── Dockerfile # python:3.14-slim + 시스템 deps ├── requirements.txt # 코어 파이썬 의존성 ├── package.json # @anthropic-ai/sdk + Antithesis 테스트 ├── core/ # 인프라 계층 │ ├── auth.py # 인증·세션·권한 │ ├── database.py # SQLAlchemy 엔진/세션 │ ├── middleware.py # 요청 미들웨어 │ ├── session_manager.py # 사용자 세션 관리 │ └── atomic_io.py # 원자적 파일 쓰기(데이터 손상 방지) ├── routes/ (54 파일) # HTTP 엔드포인트(도메인별 APIRouter) │ ├── chat_routes.py # 채팅 │ ├── cookbook_routes.py # 하드웨어 스캔·모델 추천/서빙 │ ├── email_routes.py # IMAP/SMTP + AI 트리아지 │ ├── calendar_routes.py # CalDAV 동기화 │ ├── shell_routes.py # 에이전트 셸 도구 │ ├── mcp_routes.py # MCP 서버 관리(admin) │ ├── vault_routes.py # 비밀/백업 금고 │ └── ... (memory·model·research·task·tts·stt·webhook ...) ├── src/ (95+ 파일) # 코어 로직 │ ├── llm_core.py # LLM 추상화(여러 백엔드 통합) │ ├── agent_loop.py # 에이전트 실행 루프 │ ├── agent_tools.py # 에이전트 도구 정의 │ ├── deep_research.py # 다단계 리서치(Tongyi 각색) │ ├── mcp_manager.py # MCP 등록/수명주기 │ ├── context_compactor.py# 긴 대화 컨텍스트 압축 │ ├── prompt_security.py # 프롬프트 인젝션 방어 │ ├── memory_vector.py # 벡터 메모리 │ └── rag_*.py # RAG 파이프라인 ├── services/ # 도메인 서비스(캡슐화) │ ├── hwfit/ # Cookbook 핵심(하드웨어 적합도·fit 점수) │ │ ├── hardware.py # VRAM/장치 스캔 │ │ ├── fit.py # 모델↔하드웨어 적합도 계산 │ │ └── data/hf_models.json # 추천 모델 카탈로그 │ ├── memory/ # 메모리 + 스킬 추출 │ │ ├── skill_extractor.py # 대화에서 재사용 스킬 추출 │ │ └── memory_vector.py │ ├── search/ # 자체 검색 스택 │ │ ├── providers.py · ranking.py · cache.py │ ├── research/ · shell/ · stt/ · tts/ · youtube/ · docs/ · faces/ ├── mcp_servers/ # 내장 MCP 서버 │ ├── email_server.py · image_gen_server.py │ ├── memory_server.py · rag_server.py ├── static/ # 프런트엔드(빌드 없음) │ ├── index.html · app.js · style.css · js/ ├── config/searxng/ # SearXNG 설정(settings.yml) ├── docker/ # entrypoint.sh + gpu.nvidia/amd.yml ├── docs/ # 랜딩 페이지(index.html) + 미리보기 클립 └── data/ (gitignored) # 모든 사용자 데이터가 여기 (아래 참조)
데이터 보관 위치
data/ 폴더 (Git에서 제외)
app.db(세션·메시지·문서) · memory.json · presets.json · settings.json · uploads/ · personal_docs/ · chroma/가 전부 이 한 폴더에 모인다. 백업은 이 폴더만 챙기면 되고, .gitignore로 막혀 있어 포크를 공개해도 개인 데이터가 새지 않는다. "내 데이터는 내 디스크에" 원칙의 물리적 구현.

6학습 포인트 (기술별)

이 레포에서 무엇을, 어떻게 배울 수 있는가

① 중대형 FastAPI 앱 구조

54개 라우트를 APIRouter로 모듈화하고, core/에 인증·DB·미들웨어를 모은 구조는 "FastAPI 프로젝트를 어떻게 키우는가"의 살아있는 교과서다.

실습 아이디어: routes/note_routes.py 하나를 골라 요청 → src 로직 → services 호출 → 응답까지 한 흐름을 따라가며 호출 그래프를 그려보기.

② LLM 백엔드 추상화 (멀티 프로바이더)

src/llm_core.py + endpoint_resolver.py + model_discovery.py가 vLLM·llama.cpp·Ollama·OpenAI·OpenRouter를 하나의 인터페이스로 묶는다. OpenAI 호환 API를 공통분모로 삼아 어떻게 추상화하는지가 핵심.

실습 아이디어: 새 프로바이더(예: 로컬 LM Studio)를 추가해보며 추상화의 확장 지점을 체득.

③ 에이전트 루프 + 도구 + MCP

agent_loop.py · agent_tools.py · mcp_manager.py 삼총사로 "도구를 쥔 에이전트가 작업을 끝까지 굴리는" 패턴을 학습한다. MCP로 도구를 표준화하는 현대적 방식의 좋은 예시.

실습 아이디어: mcp_servers/memory_server.py를 참고해 나만의 간단한 MCP 서버(예: 날씨 조회)를 추가.

④ 로컬 임베딩 기반 RAG / 의미 메모리

fastembed(ONNX) + ChromaDB 조합으로 외부 API 없이 벡터 검색을 구현. rag_vector.py · memory_vector.py에서 "벡터 + 키워드 하이브리드 검색"과 강등 로직을 볼 수 있다.

실습 아이디어: ChromaDB를 잠시 꺼서 키워드 폴백이 어떻게 작동하는지 직접 확인.

⑤ 하드웨어 인식 모델 서빙 (Cookbook/llmfit)

services/hwfit/는 "VRAM을 보고 양자화별 fit 점수를 매겨 모델을 추천"하는 드문 기능이다. 로컬 LLM 운영의 실전 노하우(GGUF vs FP8 vs AWQ, 서빙 엔진 선택)가 코드로 정리돼 있다.

실습 아이디어: fit.py의 점수 공식을 읽고, 내 GPU에서 추천 결과가 합리적인지 검증.

⑥ 셀프호스팅 운영의 디테일

Dockerfile의 PUID/PGID·gosu, atomic_io.py의 원자적 쓰기, SearXNG의 127.0.0.1 바인딩, Caddy 리버스 프록시 가이드 — "서비스를 안전하게 띄운다"의 실무 감각을 통째로 배운다.

실습 아이디어: Caddy로 HTTPS를 입혀 LAN의 다른 기기에서 접속해보기.

7하드웨어·시스템 요구사항

무엇이 있어야 돌릴 수 있나
항목내용
핵심 런타임Python 3.11+ (도커 이미지는 3.14-slim)
설치 방식Docker Compose(권장) / 네이티브 Linux·macOS·Windows
기본 포트앱 7000 (macOS 네이티브는 7860, AirPlay 충돌 회피)
코어 앱(채팅·에이전트·메모리·문서·메일·캘린더·리서치)GPU 불필요 — 일반 PC/홈서버에서 동작. 모델은 API로 붙이면 됨
Cookbook 백그라운드 다운로드/서빙tmux 필요(Windows는 Git for Windows의 bash)
로컬 GPU 서빙(vLLM/SGLang)Linux/WSL2 + NVIDIA(CUDA) 또는 AMD(ROCm)
Apple Silicon도커는 Metal GPU 사용 불가 → 네이티브 실행(start-macos.sh)로 llama.cpp/Ollama(Metal)
Windows 로컬 모델Ollama가 가장 쉬움(localhost:11434/v1 연결)
브라우저 MCP(선택)npx @playwright/mcp + Playwright(~300MB)
권장 구성
가볍게 시작 — "API 모델만 쓰기"

아무 PC + 도커. 로컬 GPU 없이 OpenAI·OpenRouter·Anthropic 키만 넣으면 모든 워크스페이스 기능(에이전트·메일·캘린더·리서치)이 돈다. GPU 고민은 나중에.

권장 구성
로컬 모델 입문 — "내 GPU로 돌리기"

NVIDIA GPU(8~24GB) + Linux/WSL2. Cookbook으로 카드에 맞는 양자화 모델을 추천받아 llama.cpp/vLLM로 서빙. 데이터까지 완전 로컬.

권장 구성
홈서버 상시 운영

Linux 미니PC/NAS + 도커 + Tailscale + Caddy(HTTPS). PWA로 폰에 설치해 외부에서도 안전하게 접속하는 "개인 AI 서버".

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

난이도별 5개
EASY · 30분~1시간

① 도커로 띄우고 API 모델 붙이기

git clonecp .env.example .envdocker compose up -d --buildlocalhost:7000 접속. Settings에서 OpenRouter/OpenAI 키를 넣고 첫 채팅을 돌린다.

배우는 것: Compose 멀티서비스 부팅 흐름과 data/ 영속화, 헬스체크가 통과하는 순서(searxng → odysseus).

EASY · 1~2시간

② 에이전트에 도구 쥐여주고 작업 시키기

Agent 모드에서 "이 폴더의 CSV를 읽고 요약 리포트를 문서로 만들어줘" 같은 멀티스텝 작업을 던진다. 셸/파일/웹 도구가 어떻게 연쇄 호출되는지 로그로 관찰.

배우는 것: 에이전트 루프 + 도구 호출의 실제 동작, opencode 기반 코어의 감각.

MID · 반나절

③ Cookbook으로 로컬 모델 추천→서빙

로컬 GPU가 있다면 Cookbook이 스캔한 fit 점수를 보고 모델을 받아 서빙한다. GPU가 없으면 services/hwfit/fit.py를 읽고 점수 공식을 직접 분석.

배우는 것: VRAM↔양자화↔모델 크기의 트레이드오프, 하드웨어 인식 서빙의 의사결정.

MID · 1~2일

④ 나만의 내장 MCP 서버 추가

mcp_servers/memory_server.py를 본떠 새 MCP 서버(예: 사내 위키 검색)를 만들고 mcp_manager에 등록. 에이전트가 새 도구를 인식하는지 확인.

배우는 것: MCP 서버 작성·등록·수명주기, 에이전트 도구 확장 패턴.

HARD · 약 1주

⑤ HTTPS·인증 하드닝 후 외부 공개

Caddy + Tailscale로 TLS를 입히고, AUTH_ENABLED·per-user 권한·2FA·API 토큰을 점검한 뒤 안전하게 LAN/원격에 노출. data/auth.json로 오픈 가입을 닫는다.

배우는 것: 셀프호스팅 보안 모델 전반 — 리버스 프록시, 권한 게이팅, 토큰 위생.

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

4주 코스
WEEK 1

FastAPI로 견고한 백엔드 짓기

FastAPI 공식 튜토리얼 → APIRouter 모듈화 → SQLAlchemy + pydantic-settings. Odysseus의 app.py·core/·routes/를 대조하며 "라우트→로직→서비스" 3층 구조를 모사한 미니 앱 작성.

WEEK 2

LLM 통합과 에이전트

OpenAI 호환 API 규약 → 멀티 프로바이더 추상화 → 도구 호출(tool/function calling) → MCP 사양. llm_core.py·agent_loop.py·mcp_manager.py 정독 후 간단한 도구 에이전트 구현.

WEEK 3

RAG·임베딩·벡터DB

임베딩 개념 → fastembed(ONNX) 로컬 추론 → ChromaDB 컬렉션/쿼리 → 벡터+키워드 하이브리드 검색. rag_vector.py를 참고해 문서 Q&A 파이프라인을 손수 작성.

WEEK 4

셀프호스팅·컨테이너·보안

Docker Compose 멀티서비스 → 볼륨/권한(PUID·gosu) → 리버스 프록시(Caddy)·Tailscale → 인증/2FA/권한 모델. 직접 띄운 Odysseus를 HTTPS로 하드닝하며 운영 감각 완성.

10핵심 키워드 사전

한 번에 정리해두면 좋은 용어들
용어
Self-hosting내가 관리하는 컴퓨터에 소프트웨어를 직접 올려 쓰는 방식. 데이터 주권·프라이버시가 장점
Local-first데이터·연산을 우선 로컬에 두고, 클라우드는 선택적으로만 쓰는 설계 철학
FastAPI파이썬 비동기 웹 프레임워크. 타입 힌트 기반 검증·자동 문서화가 강점
uvicornFastAPI를 구동하는 ASGI 서버
MCP (Model Context Protocol)LLM/에이전트가 외부 도구·데이터에 붙는 표준 프로토콜
Agent loop관찰→계획→도구 호출→결과 반영을 반복하며 작업을 끝까지 수행하는 실행 루프
RAG검색 증강 생성. 외부 문서를 찾아 컨텍스트로 넣어 답변 품질을 높임
임베딩(Embedding)텍스트를 의미 벡터로 변환한 것. 의미 기반 검색의 토대
fastembed외부 API 없이 로컬 ONNX로 임베딩을 계산하는 라이브러리
ChromaDB오픈소스 벡터 데이터베이스. 의미 메모리/RAG 저장소로 사용
SearXNG프라이버시 중심 메타 검색 엔진. 여러 검색엔진 결과를 모아줌(추적 없음)
ntfy간단한 HTTP 기반 푸시 알림 서비스
CalDAV캘린더 동기화 표준 프로토콜(Nextcloud·Apple·Fastmail 등과 연동)
IMAP / SMTP이메일 수신(IMAP)·발신(SMTP) 표준 프로토콜
vLLM / llama.cpp / Ollama로컬 LLM 추론·서빙 엔진들(고성능 GPU 서빙 / 경량 CPU·GPU / 간편 로컬)
양자화(GGUF·FP8·AWQ)모델 가중치를 저비트로 압축해 메모리·속도를 절약하는 기법들
Cookbook / llmfit하드웨어(VRAM)를 스캔해 적합 모델을 추천·다운로드·서빙하는 기능/라이브러리
PWA설치 가능한 웹앱. 모바일에서 네이티브 앱처럼 동작
PUID/PGID + gosu컨테이너가 지정한 사용자 권한으로 떨어져 실행 → 호스트 파일 권한 사고 방지
Graceful Degradation의존성 일부가 빠져도 핵심 기능이 유지되도록 단계적으로 강등하는 설계
Reverse Proxy (Caddy)앞단에서 TLS를 종료하고 요청을 내부 서비스로 전달. HTTPS·인증 보강
2FA / TOTP비밀번호 외 추가 인증. 시간 기반 일회용 코드(pyotp·QR)
opencodeOdysseus 에이전트 코어가 기반으로 삼은 오픈소스 코딩 에이전트
Tongyi DeepResearch알리바바의 다단계 딥리서치 프로젝트. Odysseus의 리서치 기능이 각색
Antithesis (bombadil)결정론적 시뮬레이션으로 버그를 재현·탐지하는 테스트 플랫폼/툴

11참고 링크

더 깊이 파고들 곳

공식 자료

기반·연동 프로젝트

핵심 기술 문서