16. 가민 계정연동_바이브코딩
가민 계정 연동을 시도하고 있다.
가민 API 연동
레딧이나 블로그 등을 조사해보니 잘 안해준단다.
특히 개인 개발자는 승인이 안된다는 것이 정설
그럼 어쩐다. 걍 사용자가 스스로 fit 파일을 다운로드 받고 다시 업로드?
극악의 사용성에도 불구하고 POC에서는 참여자 들이 있었다.
그러나 돈을 내야한다면? 모를 일이다.
방법이 없다면 수동 업로드로 시도해봐야한다.
Reddit의 Garmin 커뮤니티
Garmin 커뮤니티에서 이 게시물을 비롯한 다양한 콘텐츠를 살펴보세요
www.reddit.com
ㄴ가민 계정 연동 승인 어렵다는 레딧 글
그러던 중
가민 계정 연동법을 찾았다!!
개인 작업자가 우회 방법으로 가민 계정 연동해서 서비스를 만든 케이스를 찾았다.
https://github.com/Zamoca42/GarminFitBot
GitHub - Zamoca42/GarminFitBot
Contribute to Zamoca42/GarminFitBot development by creating an account on GitHub.
github.com
이 방법대로 해봤더니… 실패!! TT
이 방법에 사용했던 garth라는 프로그램 깃허브에 들어가 봤다.
가민 인증 플로우가 변경되어서 작동을 하지 않는다. 그러나 해당 프로그램을 만든 개발자는 더 이상 업데이트(대응을) 하지 않겠다고 했다.
이런…
다른 사람들이 이런 저런 우회 계정 연동방법을 공유해주었다.
이 정보를 토대로 방안을 마련하라고 AI에게 요청했다.
가민(Garmin) 연동 인증 우회 방법을 찾기 위해 참고했던 주요 커뮤니티 디스커션 및 관련 참고 구현체들의 링크 주소는 다음과 같다.
1. 핵심 커뮤니티 디스커션 (가민의 인증 플로우 변경 및 Cloudflare 차단 논의) 프로젝트에서 가장 중요하게 참고한 토론으로, 가민의 보안 강화(Cloudflare 도입)로 인한 접속 차단 문제와 이를 우회하기 위한 다양한 아이디어가 논의된 곳이다.
matin/garth Discussion #222: https://github.com/matin/garth/discussions/222
Deprecating Garth · matin garth · Discussion #222
I started Garth on July 5, 2023 as a side project to allow me to analyze my personal Garmin data. The existing libraries, at the time, didn't work reliably for me when running code on Google Colab ...
github.com
2. 논의 과정에서 제안된 주요 우회 방법 참고 저장소 위 디스커션에서 여러 개발자가 제안한 우회 아키텍처(A, B, C안)의 실제 오픈소스 구현체들이다.
A안 참고 (단순 User-Agent 덮어쓰기)
diegoscarabelli의 제안 코드가 있는 저장소: https://github.com/diegoscarabelli/garmin-health-data
GitHub - diegoscarabelli/garmin-health-data: A simple Python CLI to extract Garmin Connect data and save it to a SQLite database
A simple Python CLI to extract Garmin Connect data and save it to a SQLite database file - diegoscarabelli/garmin-health-data
github.com
B안 참고 (Playwright 헤드리스 + MCP 서버 활용)
etweisberg의 garmin-connect-mcp: https://github.com/etweisberg/garmin-connect-mcp
GitHub - etweisberg/garmin-connect-mcp: Garmin Connect MCP
Garmin Connect MCP . Contribute to etweisberg/garmin-connect-mcp development by creating an account on GitHub.
github.com
C안 참고 (최종 채택안 - Playwright OAuth 캡처 + 자동 갱신)
sturimcode의 eufy-sync (OAuth 토큰 주입 교환 및 자동갱신 구조 참고): https://github.com/sturimcode/eufy-sync
GitHub - sturimcode/eufy-sync: Sync Eufy smart scale body composition data to Garmin Connect and Strava
Sync Eufy smart scale body composition data to Garmin Connect and Strava - sturimcode/eufy-sync
github.com
이런 방법들을 벤치마킹하면서 가민 계정연동을 개발해봤다.
(드디어 바이브 ‘코딩’)
당연히 쉽게는 안되고, 여러번 우회방법을 찾아 시도하여 결국에는 연동에 성공했다.
히스토리를 정리해보면 아래와 같다.
| 2026-03-27 | garth 라이브러리 공식 deprecated | 모든 기존 접근법 무효화 |
| 2026-04-07 | SPEC-GARMIN-AUTH-002 리서치 및 기획 | 하이브리드 C 아키텍처 선정 |
| 2026-04-08 | AUTH-002 구현 (Stage A-E) | 127 테스트, 87% 커버리지 |
| 2026-04-09 | Cloudflare 갭 분석, AUTH-003 전환 | garth 의존성 제거 결정 |
| 2026-04-09 | AUTH-003 v3.1 구현 (curl_cffi + DI OAuth2) | Cloudflare TLS 차단 |
| 2026-04-09 | AUTH-003 v3.2 전환 (Playwright 브라우저) | 91 테스트, 91.8% 커버리지 | ← 계정연동 성공
| 2026-04-10 | E2E 테스트 (Andyk6302 계정) | 35/40 PASS (87.5%) |
| 2026-04-10 | DATA-001 검증 (nagujean 계정) | FIT 파일 다운로드 성공, REST API 제한 확인 |
우여곡절끝에….성공은 하였다.
솔직히 이 방식을 깊이 이해하지 못했다.
비개발자도 쉽게 설명하자면 아래와 같다 ㅋㅋ
현재 방식이 작동하는 원리 (3단계)
[1단계] 로그인 [2단계] 열쇠 받기 [3단계] 데이터 수집
프로그램이 자동으로 가민에서 "임시 열쇠" 그 열쇠로 데이터를
안드로이드 폰처럼 (토큰)을 발급받음 가져옴
행동하며 로그인
1단계 -- 자동 로그인: 프로그램이 안드로이드 폰인 것처럼 가민 웹사이트를 열어서, 사용자의 이메일/비밀번호로 로그인합니다. 화면에 보이지 않는 브라우저(Playwright)가 진짜 폰처럼 행동합니다.
2단계 -- 임시 열쇠 발급: 로그인이 성공하면, 가민에서 "임시 열쇠"(액세스 토큰)를 발급받습니다. 이 열쇠가 있으면 매번 로그인할 필요 없이 데이터를 가져올 수 있습니다. 열쇠는 암호화하여 안전하게 저장합니다.
3단계 -- 데이터 수집: 임시 열쇠를 사용하여 러닝 데이터를 가져옵니다. 현재 두 가지 방식을 사용합니다:
- 활동 목록: "어떤 러닝을 언제 했는지" 목록은 직접 API로 가져옵니다
- 상세 데이터: 심박수, GPS 경로, 페이스 등 상세 데이터는 FIT 파일(가민 전용 데이터 파일)을 다운로드하여 분석합니다
이제 비로소 가민연동으로 건내받은 fit 파일을 분석할 수 있게되었다.