openGym: 패스키 인증과 로컬 저장을 지원하는 오픈소스 셀프호스팅 운동 기록 도구
구독료와 텔레메트리 없이 Docker로 즉시 배포 가능한 셀프호스팅 피트니스 트래커 openGym. 패스키(Passkey) 기반 다중 프로필, 1,324개 운동 라이브러리, 3모드 근육 맵, FitNotes·Strong·Hevy 가져오기 및 MCP 서버 연동을 지원합니다.
개발자 두아르트 산토스(Duarte Santos, DuarteSantos8)가 상용 모바일 앱의 강제 구독 모델과 클라우드 데이터 종속에서 벗어나 사용자 소유 서버에 직접 구축할 수 있는 오픈소스 피트니스 트래커 'openGym'을 공개했습니다. AGPL-3.0 라이선스로 배포된 openGym은 외부 클라우드 계정 가입이나 광고, 텔레메트리(원격 분석) 수집 없이 로컬 서버 디렉토리(JSON 파일)에 모든 운동 데이터를 온전히 저장하는 셀프호스팅 중심 웹 애플리케이션입니다.
![]()
이미지 출처: DuarteSantos8/openGym
최근 Strong, Hevy, JEFIT 등 주요 상용 헬스 기록 앱들이 구독 요금제를 강화하고 사용자 운동 데이터를 독점 서버에 종속시키는 흐름이 이어지면서, 홈랩(Homelab) 이용자와 프라이버시를 중시하는 운동인들을 중심으로 독립 호스팅 도구에 대한 수요가 급증하고 있습니다. openGym은 GitHub 공개 이후 3,200개 이상의 스타를 기록하며 유력한 오픈소스 대안으로 주목받고 있습니다.
패스키 기반 무계정 인증과 로컬 데이터 주권
openGym의 가장 큰 기술적 차별점은 아이디·비밀번호 체계나 타사 클라우드 소셜 로그인을 완전히 배제하고 WebAuthn 표준 기반의 패스키(Passkey) 로그인을 전면에 채택했다는 점입니다.
- 기기 생체 인증 연동: Face ID, Touch ID, 지문 인식 등 스마트폰 및 PC의 하드웨어 보안 모듈과 직접 연동되어 비밀번호 유출 위험 없이 간편하게 접근할 수 있습니다.
- 다중 프로필 및 프라이버시 격리: 단일 서버 인스턴스 안에서 여러 사용자가 각자의 패스키로 독립된 운동 프로필을 분리하여 운용할 수 있습니다. 패스키 개인키는 기기의 보안 영역에 보관되며, AI 코치 기능 사용 시에도 익명 핸들을 통해 요청이 전달되므로 인스턴스 관리자가 질문 내용을 열람할 수 없습니다.
- 원타임 페어링 코드 지원: 복잡한 설정 없이 일회용 페어링 코드를 통해 스마트폰, 태블릿, PC 등 여러 기기 간에 세션을 안전하게 연결하고 동기화할 수 있습니다.
- 순수 파일 기반 저장: 무거운 데이터베이스 엔진 대신
./data디렉토리 내부의 경량 JSON 파일로 기록을 관리하므로 백업과 마이그레이션이 매우 단순합니다.
1,324개 운동 라이브러리와 3가지 모드의 근육 맵 시각화
실제 헬스장 현장에서의 사용성을 최우선으로 설계된 openGym은 운동 수행 중 조작 피로도를 줄이기 위한 다양한 실전 기능을 제공합니다.
- 가이드 운동 루틴 및 자동 제안: 목표, 주당 운동 일수, 세션 시간, 사용 장비 등의 질문을 통해 일주일 루틴을 구성할 수 있으며, 실제 기록된 중량 정체기, 세트별 체감 난이도(RPE), 체중 추이를 분석해 현실적인 루틴 조정을 제안합니다. 세트 시작 전 체중 입력 유도, 이전 중량 자동 채우기, 슈퍼세트 묶음, 휴식 타이머 기능이 기본 탑재되어 있습니다.
- 애니메이션 데모가 포함된 1,324개 운동 라이브러리: 방대한 운동 종목의 동작 가이드와 애니메이션을 내장하여 올바른 폼 확인이 가능합니다.
- 3가지 시점의 인체 근육 맵 (Muscle Map):
- 볼륨 밸런스(Balance): 수행한 볼륨이 신체 어느 부위에 집중되었고 어떤 근육이 소외되었는지를 한눈에 확인합니다.
- 피로도(Fatigue): 세트 강도와 볼륨을 가중 반영해 현재 어떤 근육군이 회복 중인지 실시간으로 시각화합니다.
- 근력(Strength): 각 근육 부위를 마지막으로 훈련한 시점과 해당 근육을 발달시킨 운동 종목들의 추정 1RM(1회 최대 반복 중량)을 추적합니다.
- 4가지 점진적 과부하 규칙: 선형 진행(Linear Progression) 및 Greyskull LP 등 검증된 4가지 과부하 규칙을 지원해 체계적인 근력 성장을 돕습니다.
- 외부 데이터 마이그레이션: FitNotes, Strong, Hevy의 기존 내보내기 CSV 파일과 Apple Health 데이터를 손실 없이 가져올 수 있어 기존 앱에서 즉시 이전할 수 있습니다.
Docker 원클릭 배포와 AI 연동용 로컬 MCP 서버
openGym은 Node.js 기반의 가벼운 백엔드와 React + Vite 기반 프론트엔드로 구축되었으며, 단일 Docker Compose 명령어로 즉시 기동됩니다.
# docker-compose.yml 작성 후 백그라운드 실행
docker compose up -d
PWA(프로그레시브 웹 앱) 기술을 적용하여 모바일 사파리나 크롬에서 홈 화면에 추가하면 네이티브 앱처럼 동작하며, 네트워크가 불안정한 환경에서도 오프라인 기록이 가능합니다.
또한 openGym은 LLM과의 데이터 연계를 위해 읽기 전용 로컬 MCP(Model Context Protocol) 서버를 지원합니다. Claude Desktop 등의 AI 클라이언트에 openGym MCP 서버를 등록하면, 인공지능이 사용자의 실제 운동 일지, 중량 진척도, 근육 피로도 데이터를 자연어로 조회하여 이전 훈련 성과를 분석하고 관련 질문에 답할 수 있는 확장성을 갖추었습니다.
배포 형태별 특징과 실무 운영 시 주의사항
openGym은 사용자 환경에 따라 세 가지 형태로 활용할 수 있습니다.
- 셀프호스팅 Docker 인스턴스: Docker 컨테이너 환경에서 패스키 다중 프로필, 기기간 실시간 동기화, 웹 푸시 알림, 관리자 대시보드를 온전히 활용할 수 있는 표준 형태입니다.
- 독립형 Android APK (로컬 단독 모드): 서버 구축 없이 폰 자체의 비공개 내부 저장소에 데이터를 보관하며, 네이티브 알림 기능을 제공합니다. 다만 이 모드는 단일 기기 전용으로 서버와의 실시간 동기화는 지원되지 않습니다.
- 브라우저 데모 모드: 설치 없이 웹 브라우저 로컬 스토리지에 샘플 데이터를 띄워 기능을 사전에 체험해볼 수 있는 모드입니다.
실제 자체 서버를 구축할 때는 다음 기술적 요소를 확인해야 합니다.
- 외부 접속 시 HTTPS 환경 필수: WebAuthn 패스키 인증 규격은 로컬호스트(
localhost)를 제외한 외부 네트워크 환경에서 반드시 유효한 SSL/TLS(HTTPS) 인증서를 요구합니다. 스마트폰 외부 접속을 원활히 하려면 Caddy, Nginx 역방향 프록시나 Cloudflare Tunnel과 도메인을 연결해야 합니다. - iOS 환경의 설치 제약: iOS 환경에서는 외부 바이너리 사이드로드가 불가능하므로, 사파리 브라우저의 '홈 화면에 추가(PWA)' 기능을 사용하거나 소스코드에서 직접 빌드해야 합니다.
출처
- GitHub 저장소: DuarteSantos8/openGym
- 공식 웹사이트 및 라이브 데모: openGym Live Demo
- 공식 문서: openGym Docs