개인정보처리방침
ShakeFit 개인정보처리방침
버전 1.0 · 최종 개정 2026년 7월 27일 · https://shakefit.app/privacy 에 게시된 날부터 시행
이 방침은 ShakeFit이 정보를 어떻게 처리하는지, 그리고 무엇을 하지 않는지 설명합니다. 아래 모든 항목은 앱의 소스 코드를 직접 확인해 작성했으며, 각 문장의 근거 파일은 review-notes.md에 기록되어 있습니다.
처리자와 문의처
- 개인정보처리자: Foo AI Corp., 서울특별시 서초구 강남대로 359 (06621)
- 사업자등록번호: 284-81-02702
- 개인정보 보호책임자 및 고충 처리 담당: JEEHO SONG, contact@shakefit.app
1. 요약
- ShakeFit은 계정과 가입 절차 없이 동작합니다. 이메일, 비밀번호, 소셜 로그인이 없습니다.
- 카메라 프레임은 기기 안에서 처리한 뒤 폐기합니다. 영상과 이미지는 저장하지 않고 어디에도 전송하지 않습니다.
- 프로필, 운동 이력, 체중 기록, 진행 상황은 이용자 기기에 저장됩니다.
- Apple 건강 앱의 심박수는 읽기 전용으로만 사용하며, 세션 중과 직후 표시에만 쓰고 업로드하거나 공유하지 않습니다.
- 빌드에 서버 동기화가 설정된 경우 앱은 익명 식별자를 만들고 숫자 형태의 세션 요약과 제품 계측 이벤트를 업로드합니다. 자세 데이터, 영상, 나이, 키, 체중, 체성분, 심박수는 업로드하지 않습니다.
- 광고, 제3자 분석 SDK, 앱과 웹사이트를 넘나드는 추적이 없으며, 어떤 정보도 판매하지 않습니다.
2. 카메라와 자세 추정 모델
렙을 판정하려면 앱이 이용자의 움직임을 봐야 합니다.
- 카메라 프레임은 앱 내부의 자세 추정 모델(MediaPipe Pose Landmarker)로 전달되고, 모델은 16개 관절 좌표를 돌려줍니다.
- 얼굴 좌표와 손끝 좌표는 네이티브 모듈 내부에서 폐기되어 모듈 밖으로 나가지 않습니다. 앱은 얼굴 데이터를 사용하지 않으며, 화면에 그리는 도형에는 얼굴과 손이 없습니다.
- 관절 좌표는 세션 동안 메모리에만 존재하며 점수 계산에 쓰인 뒤 사라집니다. 저장소에 기록하지 않고 전송하지 않습니다.
- 앱에는 영상을 인코딩하거나 미디어 파일을 쓰거나 카메라 데이터를 네트워크로 보내는 코드가 없습니다. 그 코드의 부재가 방어선이며, 설정으로 켜고 끄는 항목이 아닙니다.
- 카메라 권한은 첫 세션 시작 시 iOS가 요청합니다. iOS 설정에서 언제든지 철회할 수 있습니다. 카메라 권한이 없으면 세션 판정이 불가능합니다.
세션 중에는 자세를 잡을 수 있도록 실시간 미리보기가 표시됩니다. 미리보기도 프레임 단위로 그려진 뒤 폐기됩니다.
3. 기기에 저장되는 정보
아래 정보는 모두 이용자 기기의 앱 저장 영역에만 남습니다.
| 항목 | 내용 |
|---|---|
| 나이 | 만 나이만 저장합니다. 연령 확인을 위해 생년월일을 한 번 입력받지만 생년월일 자체는 저장하지 않습니다 |
| 선택 입력 신체 정보 | 키, 체중, 성별, 주간 세션 목표 |
| 안전 고지 확인 | 안전 고지를 확인한 시각. 건강 자가확인 응답은 저장하지 않고 확인 사실만 남깁니다 |
| 세션 이력 | 최대 400건: 날짜, 유효 시간, 추정 칼로리, 근육 포인트, 유효 세션 여부, 트랙 ID, 총점, 최고 콤보, 완주 여부 |
| 체중 기록 | 최대 400건: 날짜와 체중 |
| 감량 목표 | 설정한 경우 목표 감량치 |
| 체성분 입력값 | 입력한 경우 체지방률과 골격근량 |
| 진행 상황 | XP, 레벨, 해금, 스트릭 |
| 트랙 기록 | 트랙별 최고 점수, 별, 랭크, 배지, 플레이 횟수, 마지막 플레이 날짜 |
| 설정 | 무음 모드, 화면 강화, 모션 감소, 저충격, 볼륨, 오디오 보정값 |
| 언어 | 언어를 직접 선택한 경우 그 값 |
| 설치 식별자 | 기기에서 생성한 임의 UUID. 제5조에서 설명합니다 |
| 미전송 계측 | 전송 대기 중인 계측 이벤트. 제5조에서 설명합니다 |
| 연령 차단 표시 | 연령 확인에서 차단된 경우 그 사실을 남겨 확인 절차를 우회할 수 없게 합니다 |
기기에도, 서버에도 저장하지 않는 정보는 생년월일, 건강 자가확인 응답, 카메라 프레임, 자세 좌표, 심박 샘플이며, 이름과 이메일과 전화번호는 앱이 아예 묻지 않습니다.
iOS 백업 설정에 따라 기기 백업에 이 앱의 로컬 데이터가 포함될 수 있습니다. 그 백업은 이용자와 Apple 사이의 문제이며 회사는 접근할 수 없습니다.
4. Apple 건강 앱의 심박수
이용자가 허용하면 ShakeFit은 Apple 건강 앱에서 두 가지 데이터를 읽습니다. 심박수와 활동 에너지입니다.
- 권한은 읽기 전용입니다. 앱은 쓰기 권한 집합을 비워 요청하므로 건강 앱에 아무것도 쓸 수 없고, 쓰지 않습니다.
- 심박수는 세션 중 실시간 BPM과 결과 화면의 평균, 최소, 최대 표시에 사용합니다. 활동 에너지는 해당 구간에 건강 앱이 기록한 값을 앱의 추정치와 나란히 보여 주기 위해 사용합니다.
- 건강 데이터는 세션과 결과 화면 표시를 위해 메모리에서만 사용합니다. 앱 저장소에 저장하지 않고, 업로드하지 않으며, 누구와도 공유하지 않습니다.
- 건강 데이터는 광고, 마케팅, 그와 유사한 목적으로 사용하지 않으며 이용자 프로파일링에도 사용하지 않습니다.
- iPhone에는 심박 센서가 없습니다. 실시간 값은 Apple Watch가 운동을 기록하는 중이거나 다른 기기가 건강 앱에 심박수를 기록하는 중에만 들어옵니다. 샘플이 없으면 앱은 0을 표시하지 않고 아무것도 표시하지 않습니다.
- 건강 권한이 없어도 앱의 다른 모든 기능은 정상 동작합니다. iOS 설정의 개인정보 보호 및 보안에서 건강으로 들어가 언제든지 허용하거나 철회할 수 있습니다.
이 내용은 Apple 심사 대응 형식으로 health-data.ko.md에 따로 정리해 두었습니다.
5. 기기를 떠나는 정보
ShakeFit에는 선택적 서버 백엔드가 있습니다. 빌드 설정으로 켜지며, 꺼져 있으면 앱은 보낼 곳 자체가 없어 완전히 로컬로만 동작합니다. 켜진 경우 기기를 떠나는 것은 정확히 다음과 같습니다.
익명 계정. 앱은 백엔드에 익명으로 로그인합니다. 이메일, 비밀번호, 이름이 없습니다. 결과물은 수탁자가 보관하는 임의의 계정 식별자와 기기에 남는 임의의 설치 식별자입니다. 회사는 이 값을 이용자의 신원과 연결하지 않습니다. GDPR 등 일부 법령에서는 이런 식별자도 개인정보에 해당하므로 여기에 명시합니다.
세션 요약. 세션을 마치면 다음 항목이 전송됩니다. 트랙 ID, 운동 수, 유효 렙 수, 무효 렙 수, 최고 콤보, 유효 시간, 트래킹 손실 횟수, 유효 세션 여부, 소스(카메라 또는 리플레이), 클라이언트 시각입니다.
제품 계측 이벤트. 회사의 자체 이벤트 스키마이며 원시값만 담습니다. 자유 텍스트와 중첩 객체는 저장 전에 거부되도록 구현되어 있어 구조적으로 개인정보가 섞이지 않습니다. 현재 빌드가 전송하는 이벤트는 다음과 같습니다.
| 이벤트 | 항목 |
|---|---|
onboarding_step | 스텝 이름, 단계(노출, 완료, 건너뛰기, 카메라 의사), 카메라 허용 의사 |
onboarding_blocked_age | 없음 |
onboarding_complete | 주간 목표 |
session_start | 트랙 ID, 무음 모드 여부 |
session_complete | 위 세션 요약 항목과 동일 |
session_abandon | 세션 요약 항목, 또는 첫 렙 전에 이탈한 경우 트랙 ID와 단계 |
네트워크 메타데이터. 모든 네트워크 요청과 마찬가지로 요청에는 IP 주소와 시각이 포함되며 호스팅 수탁자가 이를 로그로 남깁니다.
그 밖의 정보는 업로드하지 않습니다. 특히 나이, 키, 체중, 성별, 체지방률, 골격근량, 체중 기록, 감량 목표, 추정 칼로리, 근육 볼륨, XP, 레벨, 스트릭, 트랙 기록, 언어, 설정, 카메라 프레임, 자세 좌표, 심박수는 업로드하지 않습니다.
계측 이벤트는 네트워크가 없을 때 기기에 최대 500건까지 보관하고 초과분은 오래된 것부터 폐기하며, 다음 앱 시작이나 세션 종료 시 전송을 시도합니다.
6. 처리 목적과 근거
| 목적 | 사용 항목 | GDPR상 처리 근거 |
|---|---|---|
| 앱 기능 제공(판정, 기록, 진행, 설정) | 제3조의 항목, 기기 내 처리 | 계약의 이행 |
| 세션 중과 직후 심박 표시 | Apple 건강 데이터, 메모리 내 처리 | iOS 건강 권한을 통한 동의 |
| 동작 판정 | 카메라 프레임, 기기 내 처리 | iOS 카메라 권한을 통한 동의 및 계약의 이행 |
| 이용자가 어디서 이탈하는지, 세션이 완료되는지 파악해 앱을 개선 | 익명 식별자, 세션 요약, 계측 이벤트 | 앱 개선에 관한 정당한 이익. 요약값만 전송하고 개인적 세부 정보와 제3자 분석을 배제해 균형 확보 |
| 구독 판매와 복원 | Apple과 RevenueCat의 구매 상태 | 계약의 이행 |
| 법적 의무 이행과 분쟁 대응 | 법령상 보관이 요구되는 기록 | 법적 의무 및 정당한 이익 |
회사는 이용자에게 법적 효력이 있거나 그에 준하는 중대한 영향을 미치는 자동화된 결정을 하지 않습니다. 판정은 게임 점수입니다.
7. 처리 위탁과 제공
회사는 개인정보를 판매하지 않으며 광고 목적으로 공유하지 않습니다.
| 수령자 | 전달 내용 | 지위와 처리 지역 |
|---|---|---|
| Supabase(백엔드 제공자) | 서버 동기화가 켜진 경우 익명 계정, 세션 요약, 계측 이벤트, IP 주소를 포함한 요청 메타데이터 | 수탁자. 호스팅 리전 대한민국 서울(ap-northeast-2) |
| RevenueCat | 구독과 구매 상태. 식별자는 RevenueCat이 자체 생성하며 회사는 자체 식별자를 전달하지 않습니다 | 구독 상태 처리 수탁자. 미국 |
| Apple | 결제, 청구, 환불, 구독 관리. 이 관계에는 Apple의 개인정보처리방침이 적용됩니다 | App Store에 관한 독립 처리자. Apple 건강 데이터는 기기에 남으며 회사가 Apple로 보내지 않습니다 |
| 수사기관 등 | 법령이 요구하는 범위에서, 요청의 적법성을 확인한 뒤에만 | 법령에 따름 |
그 밖의 수령자는 없습니다. 특히 광고 네트워크, 어트리뷰션 제공자, 제3자 분석 SDK가 앱에 없습니다. 음악, 코치 음성, 가이드 동작은 출시 전에 제작해 앱에 포함하므로 재생을 위해 외부 서비스에 접속하지 않습니다. 사전 생성 클립이 없는 문구는 기기에 내장된 음성 합성으로 대체되며, 이 처리도 기기 안에서 일어납니다.
8. 국외 이전
서버 동기화가 켜진 경우 익명 계정, 세션 요약, 계측 이벤트는 대한민국 서울(ap-northeast-2)에 저장됩니다. RevenueCat과 Apple은 미국을 포함해 각 사가 운영하는 국가에서 처리합니다.
유럽경제지역, 영국, 스위스에 거주하는 이용자의 경우 해당 지역 밖으로의 이전은 유럽연합 집행위원회의 표준계약조항 또는 각 수탁자의 데이터 처리 약관에 포함된 다른 적법한 이전 수단에 근거합니다.
대한민국 이용자의 경우 이전받는 자, 이전 항목, 이전 목적, 보유 기간, 이전 국가는 제5조, 제7조, 제9조에 기재한 내용과 같습니다. 이전을 거부할 수 있으며, 그 경우 앱에 네트워크 연결을 허용하지 않거나 앱을 삭제하십시오. 거부해도 앱의 로컬 기능은 그대로 동작합니다.
9. 보유 기간
| 저장 위치 | 기간 |
|---|---|
| 이용자 기기 | 앱에서 기록을 삭제하거나 앱을 삭제할 때까지. 세션 이력과 체중 기록은 최근 400건을 유지하고 초과분은 자동으로 폐기됩니다 |
| 서버의 세션 요약과 계측 이벤트 | 앱에서 삭제할 때까지, 어떤 경우에도 수신일로부터 24개월 이내 |
| 익명 계정 레코드 자체 | 삭제를 요청할 때까지. 제10조 참조 |
| Apple과 RevenueCat이 보유하는 결제 기록 | 각 사가 자사 방침에 정한 기간, 그리고 회사가 세무와 회계 의무 이행에 필요한 기간 |
10. 이용자의 선택과 권리
기기의 모든 기록 삭제. 프로필에서 데이터로 들어가면 보관 중인 기록 수를 확인할 수 있습니다. 확인 후 삭제 버튼을 길게 누르면 프로필, 세션 이력, 체중 기록, 감량 목표, 체성분 입력값, 설정, 진행 상황, 트랙 기록이 삭제됩니다. 연령 차단 표시는 데이터 삭제로 연령 확인을 우회할 수 없도록 의도적으로 유지합니다. 삭제는 되돌릴 수 없습니다.
서버에 있는 정보 삭제. 같은 삭제 동작이 서버에도 세션 요약과 계측 이벤트 삭제를 요청하고, 기기의 익명 세션을 폐기합니다. 그 뒤에도 비어 있는 계정 레코드는 남을 수 있으므로, 이것까지 삭제하려면 contact@shakefit.app 으로 요청하십시오. 요청 확인 후 30일 내에 삭제합니다.
원하지 않는 부분 끄기. iOS 설정에서 카메라 권한이나 건강 권한을 언제든지 철회할 수 있습니다. 카메라 권한은 세션 판정에만, 건강 권한은 심박 표시에만 필요합니다.
직접 문의. 열람, 정정, 삭제, 처리 정지, 처리에 대한 반대, 서버가 보유한 내용의 사본 요청, 동의 철회는 contact@shakefit.app 으로 요청하십시오. 회사는 이름과 이메일을 보유하지 않으므로 기록을 찾기 위해 기기의 익명 식별자가 필요할 수 있고, 그 확인 방법을 안내합니다. 기록을 특정할 수 없으면 추측하지 않고 그 사실을 알립니다.
거주 지역에 따라 감독기관에 신고할 권리도 있습니다. 대한민국은 개인정보보호위원회, 유럽경제지역과 영국은 각국 데이터 보호 감독기관입니다.
앱에는 데이터 내보내기 기능이 없습니다.
11. 아동
ShakeFit은 만 13세 미만 아동을 대상으로 하지 않습니다. 앱은 생년월일을 한 번 확인해 만 나이만 보관하고, 최소 연령 미만이면 앱을 영구적으로 차단합니다. 거주 국가가 부모 또는 법정대리인 동의 없는 온라인 서비스 이용에 더 높은 연령을 요구하는 경우, 그 연령에 도달했거나 동의를 받은 경우에만 이용하십시오.
회사는 최소 연령 미만 아동의 정보를 알면서 처리하지 않습니다. 아동이 앱을 이용했다고 판단되면 contact@shakefit.app 으로 알려 주십시오. 보유한 정보를 삭제합니다.
12. 안전 조치
- 유출 위험이 가장 큰 카메라 프레임과 자세 좌표는 이를 저장하거나 전송하는 코드가 아예 없다는 사실로 보호됩니다.
- 기기의 데이터는 iOS가 강제하는 앱 샌드박스 안, 앱 전용 저장 영역에 있으며 기기 암호와 암호화 설정의 보호를 받습니다.
- 서버 접근은 행 수준 보안으로 식별자별로 격리되어 한 익명 식별자가 다른 식별자의 행을 읽을 수 없습니다. 앱에는 공개 API 키만 포함되며 서비스 키는 포함되지 않습니다.
- 서버 통신은 HTTPS를 사용합니다.
- 운영 데이터 접근은 필요한 인원으로 제한하며 모든 수탁자와 데이터 처리 계약을 체결합니다.
완전한 시스템은 없습니다. 유출이 이용자에게 영향을 미치는 경우 법령이 정한 대로 이용자와 관계 기관에 통지합니다.
13. 광고성 정보
회사는 광고성 정보를 발송하지 않습니다. 앱에는 푸시 알림, 뉴스레터, 광고 식별자가 없습니다. 이 방침이 바뀌면 법령에 따라 발송 전에 별도 동의를 받습니다.
14. 웹사이트
https://shakefit.app 은 정적 파일만 제공합니다. 페이지는 분석 스크립트, 광고 스크립트, 제3자 임베드를 불러오지 않으며 아무 정보도 수집하지 않습니다. 이메일 수집을 시작하는 경우 무엇을 수집하고, 왜 수집하며, 얼마나 보관하고, 어떻게 삭제하는지를 이 방침에 먼저 반영합니다.
15. 방침의 변경
새 버전은 버전 번호와 날짜를 붙여 https://shakefit.app/privacy 에 게시합니다. 이미 제공받은 정보의 이용 방식이 달라지는 변경은 시행일로부터 최소 30일 전에 앱에서 안내합니다. 그 밖의 변경은 최소 7일 전에 안내합니다.
관련 문서
- 이용약관:
terms-of-use.ko.md, 게시 위치 https://shakefit.app/terms - 건강 데이터 고지:
health-data.ko.md - 영어 정본:
privacy-policy.md
변경 이력
| 버전 | 날짜 | 변경 내용 |
|---|---|---|
| 1.0 | 2026-07-27 | 최초 작성. 커밋 6a77bf9 시점 소스와 항목별 1:1 대조. 검수 기록은 review-notes.md |