박정기
박정기
🗡️ AI 레전드
🎖️ 마스터 파트너
🚀 SNS 챌린지 달성자

WHOOP 자동화 시스템을 OpenClaw로 만든 방법

WHOOP 자동화 시스템을 OpenClaw로 만든 방법

WHOOP을 쓰다 보면 데이터는 쌓이는데, 막상 매일 행동으로 이어지기는 쉽지 않았습니다. 회복 점수, 수면, HRV, SpO2, 피부온도 같은 값이 보이긴 하는데, 그래서 오늘 뭘 해야 하는지는 따로 해석해야 했기 때문입니다.

이번에는 OpenClaw로 WHOOP 자동화 시스템을 직접 붙여서, 단순 조회를 넘어서 수집 → 해석 → 알림 → 기록까지 이어지는 흐름을 만들었습니다. 개인정보나 민감한 계정 정보는 제외하고, 구조 중심으로만 정리해보겠습니다.

왜 만들었나

처음 문제는 아주 단순했습니다.

  • WHOOP 앱을 열어야만 확인하게 된다

  • 값은 보이지만 맥락이 부족하다

  • Obsidian 같은 개인 지식 저장소에 누적되지 않는다

  • 이상 징후가 있어도 내가 직접 찾아봐야 한다

그래서 목표를 이렇게 잡았습니다.

  1. WHOOP 데이터를 매일 자동으로 가져온다

  2. 사람이 읽기 쉬운 리포트로 바꾼다

  3. 중요한 이상 징후는 별도 알림으로 분리한다

  4. 결과를 로컬 Obsidian vault에 남긴다

  5. 나중에 식단/체성분 데이터와 연결할 수 있게 구조를 유지한다

전체 구조

구조는 아래처럼 잡았습니다.

  • WHOOP API 인증 및 토큰 관리

  • 원본 데이터 수집

  • 일간 분석/가공

  • 텔레그램 요약 전송

  • Obsidian 저장

  • 이상 징후 감지 및 경보

  • 주간 요약 생성

핵심은 원본과 가공본을 분리한 점이었습니다. 처음에는 raw처럼 보이는 파일에 사실상 가공된 결과가 저장되고 있었는데, 나중에 분석 로직을 바꾸기 어렵다는 문제가 있었습니다. 그래서 저장 구조를 다시 나눴습니다.

저장 구조

현재는 이렇게 저장합니다.

  • WHOOP/Raw/YYYY-MM-DD.json → WHOOP API 원본 dataset

  • WHOOP/Processed/YYYY-MM-DD.json → 분석용 가공 데이터

  • WHOOP/Daily/YYYY-MM-DD.md → 사람이 읽는 일간 리포트

  • WHOOP/Summary/YYYY-MM-DD_to_YYYY-MM-DD.md → 주간 요약

  • WHOOP/Alerts/YYYY-MM-DD.md → 이상 징후 로그

이렇게 해두니까 장점이 분명했습니다.

  • 원본 보존 가능

  • 분석 로직 교체 가능

  • 사람이 읽기 쉬운 md 유지 가능

  • 나중에 Better Body 같은 상위 시스템과 연결하기 쉬움

일간 리포트에서 바꾼 점

처음 자동 리포트는 수치를 자세히 많이 보여주는 방식이었습니다. 그런데 실제로 써보니, 아침에는 긴 리포트보다 오늘 뭘 해야 하는지 한 줄로 아는 게 더 중요했습니다.

그래서 현재 아침 WHOOP 메시지는 이렇게 바꿨습니다.

  • 오늘 상태 한 줄

  • 오늘 할 일 2~3개

예를 들면 이런 식입니다.

  • 오늘은 회복 우선 — 회복 33% · 수면 4.6h · HRV 41.0ms · 스트레인 4.8

  • 오늘 할 일: 고강도 운동은 피하고 걷기·스트레칭 위주로 가기 / 카페인·당으로 버티기보다 오늘 일찍 자기

즉 숫자를 나열하는 보고서가 아니라, 행동용 아침 브리핑으로 바꾼 셈입니다.

이상 징후 경보는 따로 분리

이것도 꽤 중요했습니다.

리포트와 경보를 같은 메시지에 섞어두면, 중요한 신호가 묻히기 쉽습니다. 그래서 이상 징후는 별도 스크립트로 뽑아서, 평소에는 조용히 있고 정말 의미 있는 상황만 한 줄로 보내도록 바꿨습니다.

예를 들어 조합 경보는 이런 식입니다.

  • HRV 급락 + 안정시 심박 상승 → 회복 저하 조합

  • HRV 급락 + 피부온도 상승 → 컨디션 저하 조합

  • 수면 부족 + HRV 급락 → 보호 모드 조합

그리고 알림은 길게 보내지 않고 이렇게 보냅니다.

  • WHOOP 알림: 회복 저하 조합 감지, 오늘 무리 금지

  • WHOOP 알림: 컨디션 저하 조합 감지, 몸 상태 체크

  • WHOOP 알림: 수면 부족 조합 감지, 오늘 보호 모드

이렇게 해두니 리포트는 리포트대로 읽고, 경고는 경고대로 인지하게 되었습니다.

Obsidian에 저장되는 게 중요했다

이번 작업에서 가장 중요하게 본 건 “예쁘게 보여주기”보다 기록이 실제로 남는가였습니다.

그래서 매번 확인한 건 이 부분이었습니다.

  • Raw가 진짜 원본으로 저장되는지

  • Processed가 분석 결과로 저장되는지

  • Daily md가 실제로 vault에 생성되는지

  • Summary가 덮어쓰기/구조 오류 없이 유지되는지

  • Alerts도 따로 남는지

결국 자동화는 “한 번 잘 보냈다”보다 나중에 다시 볼 수 있게 남았는지가 더 중요하다고 느꼈습니다.

실제로 부딪힌 문제들

중간에 예상보다 중요한 문제도 몇 개 있었습니다.

1. 너무 일찍 돌면 WHOOP 점수가 아직 안 뜬다

아침 일찍 돌렸더니 recovery/sleep/strain 값이 비는 날이 있었습니다. 알고 보니 사용자가 아직 자는 중이거나 WHOOP scoring이 끝나기 전이면 빈 값이 나올 수 있었습니다.

그래서 로직을 바꿔서, 주요 값이 전부 비어 있으면 실패 처리하지 않고 조금 뒤 재시도하도록 만들었습니다.

2. Raw가 진짜 raw가 아니었다

초기에는 raw json이라고 저장해놓고 실제로는 분석 결과를 저장하고 있었습니다. 이건 나중에 분석 로직을 바꾸거나 다시 계산할 때 문제가 됩니다.

그래서 raw / processed를 확실히 분리했습니다.

3. 긴 리포트보다 짧은 행동 지시가 더 유용했다

수면 4.7시간, 회복 56%, HRV 45.3ms 같은 숫자 자체보다, 실제로는 오늘 고강도 운동을 피할지, 일찍 잘지가 더 중요했습니다.

그래서 자동화의 초점을 “정보 전달”에서 “행동 권장”으로 옮겼습니다.

지금 구조의 의미

이 WHOOP 자동화는 단순히 웨어러블 데이터를 가져오는 스크립트가 아니라, 개인 건강 운영체계의 기본 레이어가 됐습니다.

지금은 여기에 더해서

  • 식단 기록

  • 체중/체성분 기록

  • 단백질 목표 추적

  • Better Body 코칭 시스템

까지 연결하는 방향으로 확장 중입니다.

즉 WHOOP은 단독 시스템이 아니라, 개인 행동 변화 시스템의 생체 데이터 입력층으로 쓰고 있습니다.

OpenClaw로 만들면서 좋았던 점

OpenClaw로 붙이면서 좋았던 점은 세 가지였습니다.

  1. 스크립트 실행, cron, 메시지 발송, 브라우저/파일 작업이 한 흐름 안에 있다

  2. 로컬 파일 기반 저장 구조를 유지할 수 있다

  3. 단순 자동화가 아니라 “상태를 해석해서 다음 행동으로 연결하는” 에이전트형 흐름을 만들기 쉽다

특히 텔레그램 알림과 Obsidian 저장을 같이 묶을 수 있는 점이 개인적으로 좋았습니다.

마무리

정리하면, 이번 WHOOP 자동화에서 핵심은 아래였습니다.

  • 원본/가공본 분리

  • 아침 행동 중심 리포트

  • 조합 이상 징후 경보

  • Obsidian 로컬 저장

  • 나중에 식단/체성분과 연결할 수 있는 구조 유지

웨어러블 데이터를 “보기만 하는 정보”에서 “행동하게 만드는 입력”으로 바꾸고 싶다면, 이런 구조가 꽤 유효했습니다.

혹시 비슷하게 만들고 있다면, 저는 예쁜 대시보드보다 원본 보존 + 행동 중심 요약 + 이상 경보 분리부터 추천하고 싶습니다.

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요