가족을 위한 사설 Chess.com 구축하기 — Docker 컨테이너 하나로 Stockfish와 자체 LLM까지
요약
Chess.com의 기능을 대체하는 자체 호스팅형 오픈 소스 체스 플랫폼 'Patzer'를 소개합니다. 이 시스템은 Docker 컨테이너 하나로 실행되며, Stockfish 엔진과 사용자의 로컬 LLM(Ollama/vLLM)을 통합하여 게임 분석, 봇 대전, 친구 간 PvP 등 다양한 기능을 제공합니다. 특히 모든 데이터가 로컬 LAN에 머무르므로 개인 정보 보호와 가족 친화적인 환경 구축이 가능합니다.
핵심 포인트
- Docker 컨테이너로 쉽게 배포 가능한 자체 호스팅 솔루션입니다.
- Stockfish를 이용한 정교한 게임 분석 및 7단계 난이도 봇 대전 기능을 제공합니다.
- Ollama/vLLM과 연동하여 로컬 LLM 기반의 AI 코칭을 구현했습니다.
- 모든 데이터가 사용자의 LAN에 머물러 개인 정보 보호 수준이 높습니다.
제 아이들은 Chess.com에서 체스를 합니다. 훌륭한 제품이지만, 계정, 클라우드, 그리고 광고는 제가 아홉 살짜리 아이에게 맡기고 싶은 것이 아닙니다. 그래서 저는 Patzer를 만들었습니다. 이는 Pi나 NAS 또는 오래된 노트북에서 실행되는 자체 호스팅형(self-hosted) 오픈 소스 대안입니다.
무엇을 하는가:
- 게임 분석 (Game Review) — 공개된 Chess.com 또는 Lichess 게임을 가져오거나 PGN을 붙여넣으세요. 내장된 Stockfish는 모든 수에 대해 분류(Brilliant / Great / Inaccuracy / Mistake / Blunder)를 하고, 정확도, 예상 Elo 점수, 평가 그래프를 제공하며, 평이한 단어로 답변하는 "위협 분석 (what's the threat?)" 기능을 포함합니다.
- 봇과 대전 (Play vs Bot) — Kid부터 Stockfish max까지 이름 붙여진 7단계의 Stockfish가 표준 시간 제어(standard time controls)와 함께, 실수 경고 기능이 있는 키즈 모드를 제공하며 플레이할 수 있습니다.
- 친구와 대전 (Play vs Friend) — WebSocket을 통해 동일 서버에서 프로필 간 실시간 PvP를 지원합니다: 무승부 제안, 되돌리기(takebacks), 원클릭 리매치 기능을 사용할 수 있습니다.
- AI 코치 (AI Coach) — 사용자의 Ollama 또는 vLLM 호스트에 연결하세요. 이 코치는 수가 왜 효과적인지 또는 실패하는지를 설명하고, 더 나은 수를 보여주며, 실수를 최근 게임과 연결합니다("지난 10경기 중 4번: 기물을 보호하지 않음"). 엔진의 내용과 모순되는 답변을 절대 하지 않습니다. 실수에 대해 칭찬하는 답변은 사용자에게 보이기 전에 걸러집니다.
- 가족 사용 환경 (Family-ready) — 관리자 콘솔이 있는 다중 사용자 시스템이며, 프로필별 언어 설정, 키즈 모드, 가장 어린 프로필을 위한 "말 모양" 기물 이름 지정 기능 등을 제공합니다.
제가 계속 돌아오는 디자인 선택은 이렇습니다: LLM(대규모 언어 모델)은 분석하지 않습니다. 서버가 사실들—즉, 어떤 수가 무엇을 허용하는지, 포기하게 하는지 또는 승리하는지, 상대방의 최선의 답변, 사용자의 반복적인 실수—을 계산하고, 모델은 그것을 코칭으로 변환할 뿐입니다. 따라서 작고 로컬한 모델만 충분하며, 환각(hallucinated) 기물은 불가능합니다.
하나의 컨테이너:
docker run -d -p 8800:8800 -v patzer-data:/app/data \
--name patzer ghcr.io/SikamikanikoBG/patzer:latest
모든 것이 사용자의 LAN에서 실행됩니다. 게임, 프로필 및 설정은 절대 집을 떠나지 않습니다. MIT 라이선스를 따르며, 기본적으로 영어(English-first)를 지원하고 불가리아어, 스페인어, 독일어, 러시아어를 즉시 사용할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기