개인정보처리방침
ShakeFit 개인정보처리방침
> 미게시 수정안: Health Connect, 추가 로그인 제공자 설정, 진행 백업 및 커뮤니티 내용은 검토 중인 구현을 설명합니다. 이 변경으로 운영 설정·스토어 신고·게시를 완료한 것은 아닙니다. 아래 Cloudflare 고지는 2026년 10월 25일부터 시행하며, 수정 방침의 실제 게시는 출시 담당자가 수행합니다.
버전 1.12 · 최종 개정 2026년 10월 27일 · 2026년 10월 27일(2026-10-27)부터 시행
버전 1.12는 앱 버전 1.4.2부터 켤 수 있는 새 트랙 알림에 맞춰 이 방침을 정정합니다. 알림을 켜면 무엇을 누구에게 보내는지 적었습니다. 이 정정은 게시일인 2026년 10월 27일부터 시행합니다.
이 방침은 ShakeFit이 정보를 어떻게 처리하는지, 그리고 무엇을 하지 않는지 설명합니다. 아래 모든 항목은 앱의 소스 코드를 직접 확인해 작성했으며, 각 문장의 근거 파일은 review-notes.md에 기록되어 있습니다.
ShakeFit은 하나의 코드베이스로 iOS와 Android에서 동작합니다. 카메라 처리 방식, 기기에 저장되는 기록, 선택적 서버 동기화는 두 플랫폼이 동일합니다. 다른 것은 세 가지이며, 나오는 자리마다 iOS 또는 Android로 표시했습니다. 건강 데이터는 iOS의 Apple 건강과 지원되는 Android 기기의 선택적 Health Connect가 처리하며, 결제는 iOS에서는 Apple이 Android에서는 Google이 처리하며, 선택 로그인 제공자는 플랫폼과 해당 빌드의 설정에 따라 Apple 또는 Google입니다.
처리자와 문의처
- 개인정보처리자: WorkNPLAY Inc., 대전광역시 서구 대덕대로241번길 20, 5층 (35229)
- 사업자등록번호: 304-86-01720
- 개인정보 보호책임자 및 고충 처리 담당: JEEHO SONG, contact@shakefit.app
1. 요약
- 로그인 없이 운동할 수 있습니다. 선택 커뮤니티는 로그인과 별도 참여 동의가 필요하며, 앱 비밀번호나 필수 가입 양식은 없습니다. 서버 동기화가 설정된 빌드에서는 앱이 스스로 익명 계정을 만듭니다(아래 참조).
- 로그인은 선택이며, 다른 기기의 완주 집계와 활성화된 빌드의 선택 진행 백업·명시 복원을 제공합니다. Apple과 Google 로그인 버튼은 해당 빌드와 플랫폼에 설정된 제공자에 따라 표시됩니다. 로그인하면 이메일 주소를 수탁자가 보관하며, Apple의 경우 릴레이 주소일 수 있습니다. 로그인하지 않으면 이용자의 이메일 주소는 회사 시스템 어디에도 존재하지 않습니다.
- 카메라 프레임은 기기 안에서 처리한 뒤 폐기합니다. 영상과 이미지는 저장하지 않고 어디에도 전송하지 않습니다.
- 프로필, 운동 이력, 체중 기록, 진행 상황은 이용자 기기에 저장됩니다.
- iOS: Apple 건강 앱의 심박수와 활동 에너지는 세션 중과 직후 표시에만 쓰고 업로드하거나 공유하지 않습니다. 세션을 Apple 건강에 운동으로 저장하는 기능과 Apple Watch 앱은 「Apple 건강에 저장」을 켠 경우에만 동작합니다. Android: 선택적 Health Connect로 운동과 활동 에너지를 저장하고 완료한 세션의 심박수를 읽을 수 있습니다. 이 건강 정보는 회사 서버에 업로드하지 않습니다.
- 빌드에 서버 동기화가 설정된 경우 앱은 계정 식별자(로그인하지 않으면 익명)를 만들고 숫자 형태의 세션 요약과 제품 계측 이벤트를 업로드합니다. 자세 데이터, 영상, 나이, 키, 체중, 체성분, 심박수는 업로드하지 않습니다.
- 광고, 제3자 분석 SDK, 앱과 웹사이트를 넘나드는 추적이 없으며, 어떤 정보도 판매하지 않습니다.
2. 카메라와 자세 추정 모델
렙을 판정하려면 앱이 이용자의 움직임을 봐야 합니다.
- 카메라 프레임은 앱 내부의 자세 추정 모델(MediaPipe Pose Landmarker)로 전달되고, 모델은 16개 관절 좌표를 돌려줍니다.
- 얼굴 좌표와 손끝 좌표는 네이티브 모듈 내부에서 폐기되어 모듈 밖으로 나가지 않습니다. 앱은 얼굴 데이터를 사용하지 않습니다. 이용자의 관절 좌표로 그리는 스켈레톤에는 얼굴과 손이 없습니다. 동작을 시연하는 코치는 미리 만들어 앱에 넣어 둔 일러스트 캐릭터이며, 카메라 영상이나 이용자의 자세로 그리지 않습니다.
- 관절 좌표는 세션 동안 메모리에만 존재하며 점수 계산에 쓰인 뒤 사라집니다. 저장소에 기록하지 않고 전송하지 않습니다.
- 앱에는 영상을 인코딩하는 코드도, 카메라 데이터를 네트워크로 보내는 코드도 없습니다. 그 코드의 부재가 방어선이며, 설정으로 켜고 끄는 항목이 아닙니다. 앱이 쓰는 이미지 파일은 정확히 하나이며, 이용자가 요청할 때만 씁니다. 이용자 자신의 수치로 그린 결과 카드이고, 제3조에 적어 두었습니다.
- 카메라 권한은 두 플랫폼 모두 첫 세션 시작 시 운영체제가 요청합니다. iOS는 설정에서, Android는 설정에서 앱, ShakeFit, 권한 순으로 들어가 언제든지 철회할 수 있습니다. 카메라 권한이 없으면 세션 판정이 불가능합니다.
채점되는 게임 세션은 자세를 잡을 수 있도록 실시간 카메라 미리보기를 표시합니다. 따라 배우는 레슨은 카메라를 쓰지 않습니다. 미리보기도 다른 모든 것과 마찬가지로 프레임 단위로 그려진 뒤 폐기됩니다.
3. 기기에 저장되는 정보
아래 정보는 모두 이용자 기기의 앱 저장 영역에만 남습니다.
| 항목 | 내용 |
|---|---|
| 나이 | 만 나이만 저장합니다. 연령 확인을 위해 생년월일을 한 번 입력받지만 생년월일 자체는 저장하지 않습니다 |
| 선택 입력 신체 정보 | 키, 체중, 성별, 주간 세션 목표 |
| 운동 선호 | 첫 주 플랜을 위해 고른 장르. 기기에만 저장합니다 |
| 안전 고지 확인 | 안전 고지를 확인한 시각. 건강 자가확인 응답은 저장하지 않고 확인 사실만 남깁니다 |
| 세션 이력 | 최대 400건: 날짜, 유효 시간, 추정 칼로리, 근육 포인트, 유효 세션 여부, 트랙 ID, 총점, 최고 콤보, 완주 여부, 기록된 경우 동작별 게임 등급 횟수 |
| 체중 기록 | 최대 400건: 날짜와 체중 |
| 감량 목표 | 설정한 경우 목표 감량치 |
| 체성분 입력값 | 입력한 경우 체지방률과 골격근량. 최신 값과 최대 400일의 날짜별 기록 |
| 직접 만든 세션 | 카메라 없는 세션 정의 최대 40개: 동작, 순서, 길이, 템포, 장르와 교육 안내 |
| 관측 구독 기간 | 확인된 체험 외 기간의 상품 ID·구매일 토큰 최대 12개. 계측 중복을 막기 위한 값이며 결제 수단이나 현금 수취 원장이 아닙니다 |
| 진행 상황 | XP, 레벨, 해금, 스트릭, 획득 배지와 획득일, 주간 스트릭 최장 기록, 월간 챌린지 참여 표식, 진행 중 테마 프로그램 표식, 최근 자동 Plus 제안의 노출 시각 |
| 트랙 기록 | 트랙별 최고 점수, 별, 랭크, 배지, 플레이 횟수, 마지막 플레이 날짜 |
| 설정 | 무음 모드, 화면 강화, 거리 자동 확대, 모션 감소, 저충격, 볼륨, 오디오 보정값, 세션 후 난이도 피드백, 데일리 트랙의 당일 난이도 동결값, 리마인더 사용 여부, 앱이 Apple 건강 권한을 물어봤는지 여부, 「Apple 건강에 저장」 사용 여부, 이용자가 닫은 방침 변경 안내 |
| 학습 완료 | 학습 레슨 ID별 완료 시각(레슨별 최근 120개)과 횟수(레슨별 최대999회). 이 기기에만 채점 게임 이력과 분리해 두고 주간 목표·스트릭·주간 목표 알림에 씁니다. 자세 점수는 담지 않습니다 |
| 동작 누적 챌린지 | 선택 동작, 참여 시작일, 날짜별 인정된 관측 렙 수, 중복 반영을 막는 로컬 시도 ID. 기기에 보관하고 전체 기록 삭제 시 함께 지우며 원시 자세나 건강 측정값은 저장하지 않습니다 |
| 시작한 주간 계획 | 이용자가 주간 계획의 트랙을 시작할 때 주 시작일, 선택한 목표 횟수, 각 트랙의 ID·난이도·길이를 저장합니다. 최대 2주를 기기에만 보관하고 전체 기록 삭제 시 함께 지우며 서버로 전송하지 않습니다 |
| 이전 버전의 가족 기록 | 이전 버전의 보호 잠금은 일반 앱을 열기 전 보호자 확인에만 읽으며, 확인과 잠금 삭제가 성공한 뒤 일반 앱을 엽니다. 확인 전에는 분석·백엔드·결제·건강 기능을 시작하지 않습니다. 가족 완료 횟수는 더 이상 읽거나 사용하지 않습니다. 앱 전체 기록 삭제로 남은 가족 기록을 지울 수 있습니다 |
| 리뷰 요청 이력 | 첫 앱 이용 관찰 시각과 네이티브 요청 시도 시각. 요청 간격에 사용하며 별점·리뷰 본문·실제 창 노출 여부는 담지 않습니다 |
| 언어 | 언어를 직접 선택한 경우 그 값 |
| 설치 식별자 | 기기에서 생성한 임의 UUID. 제5조에서 설명합니다 |
| 미전송 계측 | 전송 대기 중인 계측 이벤트. 제5조에서 설명합니다 |
| 세션 토큰 | 서버 동기화가 켜진 경우 서버 세션(익명 또는 로그인)의 토큰을 운영체제 키체인에 보관합니다. 이 토큰은 수탁자가 발급하며, 로그인 세션의 토큰에는 수탁자가 보관 중인 이메일 주소가 담겨 있습니다. 앱은 그 주소를 읽지 않고 별도의 사본도 만들지 않습니다. 로그인하면 그 전에 쓰던 익명 세션의 토큰도 이곳에 보관하며, 서버가 그 익명 계정의 삭제를 확인하면 지웁니다. 확인되지 않으면 90일이 지난 뒤 앱을 처음 열 때 지웁니다 |
| 연령 차단 표시 | 연령 확인에서 차단된 경우 그 사실을 남겨 확인 절차를 우회할 수 없게 합니다 |
| 업로드 대기 세션 요약 | 서버 동기화가 켜진 경우 아직 업로드되지 않은 세션 요약. 세션을 마친 때 쓰던 계정으로만 업로드되며 그때까지 기기에 남습니다. 그 전에 로그인·로그아웃·전체 삭제로 계정이 바뀌면 업로드하지 않고 지웁니다. 대기열은 최대 200개이며, 넘치면 가장 오래된 것부터 지웁니다 |
| 다른 기기의 기록 | 로그인한 경우 다른 기기에서 로그인한 상태로 완주한 트랙 수와 가장 최근 날짜를 캐시로 둡니다. 서버에 다시 묻지 않고 화면에 보이기 위한 값입니다 |
| 액세스 부여 | 코드로 유료 트랙을 이 기기에서 열었다면 그 사실과 부여된 날 |
| 결과 카드 이미지 | 이용자가 공유를 요청할 때 자신의 수치로 그리는 PNG. 앱 자신의 캐시 디렉터리에 씁니다. 카메라 이미지는 들어가지 않습니다. 앱은 그 파일을 시스템 공유 시트에 넘기며, 그다음 어디로 가는지는 이용자의 선택입니다. 캐시는 운영체제가 비우고, 앱의 삭제 기능도 비웁니다 |
기기에도, 서버에도 저장하지 않는 정보는 생년월일, 건강 자가확인 응답, 카메라 프레임, 자세 좌표, 심박 샘플이며, 전화번호는 앱이 아예 묻지 않습니다. 이름도 앱이 묻지 않지만, Android에서는 Google이 발급하는 로그인 토큰에 Google 계정의 이름이 담겨 있고 그 토큰이 수탁자에게 전달되므로 로그인 과정에서 이름이 수탁자에게 도달합니다. 이후 처리는 제5조에 있습니다. 이메일 주소도 앱이 묻지 않습니다. 이메일 주소는 이용자가 로그인을 선택한 경우에만 존재하며, 그때 Apple 또는 Google에서 전달되어 수탁자가 보관합니다. 자세한 내용은 제5조에 있습니다.
이용자의 백업 설정에 따라 기기 백업에 이 앱의 로컬 데이터가 포함될 수 있습니다. iOS에서는 그 백업이 이용자와 Apple 사이의 문제이고, Android에서는 앱이 백업을 허용하므로 이용자와 Google, 또는 해당 기기의 백업 서비스 제공자 사이의 문제입니다. 어느 쪽이든 회사는 그 백업에 접근할 수 없습니다.
4. 선택적 건강 데이터 연결
Android: Health Connect. Android 9 이상에서 Health Connect를 사용할 수 있으면 설정에서 연결을 선택할 수 있습니다. 허용한 경우 관측된 활동 구간의 운동과 활동 칼로리를 저장하며 일시 정지와 관측하지 못한 시간은 제외합니다. 기존 기록을 확인해 중복 저장을 방지합니다. 별도 심박 읽기 권한이 있으면 완료한 세션 구간의 샘플로 평균·최대 심박수를 결과 화면에 표시합니다. 실시간 심박 칩은 없으며 샘플이 없으면 해당 행을 숨깁니다. Android 8에서는 연결 없이 앱을 이용할 수 있습니다. 앱 데이터를 삭제해도 Health Connect에 저장된 기록은 이용자가 그곳에서 관리합니다. 미완료 저장을 정리하는 기기 전용 복구 원장에는 클라이언트 기록 식별자만 보관합니다. 식별자에는 트랙과 세션 시작 시각이 포함될 수 있지만 원시 건강 측정값은 없습니다. 이 원장은 백업·기기 이전에서 제외되며 작업이 정리되면 삭제됩니다. 건강 기록과 심박 샘플은 회사 서버에 보내거나 광고·점수 계산에 쓰지 않습니다. Health Connect에서 권한을 철회해도 앱의 운동을 이용할 수 있습니다.
iOS: ShakeFit이 읽는 것. 이용자가 허용하면 ShakeFit은 Apple 건강 앱에서 다음을 읽습니다.
- 심박수: 세션 중 실시간 BPM과 결과 화면의 평균, 최소, 최대 표시에 사용합니다.
- 활동 에너지: 세션 구간에 건강 앱이 기록한 값을 앱의 추정치와 나란히 보여 주는 데 사용합니다.
- 운동 기록: 같은 시간에 다른 앱이나 Apple Watch가 이미 운동을 기록했는지 확인해 ShakeFit이 운동을 중복 저장하지 않게 하는 데에만 사용합니다.
- 심박 영역: iOS 27 이상에서 건강 설정에 정해 둔 심박 영역을 읽어, 나이로 추정하는 대신 결과 화면의 영역 표시에 사용합니다.
iOS: ShakeFit이 Apple 건강에 저장하는 것(켠 경우에만). 앱 설정에서 「Apple 건강에 저장」을 켜고 iOS 권한 화면에서 허용하기 전에는 아무것도 저장하지 않습니다. 켜 두면 ShakeFit은 끝난 세션을 하나씩 Apple 건강에 운동으로 저장합니다.
- 트랙에 따라 정한 운동 종류(예: 카디오 댄스, 복싱, 심신 수련), 시작과 끝 시각, 실내 운동이라는 사실
- 세션의 활동 에너지. 운동을 실시간으로 기록한 경우(Apple Watch, 또는 iOS 26 이상의 iPhone) 기기가 측정한 값이고, 어떤 기기도 측정하지 않았다면 결과 화면의 추정치와 같은 방법으로 계산한, 안정 시 소모를 뺀 ShakeFit의 추정치입니다. 그 시간에 다른 기기가 이미 활동 에너지를 기록했다면 ShakeFit은 더하지 않습니다. 같은 시간이 두 번 계산되지 않게 하기 위해서입니다.
- 운동을 실시간으로 기록한 경우, 세션 동안 Apple Watch나 연결된 심박 센서가 측정한 심박수. 건강 앱이 이 값을 운동과 함께 보관합니다.
- 같은 세션이 두 번 저장되지 않게 하는 식별자
점수, 판정 등급, 반복 횟수, 카메라에서 나온 어떤 정보도 Apple 건강에 저장하지 않습니다. 같은 시간에 다른 앱이나 Apple Watch가 이미 운동을 기록했다면 ShakeFit은 운동을 하나 더 저장하지 않습니다. Apple 건강에 저장된 운동은 이 기능을 끄거나 ShakeFit 기록을 삭제해도 건강 앱에 남으며, 건강 앱에서 이용자가 관리합니다. 기능을 끄면 새로 저장하지 않습니다.
iOS: Apple Watch 앱. ShakeFit에는 Apple Watch 앱이 들어 있습니다. 「Apple 건강에 저장」이 켜져 있고 워치에 ShakeFit이 설치되어 있으면, 세션을 시작할 때 워치에서도 운동이 시작됩니다. 워치는 심박수와 활동 에너지를 측정해 손목에 보여 주고, 세션 동안 Apple이 제공하는 기기 간 직접 연결로 iPhone의 ShakeFit에 보냅니다. 회사 서버를 거치지 않습니다. 세션이 끝나면 워치가 운동을 Apple 건강에 저장합니다. 워치 앱은 세션이 끝난 뒤 아무것도 보관하지 않습니다.
iOS: 건강 데이터의 처리.
- 앱이 읽은 건강 데이터는 세션과 결과 화면 표시를 위해 메모리에서만 사용합니다. 앱 저장소에 저장하지 않고, 업로드하지 않으며, 누구와도 공유하지 않습니다. 앱이 저장하는 것은 이용자 기기의 Apple 건강에만 들어갑니다.
- 건강 데이터는 광고, 마케팅, 그와 유사한 목적으로 사용하지 않으며 이용자 프로파일링에도 사용하지 않습니다.
- iPhone에는 심박 센서가 없습니다. 실시간 값은 Apple Watch나 연결된 심박 센서(가슴 스트랩, iOS 26 이상에서는 호환 이어폰)가 심박을 측정하는 동안에만 들어옵니다. 샘플이 없으면 앱은 0을 표시하지 않고 아무것도 표시하지 않습니다.
- 심박수와 심박 영역은 표시에만 씁니다. 점수, 판정 등급, 별, XP에는 들어가지 않습니다.
- 건강 권한이 없어도 앱의 다른 모든 기능은 정상 동작합니다. iOS 설정의 개인정보 보호 및 보안에서 건강, ShakeFit 순으로 들어가 읽기와 저장 권한을 언제든지 허용하거나 철회할 수 있습니다.
이 내용은 Apple 심사 대응 형식으로 health-data.ko.md에 따로 정리해 두었습니다. 그 문서도 같은 이유로 iOS 연동만 다룹니다. Android에는 해당 연동이 없습니다.
5. 기기를 떠나는 정보
ShakeFit에는 선택적 서버 백엔드가 있습니다. 빌드 설정으로 켜지며, 꺼져 있으면 앱은 보낼 곳 자체가 없어 완전히 로컬로만 동작합니다. 켜진 경우 기기를 떠나는 것은 정확히 다음과 같습니다.
익명 계정. 앱은 기본적으로 백엔드에 익명으로 로그인합니다. 이메일, 비밀번호, 이름이 없습니다. 결과물은 수탁자가 보관하는 임의의 계정 식별자와 기기에 남는 임의의 설치 식별자입니다. 회사는 이 값을 이용자의 신원과 연결하지 않습니다. GDPR 등 일부 법령에서는 이런 식별자도 개인정보에 해당하므로 여기에 명시합니다.
이메일 주소 (로그인한 경우에만). 로그인 없이 운동할 수 있습니다. 활성화된 진행 백업과 명시 복원은 로그인이 필요하고, 커뮤니티는 로그인과 별도 참여 동의가 필요합니다. Apple과 Google 제공자의 표시 여부는 플랫폼과 출시 설정에 따라 달라집니다.
로그인하면 제공자가 이름과 이메일 주소를 ShakeFit에 제공할지 확인합니다. 제공자가 보낸 값은 수탁자인 Supabase로 전달되며, Supabase는 계정 레코드에 이메일 주소를 저장합니다. Google 인증에는 Google 계정의 이름이 포함될 수 있으며 Supabase가 계정과 함께 보관합니다. 네이티브 Apple 로그인은 이름을 별도 필드로 반환하지만 ShakeFit은 읽거나 전송하지 않습니다. 브라우저 기반 제공자가 활성화되면 제공자는 Supabase와 직접 통신하고 이름 등 프로필 필드를 계정 메타데이터로 포함할 수 있습니다. 제공자의 이름은 커뮤니티 닉네임으로 사용하지 않습니다. Sign in with Apple에서 "이메일 가리기"를 선택하면 개인 주소 대신 Apple이 생성한 릴레이 주소가 저장됩니다. 어느 쪽이든 이메일 주소이므로 수집 항목으로 여기에 기재합니다.
ShakeFit의 코드는 이 주소도 이름도 읽지 않습니다. 앱 화면에 표시하지 않고, 연락에 쓰지 않으며, 마케팅에 쓰지 않고, 다른 서비스의 정보와 대조하지 않습니다. 이 주소가 존재하는 이유는 수탁자가 계정의 일부로 보관하기 때문입니다. 기록을 삭제하면 계정과 함께 이 주소도 삭제되며, 그 절차는 제10조에 있습니다. 로그인하지 않으면 이용자의 이메일 주소는 회사 시스템 어디에도 존재하지 않습니다.
세션 요약. 세션을 마치면 다음 항목이 전송됩니다. 트랙 ID, 운동 수, 유효 렙 수, 무효 렙 수, 최고 콤보, 유효 시간, 트래킹 손실 횟수, 유효 세션 여부, 소스(카메라 또는 리플레이), 클라이언트 시각입니다.
제품 계측 이벤트. 회사의 자체 이벤트 스키마이며 원시값만 담습니다. 호출부는 사용자가 입력한 자유 텍스트 대신 정해진 ID·분류·집계 숫자만 보냅니다. 중첩 객체·배열·비유한 숫자는 저장 전에 거부하며, null은 측정값이 없음을 뜻합니다. 현재 빌드가 전송하는 이벤트는 다음과 같습니다.
| 이벤트 | 항목 |
|---|---|
onboarding_step | 스텝 이름, 단계(노출, 완료, 건너뛰기, 카메라 의사, 이연 프로필 제안/저장/건너뜀), 카메라 허용 의사 |
onboarding_complete | 주간 목표 |
app_error | 오류 메시지 해시·화면 식별자·앱 버전. 메시지 원문·스택·개인정보 없음 |
session_start | 트랙 id, 무음 모드 여부, 재시작 여부, 데모 리플레이 표식, 코치 ID |
session_complete | 위 세션 요약 항목, 브리지 건너뛰기 수, 판정 렙 수, 실제 블록 번호·단계·동작 ID, 일시정지를 뺀 재생 경과 시간·블록 내 시간, 방문한 회복 창의 관측 렙/기대 렙 비율, 선택 길이, 저충격 대체·Easy 여부, 카메라/따라하기 구분. 미측정 값은 null, 따라하기 판정 렙은 0 |
star_upgrade | 트랙 id, 이전·새 별 개수 |
reminder_optin | 허용 여부 |
journey_action | 알림·위젯 진입 출처, 목적지, 관찰된 열기·화면 도달·운동 시작·완료 단계, 진입 후 경과 시간. 클릭을 완료로 간주하지 않습니다 |
reminder_preference | 저장된 알림 제어 설정 종류와 켜짐 여부. OS 권한 거절과 별도로 기록합니다 |
reminder_open | 리마인더 종류 |
free_shelf_view | 없음 |
upsell_view | 없음 |
share_card | 카드 종류 |
session_abandon | session_complete와 같은 재생·요약 필드. 준비 중 이탈은 트랙 ID와 단계만 전송 |
session_pause | 실제 일시정지 시 트랙 ID, 블록·단계·동작, 일시정지를 뺀 경과·블록 시간, 회복 비율 또는 null, 선택 길이, 대체·Easy 여부, 플레이어 구분 |
session_retry | 결과 화면에서 같은 트랙을 다시 시작할 때 트랙 ID와 플레이어 구분 |
review_request_attempt | 네이티브 리뷰 API 호출. 실제 표시·리뷰 완료를 뜻하지 않음 |
review_request_result | 네이티브 지원·저장·API 결과. 표시 여부·평점은 수집하지 않음 |
review_link_result | 수동 스토어 링크 전달 또는 실패 |
paywall_plan_selected | 진입 맥락, 선택 상품 ID·스토어 오퍼 ID·기본 선택 또는 사용자 직접 선택 여부 |
paywall_exit | 진입 맥락과 종료 이유 |
purchase_result | 진입 맥락·상품 ID·구매 결과·검증된 이용 권한 여부 선택적 지연 귀속 방식(sdk_pending_correlation) |
restore_result | 진입 맥락과 복원 결과 |
paywall_dismiss | 진입 맥락과 닫은 사유 |
purchase_complete | 진입 맥락·상품 ID·확인된 이용 권한 여부. 스토어 체험을 포함할 수 있어 매출을 뜻하지 않습니다 선택적 지연 귀속 방식(sdk_pending_correlation) |
app_active | 속성 없음. 성인 메인 화면 포그라운드 활성과 재방문 집계 |
paid_subscription_active | 앱 이용 시 확인한 체험 외 구독 기간의 상품 ID. 매출 금액은 아님 |
preview_wall_view | 예고된 첫 블록 맛보기 종료 지점의 트랙 ID와 카메라·따라하기 모드 |
paywall_view | 주간 플랜·성장 리포트·세션 만들기·트랙 맛보기·결과·온보딩 진입 맥락 |
purchase_start | 페이월 진입 경로, 상품 ID, 스토어 오퍼 ID, 무료 체험 확인 여부 |
trial_start | 상품 ID, 진입 맥락, 구매 완료 여부 선택적 지연 귀속 방식(sdk_pending_correlation) |
dashboard_view | 없음 |
새 트랙 알림 등록(켠 경우에만). 알림 설정에서 새 트랙 알림을 켜면 앱이 기기의 알림 서비스(iOS는 Apple Push Notification service, Android는 Firebase Cloud Messaging)에 기기 토큰을 요청하고, 그 토큰과 플랫폼, 언어, 시간대, 알림 선택, 예약 시각을 Supabase에 보냅니다. 이 알림 종류를 켜기 전에는 앱 자체 코드가 기기 토큰을 요청하지 않고 Supabase에 등록을 보내지 않습니다. 다만 Android 앱 버전 1.4.2에서는 앱이 시작될 때 Firebase Cloud Messaging 라이브러리가 알림을 켜기 전에도 Google에서 기기 토큰을 받습니다. 이 토큰은 알림 전달을 위해 Google이 보관하며 회사에 보내지 않습니다. 다음 Android 버전부터는 알림을 켜기 전에 토큰을 받지 않습니다. 이용 방법은 제13조에 있으며, 끄면 등록이 삭제됩니다.
네트워크 메타데이터. 모든 네트워크 요청과 마찬가지로 요청에는 IP 주소와 시각이 포함되며 호스팅 수탁자가 이를 로그로 남깁니다.
선택 로그인 진행 백업(다음 출시 기능, 활성화한 빌드에서만). 이용자가 로그인을 선택하면 운동별 XP, 유효 세션 총수, 마지막 활동 날짜가 붙은 연속 기록, 해금 표시, 획득 날짜가 붙은 배지, 달성 주 원장, 안무 버전과 실행 fingerprint별 최고점·별·등급을 계정 전용 snapshot으로 저장합니다. 레벨은 XP에서 계산합니다. 이 백업은 앱 기능 제공에만 쓰며 광고나 공개 순위에 쓰지 않습니다. 개별 운동 전체 이력·신체값·추정 칼로리·건강 정보·원시 포즈는 포함하지 않습니다. 다른 기기의 진행을 적용하려면 이용자가 「진행 복원」을 선택해야 하며, 로컬 운동 이력을 만들어 채우지 않습니다. 최초 동기화 계정이 기기의 진행 연결을 소유합니다. 다른 계정에서는 업로드와 복원을 모두 차단하며 원래 계정으로 돌아오거나 확인 후 기기 기록만 삭제해야 연결을 바꿀 수 있습니다. 기기 전용 삭제는 서버 백업을 보존하고, 계정 삭제는 백업도 삭제합니다. 백업은 계정 삭제 때까지 보관합니다. 업로드 실패 때는 소유 계정이 표시된 snapshot 하나를 기기에 두고 재시도합니다.
이 요약·계측·선택 진행 백업·선택 새 트랙 알림 등록에 명시한 범위 밖의 정보는 업로드하지 않습니다. 특히 나이, 키, 체중, 성별, 체지방률, 골격근량, 체중 기록, 감량 목표, 추정 칼로리, 근육 볼륨, 언어, 설정, 카메라 프레임, 자세 좌표, 심박수는 업로드하지 않습니다.
리뷰 요청 자격은 첫 이용 시각과 네이티브 요청 시도 시각을 기기에 저장하여 관리합니다. API 호출로 리뷰 창의 실제 표시나 리뷰 제출 여부를 알 수 없으며 이를 수집하지 않습니다.
계측 이벤트는 네트워크가 없을 때 기기에 최대 500건까지 보관하고 초과분은 오래된 것부터 폐기하며, 다음 앱 시작이나 세션 종료 시 전송을 시도합니다.
이 조는 앱이 전송하는 정보에 관한 것입니다. 기기 백업은 앱이 아니라 운영체제가 수행하는 별개의 경로이며, 제3조에 적어 두었습니다.
선택 커뮤니티(다음 출시 준비, 적용 확인 전 비활성)
닉네임을 정하고 참여한 경우, 이후 참여 조건을 충족한 카메라 운동에서 시도 식별자·종류(카탈로그/Daily/custom)·UTC 활동 일자·계획 시간·관측된 움직임 시간·관측 렙 수·앱 버전을 전송할 수 있습니다. 계정에 묶인 참여 nonce는 요청을 승인하는 용도입니다. 실행 구성·포즈·원점수·신체값·칼로리·건강 기록은 이 기능으로 전송하지 않으며 과거 운동 이력을 소급 업로드하지 않습니다. 이 값은 활동 시간과 활동일 집계용이며 하드웨어가 증명한 성과라고 주장하지 않습니다.
친구 모임에는 직접 정한 닉네임·활동 분·활동일만 표시됩니다. 별도로 참여한 주간 리그도 실제 조건 충족자가 5명 이상일 때 같은 항목을 표시합니다. 내부의 불투명 식별자는 신고·차단에 사용합니다. 로그인 제공자의 실명이나 이메일을 표시 이름으로 쓰지 않습니다. 한 주와 활동 날짜는 UTC 기준이며 하루에 집계하는 활동은 최대 3시간입니다.
모임 구성원·무작위 초대 코드·참여 설정·차단·신고 정보는 선택 기능 운영에 사용합니다. 신고에는 대상·정해진 사유·신고 당시 닉네임·처리 상태가 포함되며 운영자는 계정을 제한하고 감사 기록을 남길 수 있습니다. 공개 채팅·이미지 업로드·자유 입력 신고는 없습니다. 문의는 contact@shakefit.app으로 보내며 기존 고객 지원과 같이 영업일 3일 이내 답변을 목표로 합니다.
커뮤니티 프로필·모임·차단·활동은 커뮤니티 탈퇴 또는 계정 삭제까지 보관합니다. 관련 커뮤니티 프로필/계정이 삭제되면 신고와 그 감사 기록도 지웁니다. 탈퇴 후 재참여로 제재를 우회하지 못하도록 이용 제한 기록은 계정 삭제까지 유지합니다. 기기에서만 삭제하면 서버의 참여는 남습니다. 서버에서 나가려면 로그인 후 커뮤니티 나가기를 선택하거나 계정을 삭제하거나 고객 지원에 요청하세요. 오프라인 변경은 대기로 표시하며 서버 처리 완료라고 표시하지 않습니다. 계정에 묶인 재전송 대기 행과 미전송 닉네임·초대 코드 입력은 기기에 보관하고 기기 기록 삭제 시 지웁니다. 로그인과 별도 참여가 필요한 이 기능은 커뮤니티 제공 목적으로만 사용하며 광고·추적에 쓰지 않습니다.
6. 처리 목적과 근거
| 목적 | 사용 항목 | GDPR상 처리 근거 |
|---|---|---|
| 앱 기능 제공(판정, 기록, 진행, 설정) | 제3조의 항목, 기기 내 처리 | 계약의 이행 |
| 세션 중과 직후 심박 표시 (iOS 전용) | Apple 건강 데이터, 메모리 내 처리 | iOS 건강 권한을 통한 동의 |
| 동작 판정 | 카메라 프레임, 기기 내 처리 | 기기의 카메라 권한을 통한 동의 및 계약의 이행 |
| 이용자가 어디서 이탈하는지, 세션이 완료되는지 파악해 앱을 개선 | 계정 식별자, 세션 요약, 계측 이벤트 | 앱 개선에 관한 정당한 이익. 요약값만 전송하고 개인적 세부 정보와 제3자 분석을 배제해 균형 확보 |
| 로그인을 선택한 경우, 다른 기기 완주 집계와 선택 진행 백업·복원 제공 | 계정 식별자, 로그인 제공자가 전달한 이메일 주소, 세션 요약, 선택 진행 snapshot | 이용자의 요청에 따른 계약의 이행. 로그인으로 시작하고 기록 삭제로 종료합니다 |
| 새 트랙 알림을 켠 경우 출시마다 한 번 안내 | 기기 토큰, 플랫폼, 언어, 시간대, 알림 선택, 예약 시각 | 이 알림 종류를 켜는 것으로 표시한 동의. 끄면 철회됩니다 |
| 구독 판매와 복원 | 구매한 스토어(iOS는 Apple, Android는 Google)와 RevenueCat의 구매 상태 | 계약의 이행 |
| 법적 의무 이행과 분쟁 대응 | 법령상 보관이 요구되는 기록 | 법적 의무 및 정당한 이익 |
회사는 이용자에게 법적 효력이 있거나 그에 준하는 중대한 영향을 미치는 자동화된 결정을 하지 않습니다. 판정은 게임 점수입니다.
7. 처리 위탁과 제공
회사는 개인정보를 판매하지 않으며 광고 목적으로 공유하지 않습니다.
| 수령자 | 전달 내용 | 지위와 처리 지역 |
|---|---|---|
| Supabase(백엔드 제공자) | 서버 동기화가 켜진 경우 계정, 세션 요약, 선택 진행 백업, 계측 이벤트, IP 주소를 포함한 요청 메타데이터. 로그인한 경우 로그인 제공자가 전달한 이메일 주소도 포함하며 Supabase가 계정 레코드에 보관합니다 | 수탁자. 호스팅 리전 대한민국 서울(ap-northeast-2) |
| RevenueCat | 구독과 구매 상태. 식별자는 RevenueCat이 자체 생성하며 회사는 자체 식별자를 전달하지 않습니다 | 구독 상태 처리 수탁자. 미국 |
| Apple (iOS 전용) | App Store에서의 결제, 청구, 환불, 구독 관리. Sign in with Apple을 선택하면 로그인 절차를 Apple이 수행하므로 이용자가 ShakeFit에 로그인했다는 사실을 Apple이 알게 되며, Apple이 이메일 주소 또는 이용자가 선택한 릴레이 주소를 회사에 전달합니다. 새 트랙 알림을 켜면 회사 서버가 알림 전달을 위해 Apple Push Notification service에 기기 토큰, 알림 문구, 카탈로그 트랙 ID를 보냅니다. 그 밖에 회사는 앱 이용 내역을 Apple에 보내지 않습니다. 이 관계에는 Apple의 개인정보처리방침이 적용됩니다 | App Store와 Sign in with Apple에 관한 독립 처리자. 새 트랙 알림을 켠 경우 Apple Push Notification service로 알림을 전달합니다(미국 및 Apple이 운영하는 국가). Apple 건강 데이터는 기기에 남으며 회사가 Apple로 보내지 않습니다 |
| Google (Android 전용) | Google Play에서의 결제, 청구, 환불, 구독 관리. Google 로그인을 선택하면 로그인 절차를 Google이 수행하므로 이용자가 ShakeFit에 로그인했다는 사실을 Google이 알게 되며, Google이 이메일 주소를 회사에 전달합니다. 새 트랙 알림을 켜면 앱이 기기에서 Firebase Cloud Messaging에 등록해 기기 토큰을 받고(앱 버전 1.4.2에서는 제5조에 적은 것처럼 앱이 시작될 때도 등록합니다), 회사 서버가 알림 전달을 위해 그 토큰과 알림 문구, 카탈로그 트랙 ID를 Firebase Cloud Messaging에 보냅니다. 그 밖에 회사는 앱 이용 내역을 Google에 보내지 않습니다. 이 관계에는 Google의 개인정보처리방침이 적용됩니다 | Google Play와 Google 로그인에 관한 독립 처리자. 새 트랙 알림을 켠 경우 Firebase Cloud Messaging으로 알림을 전달합니다(미국 및 Google이 운영하는 국가) |
Cloudflare(assets.shakefit.app, R2 정적 파일 호스팅) | 코치 그림 팩 다운로드 요청의 IP 주소, User-Agent, 요청 시각. 이 요청에 계정·운동 데이터는 보내지 않습니다 | 파일 전송 처리 수탁자. 미국 |
| 수사기관 등 | 법령이 요구하는 범위에서, 요청의 적법성을 확인한 뒤에만 | 법령에 따름 |
앱이 정보를 보내는 수령자는 위 표가 전부입니다. 특히 광고 네트워크, 어트리뷰션 제공자, 제3자 분석 SDK가 앱에 없습니다. 기기 백업은 앱이 보내는 것이 아니라 운영체제가 수행하는 별개 경로이며 제3조에 적었습니다. 음악과 앱에 포함된 코치 음성·가이드 동작은 기기에서 재생됩니다. 추가 코치 그림 팩은 Wi-Fi에서 자동으로, 또는 이용자가 받기를 요청할 때 https://assets.shakefit.app에서 다운로드합니다. 받은 팩은 무결성을 확인해 기기에 저장한 뒤 로컬에서 재생합니다. 선택 다운로드 코치 음성 팩도 제공될 때 이용자의 명시적 요청으로 같은 호스트에서 받으며, 이 자산 요청에 계정·운동 데이터는 포함하지 않습니다. 사전 생성 클립이 없는 문구는 기기에 내장된 음성 합성으로 대체되며, 이 처리도 기기 안에서 일어납니다.
8. 국외 이전
서버 동기화가 켜진 경우 계정 레코드(로그인한 경우 그 계정의 이메일 주소 포함), 세션 요약, 계측 이벤트는 대한민국 서울(ap-northeast-2)에 저장됩니다. RevenueCat과 구매한 스토어(Apple 또는 Google)는 미국을 포함해 각 사가 운영하는 국가에서 처리합니다. 코치 자산 다운로드 요청의 IP 주소·User-Agent·요청 시각도 파일 전송을 위해 미국의 Cloudflare로 이전되며, 계정·운동 데이터는 포함하지 않습니다. 새 트랙 알림을 켜면 기기 토큰, 알림 문구, 카탈로그 트랙 ID가 알림 전달만을 위해 미국 및 각 사가 운영하는 국가의 Apple Push Notification service(iOS) 또는 Firebase Cloud Messaging(Android)으로 이전됩니다.
유럽경제지역, 영국, 스위스에 거주하는 이용자의 경우 해당 지역 밖으로의 이전은 유럽연합 집행위원회의 표준계약조항 또는 각 수탁자의 데이터 처리 약관에 포함된 다른 적법한 이전 수단에 근거합니다.
대한민국 이용자의 경우 이전받는 자, 이전 항목, 이전 목적, 보유 기간, 이전 국가는 제5조, 제7조, 제9조에 기재한 내용과 같습니다. 이전을 거부할 수 있습니다. 앱의 설정에서 「모든 기록 삭제」를 실행하면 서버에 보관된 요약과 계측이 계정과 함께 지워지고, 그 뒤 앱에 네트워크 연결을 허용하지 않으면 더 이상 이전되지 않습니다. 거부해도 앱의 로컬 기능은 그대로 동작합니다.
9. 보유 기간
선택 로그인 진행 백업은 계정 삭제 때까지 보관합니다. 기기 기록만 삭제하면 서버 백업은 남습니다.
| 저장 위치 | 기간 |
|---|---|
| 이용자 기기 | 앱에서 기록을 삭제하거나 앱을 삭제할 때까지. 세션 이력과 체중 기록은 최근 400건을 유지하고 초과분은 자동으로 폐기됩니다 |
| 서버의 세션 요약과 계측 이벤트 | 앱에서 삭제할 때까지, 어떤 경우에도 수신일로부터 24개월 이내 |
| 계정 레코드 자체(익명 또는 로그인 계정), 로그인 계정의 이메일 주소 포함 | 앱에서 기록을 삭제할 때까지. 그 삭제가 계정을 함께 지웁니다. 제10조 참조 |
| Cloudflare가 처리하는 자산 요청 메타데이터 | Cloudflare의 해당 서비스·데이터 처리 약관에 따라 보유하며, 회사는 계정·운동 기록을 첨부하지 않습니다 |
| 서버의 새 트랙 알림 등록 | 이 알림 종류를 끄거나, 앱이 갱신하지 않은 채 90일이 지나거나, 계정을 삭제할 때 중 가장 빠른 때까지 |
| 구매한 스토어(iOS는 Apple, Android는 Google)와 RevenueCat이 보유하는 결제 기록 | 각 사가 자사 방침에 정한 기간, 그리고 회사가 세무와 회계 의무 이행에 필요한 기간 |
10. 이용자의 선택과 권리
진행 연결 계정 변경. 진행 카드에는 확인을 거치는 기기 전용 삭제 경로가 있습니다. 로컬 기록·진행 계정 연결·로그인 상태를 지우지만 서버 백업은 보존하므로 초기 설정 후 다시 로그인하여 명시적으로 복원할 수 있습니다.
기기의 모든 기록 삭제. 프로필에서 데이터로 들어가면 보관 중인 기록 수를 확인할 수 있습니다. 확인 후 삭제 버튼을 길게 누르면 프로필, 세션 이력, 체중 기록, 감량 목표, 체성분 입력값, 설정, 진행 상황, 트랙 기록이 삭제됩니다. 연령 차단 표시는 데이터 삭제로 연령 확인을 우회할 수 없도록 의도적으로 유지합니다. 삭제는 되돌릴 수 없습니다.
서버에 있는 정보와 계정 삭제. 같은 삭제 동작이 서버에 세션 요약, 계측 이벤트, 프로필 행, 그리고 계정 레코드 자체의 삭제를 요청하고, 기기의 세션 토큰을 폐기합니다. 서버에서는 이 전체가 한 번의 처리로 실행되므로, 일부라도 실패하면 아무것도 적용되지 않고 앱이 실패를 그대로 알리며 기기의 기록도 지우지 않습니다.
익명 계정이든 로그인으로 만든 계정이든 동일합니다. 로그인 계정을 삭제하면 그 계정에 보관 중이던 이메일 주소도 함께 삭제되며, 나중에 다시 로그인해도 이용자를 알아보기 위한 정보는 남지 않습니다. 계정 삭제로 구독이 해지되지는 않습니다. 구독은 구매한 스토어가 보유하므로 해지는 그곳에서 해야 하며, 방법은 고객지원 페이지에 있습니다.
오프라인 등의 이유로 서버 삭제가 완료되지 않으면 앱이 그 사실을 알리고 기기에서만 지우는 선택지를 제공합니다. 그 경우 contact@shakefit.app 으로 요청해 주시면 확인 후 30일 내에 서버 사본을 삭제합니다.
원하지 않는 부분 끄기. 카메라 권한은 세션 판정에만 필요합니다. iOS에서는 설정에서 카메라 권한과 건강 권한을 언제든지 철회할 수 있고, 건강 권한은 심박 표시, Apple 건강 에너지 표시, 운동 저장에만 필요합니다. Android에서는 설정에서 앱, ShakeFit, 권한 순으로 들어가 카메라 권한을 철회할 수 있으며, 건강 권한은 앱이 요청하지 않으므로 철회할 대상 자체가 없습니다.
직접 문의. 열람, 정정, 삭제, 처리 정지, 처리에 대한 반대, 서버가 보유한 내용의 사본 요청, 동의 철회는 contact@shakefit.app 으로 요청하십시오. 로그인한 적이 없으면 회사가 이름과 이메일 주소를 보유하지 않으므로 기록을 찾기 위해 기기의 식별자가 필요할 수 있고, 그 확인 방법을 안내합니다. 로그인한 경우에는 제공자가 전달한 이메일 주소(릴레이 주소 포함)로 계정을 확인할 수 있습니다. 기록을 특정할 수 없으면 추측하지 않고 그 사실을 알립니다.
거주 지역에 따라 감독기관에 신고할 권리도 있습니다. 대한민국은 개인정보보호위원회, 유럽경제지역과 영국은 각국 데이터 보호 감독기관입니다.
앱에는 데이터 내보내기 기능이 없습니다.
11. 아동
일반 앱을 독립적으로 이용하려면 만 13세 이상이어야 하며, 앱의 EU 지역 설정에서는 만 16세 이상이어야 합니다. 기존 연령 확인은 유지됩니다. 아동이 성인 나이를 입력하거나 성인 프로필을 자신의 계정으로 이용해서는 안 됩니다. 관련 법령이 더 높은 연령의 보호자 동의를 요구하면 그 요건도 적용됩니다.
가족 함께하기 영역은 제거되었습니다. 이전 버전의 보호 잠금이 남아 있거나 잠금 상태를 읽을 수 없으면 일반 앱을 열지 않습니다. 기기에서 보호자 확인을 통과하고 잠금 삭제가 성공한 뒤에만 일반 앱과 분석·백엔드·결제·건강 기능을 시작할 수 있습니다. 이 확인은 신원 인증이 아닙니다. 가족 완료 횟수는 더 이상 읽거나 사용하지 않으며, 앱 전체 기록 삭제로 지울 수 있습니다.
12. 안전 조치
- 유출 위험이 가장 큰 카메라 프레임과 자세 좌표는 이를 저장하거나 전송하는 코드가 아예 없다는 사실로 보호됩니다.
- 기기의 데이터는 iOS와 Android가 강제하는 앱 샌드박스 안, 앱 전용 저장 영역에 있으며 기기 암호와 암호화 설정의 보호를 받습니다.
- 서버 접근은 행 수준 보안으로 계정별로 격리되어, 익명이든 로그인이든 한 계정이 다른 계정의 행을 읽을 수 없습니다. 앱에는 공개 API 키만 포함되며 서비스 키는 포함되지 않습니다.
- 로그인 시에는 Apple 또는 Google이 발급한 로그인 토큰을 수탁자와 직접 교환해 세션을 만듭니다. 회사는 비밀번호를 받지도 보관하지도 않으며, 재설정할 비밀번호 자체가 없습니다.
- 기기의 세션 토큰은 일반 앱 저장 영역이 아니라 운영체제 키체인에 보관합니다.
- 서버 통신은 HTTPS를 사용합니다.
- 운영 데이터 접근은 필요한 인원으로 제한하며 모든 수탁자와 데이터 처리 계약을 체결합니다.
완전한 시스템은 없습니다. 유출이 이용자에게 영향을 미치는 경우 법령이 정한 대로 이용자와 관계 기관에 통지합니다.
13. 광고성 정보
로컬 리마인더는 선택 기능입니다. 알림 설정에서 새 트랙 알림을 별도로 켤 수 있습니다. 켜면 출시마다 한 번 안내하기 위해 APNs 또는 FCM 기기 토큰, 플랫폼, 언어, 시간대, 알림 선택과 예약 시각을 Supabase에 보관합니다. 조용한 시간·일시 중지와 로컬 알림을 합친 주간·일일 상한을 지킵니다. 이 기록에는 자세·건강 측정값·결제 상태가 없으며 광고나 앱 간 추적에 사용하지 않습니다. 등록은 갱신 없이 90일이 지나면 만료되고 계정을 삭제하면 함께 삭제됩니다. 이 종류만 끄거나 리마인더를 모두 끌 수 있습니다. 오프라인에서 한 변경은 앱이 다시 연결될 때 서버에 전달되므로 이미 접수된 알림이 도착할 수 있습니다. 로그인 계정의 이메일은 발송 목록에 넣지 않습니다. 홈 위젯은 주간 진행·연속 주·카탈로그 트랙명·코치 일러스트를 표시할 수 있으며 설정에서 진행 표시를 끌 수 있습니다. 잠금화면 위젯의 진행 링에는 시스템의 민감정보 보호 표시를 적용합니다.
지원하는 기기에서는 위젯과 사용자가 켠 실시간 현황에 일반적인 운동 상태와 앱으로 돌아가는 동작을 표시합니다. 앱과 확장 기능은 같은 기기에서 표시용 상태·갱신/만료 시각을 공유하며 서버 푸시 토큰을 요청하지 않습니다. 잠금화면에 체중·칼로리·심박·트랙 이름·진행 횟수는 보내지 않습니다. 앱이 배경으로 가면 운동을 계속한다고 표시하지 않습니다. 알림 유형·방해 금지 시간·일시 중지·횟수 제한은 앱 설정에서 관리합니다. 첫 주 신뢰 안내 이력과 미확정 결제 진입 경로, 알림/위젯 행동 연결 이력은 기기에 저장하며 전체 기록 삭제로 지웁니다. 지연 결제 귀속의 sdk_pending_correlation은 상품·날짜에 근거한 상관관계이며 특정 거래의 증명이나 매출 확인이 아닙니다.
14. 웹사이트
https://shakefit.app 은 정적 파일만 제공합니다. 페이지는 분석 스크립트, 광고 스크립트, 제3자 임베드를 불러오지 않으며 아무 정보도 수집하지 않습니다. 이메일 수집을 시작하는 경우 무엇을 수집하고, 왜 수집하며, 얼마나 보관하고, 어떻게 삭제하는지를 이 방침에 먼저 반영합니다.
15. 방침의 변경
새 버전은 버전 번호와 날짜를 붙여 https://shakefit.app/privacy 에 게시합니다. 이미 제공받은 정보의 이용 방식이 달라지는 변경은 시행일로부터 최소 30일 전에 앱에서 안내합니다. 수집 항목이나 이용 방식이 바뀌지 않는 정정, 새 기능의 설명 같은 그 밖의 변경은 게시한 날부터 시행하며, 변경 이력에 하나씩 기록합니다.
관련 문서
- 이용약관:
terms-of-use.ko.md, 게시 위치 https://shakefit.app/terms - 건강 데이터 고지:
health-data.ko.md. Apple 건강 앱 연동에 관한 문서이며, 이 연동은 iOS에만 있습니다 - 영어 정본:
privacy-policy.md
변경 이력
| 버전 | 날짜 | 변경 내용 |
|---|---|---|
| 1.12 | 2026-10-27 | 게시일인 2026-10-27부터 시행. 정정입니다. 앱 버전 1.4.2에서 이미 새 트랙 알림(제13조)을 켤 수 있는데, 버전 1.11은 그때 무엇이 전송되는지 적지 않았습니다. 제5조·제6조·제7조·제8조·제9조에 그것을 적었습니다. Apple Push Notification service 또는 Firebase Cloud Messaging에 대한 기기 토큰 요청, Supabase에 보관하는 등록, 전달을 위해 Apple 또는 Google에 넘기는 알림 문구와 카탈로그 트랙 ID, 처리 근거, 등록 보유 기간입니다. 제5조에는 Android 앱 버전 1.4.2에서 앱이 시작될 때 Firebase 라이브러리가 Google에서 기기 토큰을 받으며 회사에는 보내지 않는다는 것과, 다음 Android 버전부터 이를 멈춘다는 것도 적었습니다. 이 Android 토큰을 빼면 이 알림 종류를 켜지 않은 이용자에게 바뀌는 것이 없으며, 이전에 제공한 정보의 이용 목적 변경은 없습니다 |
| 1.11 | 2026-10-25 | 게시일인 2026-10-25부터 시행. 수령자와 국외이전에 Cloudflare 자산 전송을 추가하고, 재생 자산에 외부 다운로드가 없다는 문장을 정정. Wi-Fi 코치 그림 팩 자동 다운로드는 유지 |
| 1.10 | 2026-10-23 | 2026-10-23부터 시행. 분석 이벤트 paywall_dismiss·purchase_complete·app_active·paid_subscription_active·preview_wall_view와 중복 계측을 막는 로컬 구독 기간 토큰을 설명. 가족 영역 종료와 기존 잠금의 보호자 확인 전환 절차를 반영. 이전에 제공한 정보의 이용 목적 변경 없음 |
| 1.9 | 2026-10-16 | 2026-10-16 부터 시행합니다. 카메라 없는 학습 완료, 스토어 리뷰 요청 시도 이력, 보호자 동반 만 6~12세의 별도 가족 영역을 설명합니다. 이전 정보의 이용 목적은 바뀌지 않습니다 |
| 1.0 | 2026-07-27 | 최초 작성. 커밋 6a77bf9 시점 소스와 항목별 1:1 대조. 검수 기록은 review-notes.md |
| 1.8 | 2026-10-09 | 2026-10-09 부터 시행합니다. 정정입니다. 제1조·제5조·제6조는 로그인하면 다른 기기에서 하던 것을 이어 가거나 기존 기록을 이어서 볼 수 있다고 적었습니다. 실제로 로그인이 하는 일은 로그인한 상태에서 완주한 트랙 수와 가장 최근 날짜를 다른 기기에서 보여 주는 것입니다. 레벨·연속 기록·배지는 얻은 기기에 남고, 로그인하지 않은 상태에서 완주한 트랙은 포함되지 않습니다. 제3조는 그 캐시가 날짜도 담는다는 것과, 로그인하면 대체된 익명 세션의 토큰을 서버가 그 계정의 삭제를 확인할 때까지 키체인에 보관하되 90일이 지나면 앱을 처음 열 때 지운다는 것과, 업로드를 기다리는 세션 요약은 세션을 마친 때 쓰던 계정으로만 올라가고 그 전에 계정이 바뀌면 업로드하지 않고 지운다는 것을 적습니다. 수집하는 항목과 이용 방식은 달라지지 않았습니다 |
| 1.7 | 2026-10-09 | 2026-10-09 부터 시행합니다. 동작을 시연하는 가이드가 추상적인 도형에서 일러스트 코치 둘로 바뀌었습니다. 버전 1.6 은 제2조에서 앱이 그리는 도형 하나에 얼굴과 손이 없다고 적었는데, 얼굴과 손이 있는 코치가 화면에 나오면 그 문장은 사실이 아니게 됩니다. 그래서 제2조가 둘을 나눠 적습니다. 이용자의 관절 좌표로 그리는 스켈레톤에는 여전히 얼굴과 손이 없고, 코치는 미리 만들어 앱에 넣어 둔 일러스트이며 카메라 영상이나 이용자의 자세로 그리지 않습니다. 카메라 데이터의 처리는 달라지지 않았습니다. 얼굴 좌표와 손끝 좌표는 여전히 네이티브 모듈 안에서 폐기되고, 카메라 영상·카메라 이미지·자세 데이터는 저장하거나 전송하지 않습니다. 제15조도 바뀌었습니다. 종전에는 모든 변경을 시행 7일 전에 앱에서 안내한다고 적었습니다. 이번처럼 설명을 바로잡을 뿐 수집 항목이나 이용 방식이 바뀌지 않는 변경은 이제 게시한 날부터 시행합니다. 이미 제공받은 정보의 이용 방식이 달라지는 변경은 지금처럼 시행 최소 30일 전에 앱에서 안내합니다 |
| 1.6 | 2026-09-23 | 2026-09-25 부터 시행합니다. 2026-09-23 에 2026-10-05 시행으로 게시했다가 2026-09-25 로 앞당겼습니다. iOS 에서만, 그리고 「Apple 건강에 저장」을 켠 경우에만 끝난 세션을 운동 종류·시각·활동 에너지·기기가 측정한 심박수와 함께 Apple 건강에 운동으로 저장할 수 있고, 새 Apple Watch 앱이 워치에서 운동을 기록하며 실시간 심박수와 에너지를 Apple 기기 간 직접 연결로 iPhone에 보냅니다. 중복 저장을 막기 위해서만 운동 기록을 읽고, iOS 27 이상에서는 건강 설정의 심박 영역을 읽습니다. 버전 1.5 는 Apple 건강 권한을 읽기 전용이라고 적었고, 저장을 켜기 전까지는 그대로 사실입니다. 제3조 설정 항목에 기기에 보관하는 세 가지를 더했습니다. 앱이 Apple 건강 권한을 물어봤는지 여부(이 버전 전부터 보관했으나 목록에 빠져 있었습니다), 저장 사용 여부, 이용자가 닫은 변경 안내입니다. 기기를 떠나는 정보는 달라지지 않았습니다. 심박수와 에너지는 여전히 회사로 업로드하지 않습니다. 앱은 버전 1.1.3 부터 홈 화면에 이 변경을 알립니다. 2026-09-24 정정: Apple 건강의 활동 에너지는 안정 시 에너지를 포함하지 않으므로, 활동 에너지로 저장하는 추정치는 안정 시 소모를 뺀 값입니다. 결과 화면은 계속 전체 추정치를 보여 줍니다. 같은 날 정정: 기기가 측정한 심박수와 에너지는 운동을 실시간으로 기록한 경우(Apple Watch 앱, 또는 iOS 26 이상의 iPhone)에만 운동과 함께 보관됩니다 |
| 1.5 | 2026-09-13 | 개인정보처리자가 Foo AI Corp. 에서 WorkNPLAY Inc. 로 바뀌었습니다. 앱의 스토어 판매자·개발자는 이미 WorkNPLAY 로 이전돼 있었고, 이 방침만 옛 법인을 처리자로 적고 있었으므로 그 서술을 바로잡습니다. 사업자등록번호와 주소도 함께 바뀌었습니다. 처리하는 항목·목적·보유 기간·수탁자·이전 국가는 달라지지 않았습니다. 데이터는 지금까지와 같은 서울 리전에 그대로 있습니다. 제8조의 이전 거부 방법도 고쳤습니다. 버전 1.4 는 "앱에 네트워크 연결을 허용하지 않거나 앱을 삭제하십시오"라고 적었는데, 앱을 삭제해도 서버에 보관된 요약과 계측은 지워지지 않으므로 그 문장은 사실이 아니었습니다. 실제로 지우는 수단인 앱 설정의 「모든 기록 삭제」를 안내합니다 |
| 1.4 | 2026-08-17 | 앱 1.1.0 이 이 방침의 항목을 바꾸는 기능을 추가했고, 이 항목이 그것을 기록합니다. 로컬 리마인더: 이용자가 직접 켜는 기기 내 알림 예약이 생겼습니다. 버전 1.3 은 앱에 알림이 전혀 없다고 적었으므로 제13조를 다시 썼습니다. 결과 카드: 이용자 자신의 세션 수치로 카드를 그려 시스템 공유 시트에 넘길 수 있습니다. 제2조가 "미디어 파일을 쓰는 코드가 없다"고 적고 있었으므로 정정했고, 제3조가 카드를 목록에 넣었습니다. 기기에 새로 저장되는 것: 획득 배지, 주간 연속 기록 최장값, 참여한 월간 챌린지, 진행 중 프로그램, 오늘의 트랙 난이도 동결값, 리마인더 사용 여부. 제5조 표의 계측 이벤트가 10종에서 15종으로 바뀌었습니다. 8종이 늘고(paywall_view·purchase_start·star_upgrade·reminder_optin·reminder_open·free_shelf_view·upsell_view·share_card) 3종이 사라졌습니다(misjudgment_reported·onboarding_blocked_age·streak_extended). 기기를 새로 벗어나는 것은 없습니다. 카메라 프레임·자세 좌표·심박은 여전히 업로드하지 않으며, 카드는 이용자가 요청할 때만 앱 자신의 캐시에 씁니다 |
| 1.3 | 2026-08-03 | 이름의 처리를 정정했습니다. 버전 1.2는 이름을 어디에도 저장하지 않는 항목으로 적어 두고, 바로 다음 조에서는 제공자가 이름과 이메일 주소의 제공 여부를 묻는다고 기술했습니다. 두 문장이 동시에 참일 수 없습니다. Android에서는 Google이 발급하는 로그인 토큰에 Google 계정의 이름이 담겨 있고 앱이 그 토큰을 수탁자에게 보내므로 이름이 수탁자에게 도달합니다. iOS에서는 이름이 별도 필드로 오는데 앱이 그 필드를 읽지 않으므로 기기를 벗어나지 않습니다. 앱 코드는 어느 쪽도 읽지 않습니다. 그 밖의 수집 항목은 변경되지 않았습니다 |
| 1.2 | 2026-08-03 | 앱에 선택 로그인이 추가되어 처리 항목에 이메일 주소가 들어왔습니다. 버전 1.1은 소셜 로그인이 없고 이메일 주소를 보유하지 않는다고 기술했는데, 로그인한 이용자에게는 두 문장 모두 사실이 아닙니다. iOS의 Sign in with Apple과 Android의 Google이 이메일 주소(Apple의 경우 릴레이 주소일 수 있음)를 전달하고 수탁자가 계정 레코드에 보관합니다. 앱 코드는 그 주소를 읽지 않습니다. 로그인은 여전히 선택이며 로그인 없이도 모든 기능이 그대로 동작합니다. 제10조도 정정했습니다. 기록 삭제는 계정 레코드 자체까지 지우며, 버전 1.1은 계정 레코드가 남을 수 있다고 적었습니다. 카메라, 건강 데이터, 기기 내 기록, 업로드 항목은 변경되지 않았습니다 |
| 1.1 | 2026-08-02 | 두 플랫폼을 모두 포괄하도록 개정. 버전 1.0은 iOS가 유일한 플랫폼인 것처럼 기술해 결제 수령자를 Apple로만 적었고, Apple 건강 앱 심박 연동을 설명하면서 Android에는 그 연동이 없다는 사실을 밝히지 않았습니다. 건강 데이터와 결제를 iOS와 Android로 분리했습니다. 카메라 처리, 기기 내 기록, 서버 동기화는 두 플랫폼이 동일하므로 처리 항목 자체는 변경되지 않았습니다 |