SoriCue Transcribe
SoriCue Transcribe 개인정보처리방침
- 버전
- 2026-08-26.v1
- 시행일
- 2026-08-26
- 최종 수정
- 2026-08-26
이 방침은 현재 코드와 processor inventory를 기준으로 작성한 운영 초안이며 법률 준수를 보증하거나 법률 자문을 제공하지 않습니다. 운영 배포 전에 최종 법률검토와 미확정 이전 정보를 완료해야 합니다.
1. 개인정보처리자
개인정보처리자는 엘레노어마튼(대표자 주민재)입니다. 사업자등록번호 568-39-01427, 주소 서울특별시 관악구 남부순환로210길 47, 404호(봉천동), 문의 soricue@gmail.com입니다.
개인정보 보호책임자는 대표자 주민재이며 위 이메일로 연락할 수 있습니다.
2. 처리 항목, 목적, 근거 및 보유기간
- 계정: Google 또는 기존 GitHub 인증 식별자, 계정 이메일, Supabase 사용자 ID 및 인증 세션 — 가입·로그인·계정 보안·서비스 제공을 위한 계약 이행 및 보안상 정당한 이익 — 이메일과 계정 정보는 회원 탈퇴 시까지
- 법적 동의 원장: 사용자 ID, 동의 종류, 문서 버전·언어·SHA-256 해시, 동의·거부·철회 또는 기존 광고 상태 보존 이벤트, 서버 시각, 출처·멱등 요청 ID — 동의 입증, 버전 게이트 및 권리 처리 — 회원 탈퇴 시까지
- 선택 광고 이메일: 계정 이메일과 동의·철회 상태 — 동의한 경우 서비스 업데이트, 새 기능, 할인·이벤트, 뉴스레터 — 철회 또는 회원 탈퇴 시까지. 거부해도 가입·이용 가능
- 중앙 권한·운영 메타데이터: 권한·라이선스 상태와 제한된 보안·오류 이벤트 — 서비스 제공, 부정 이용 방지, 운영 안정성 — 회원 탈퇴 시까지 또는 각 작업에 정한 최소 기간
- 녹음 사용량: Supabase 사용자 ID, 한국시간 기준 사용일, 녹음 시작·완료 횟수, 시작부터 중지까지의 녹음 초, 중복 집계 방지용 작업 ID — 서비스 제공, 사용 현황 확인, 고객 지원, 부정 이용 방지 및 운영 안정성 — 회원 탈퇴 시까지
- 관리자 조회: 계정 이름·이메일·가입일·최근 로그인과 위 녹음 사용량을 결합한 1·7·30·90일 현황 — 사용 현황 확인과 운영 지원 — 환경변수 SORICUE_ADMIN_USER_IDS에 등록된 관리자만 원본 보유기간 내에서 조회하며 별도 복제하지 않음
- 단어장: 별도 관리자 전역 snapshot의 기본 단어와 인증 사용자별 삽입 순서의 개인 단어 최대 200개·revision·schema version·갱신 시각 — STT에 생소한 표기를 알리고 같은 계정의 다른 컴퓨터와 동기화 — 개인 snapshot은 Supabase에 계정 수명 동안, 현재 기기에는 같은 계정의 마지막 검증 bundle만 IndexedDB에 보관합니다. 개인 단어별 삭제·기기 cache 삭제를 제공하며, 로컬 내보내기는 중앙의 현재 인증 계정 snapshot을 우선 확인하고 실패 시 같은 계정 cache로만 대체해 개인 snapshot만 포함합니다. 회원 탈퇴 시 개인 row를 명시적으로 삭제한 뒤 auth.users cascade를 적용합니다. 관리자 전역 snapshot은 다른 사용자의 탈퇴로 삭제되지 않습니다. 단어·합성 prompt는 로그·진단·분석·확장 protocol·schedule payload에 저장하지 않음
- 제품 UX 경로 분석: 전용 server-only HMAC salt로 만든 익명 사용자 값, journey별 무작위 session ID와 sequence, 화면 route, strict allowlist action ID·outcome, 최대 24시간으로 제한한 duration, online/offline/file 방식, mobile/tablet/desktop 구간, UTC 달력 날짜 — 받아쓰기 시작·완료 funnel, 기록 활용, Google Sheets 연결→내보내기, 다음 행동·이탈과 중앙 소요시간을 집계해 제품 흐름을 개선 — 오늘을 포함해 최대 90개 UTC 달력 날짜만 Supabase에 보관하고 인증된 일일 Cron과 요청 시 만료분을 삭제하며 관리자에게는 집계만 제공. 받아쓴 내용·hash·prompt·AI 답변·회원/일정/파일명·정확한 시각·email·token·API key·audio·DOM text·session replay는 수집하지 않음. 회원 탈퇴 시작 시 새 적재를 차단하고 Auth 삭제 뒤 다시 삭제하며, 잔존 access token 차단용 HMAC tombstone은 달력 날짜만 담아 최대 31개 UTC 달력 날짜 뒤 삭제
- 중앙 수동 일정 series: 인증된 SoriCue 사용자별 opaque series ID, 제목·날짜·시작/종료·색상·반복 규칙·online/offline mode·autoRecord·revision·갱신 시각 — Biz PT나 확장 없이 고정·반복 일정을 만들고 일별·주간·월간으로 관리 — Supabase의 RLS 보호 사용자별 snapshot에 최대 100개·128KiB를 계정 수명 동안 보관하고 1회 화면 projection은 전체 최대 60개 occurrence로 제한. 정확한 SoriCue origin localStorage와 확장 연결 시 현재 사용자·기기의 extension-private state에는 실행·복구용 사본을 두며 일정 삭제는 중앙과 사본에 반영하고 회원 탈퇴 시 중앙 원본을 Auth cascade로 삭제
- 중앙 Biz PT 일정 snapshot: 인증된 SoriCue 사용자별 최대 500개·512KiB의 actual/projected occurrence와 최대 32주·16KiB repeat config — 같은 계정의 다른 컴퓨터에서 Biz PT 일정·편집 설정과 회원 관리 바로가기 복원 — occurrence key·revision, 현재 제목과 원본 제목(회원·학생명일 수 있음), source ID·logical identity·선택적 1~20자리 숫자형 회원 ID(member.uid)·주간/template identity·projection 여부, 현재/원본 시작·종료·timezone, online/offline mode·enabled·offset·명시 시각·hidden, base 설정과 title/time/mode/enabled/offset/hidden override 표시를 저장하고 repeat에는 enabled·template week·imported weeks·갱신 시각을 저장합니다. 사용자가 덮어쓰기·비우거나 회원 탈퇴할 때까지 Supabase의 account-owned snapshot으로 보관하고 회원 탈퇴 시 Auth cascade로 삭제하며 backup 순환 정책이 적용됩니다. Biz PT 비밀번호·cookie/session·원본 HTML·전화번호·이메일, description·위치, SoriCue device ID·binding·alarm·run/status/failure·actual run 시각, audio·받아쓴 내용·prompt·AI 답변·provider key·로컬 MP3 경로는 포함하지 않음
- 확장 로컬 예약 일정 상태: SoriCue 사용자·기기 binding, 최대 100개 manual series의 제목·날짜·시작/종료·색상·반복 규칙·online/offline·autoRecord·revision, materialized manual 또는 Biz PT occurrence key·제목·날짜·시작/종료·enabled·revision·device binding과 선택적 1~20자리 숫자형 Biz PT member.uid 및 operation ID·상태·redacted failure code·planned/actual 시각·transcript/MP3/prompt stage outcome — 예약 실행·장애 표시와 같은 계정의 다른 컴퓨터 복원 뒤 회원 관리 바로가기 유지 — 중앙 수동·Biz PT 계정 원본에서 현재 기기의 실행 cache를 생성하고, 실행 snapshot은 최대 500개 occurrence의 현재 기준 과거 31일/미래 90일 window, content-free run ledger는 최대 100개·30일 동안 이 브라우저 확장에만 보관합니다. Biz PT 비밀번호·cookie/session·원본 HTML·전화번호·이메일은 schedule copy에 포함하지 않으며, run에는 받아쓴 내용, prompt, AI 답변, 일정 제목, 로컬 파일 경로를 저장하지 않고 중앙 Biz PT 원본이나 별도 실행 DB로 전송하지 않음
- Biz PT 가져오기 receipt: receipt·기기 식별자, 주간 범위, snapshot revision, 가져오기·제거·설정 유지 건수, 변경 여부와 capture·생성·만료 시각 — 가져오기 결과 확인 — 콘텐츠 없이 최대 16개·24시간 동안 이 브라우저 확장에만 보관. 일정 제목·설명·참여자·받아쓴 내용·prompt·AI 답변·provider key·로컬 경로를 포함하지 않고 다른 앱 runtime·계정·세션·DB로 보내지 않음
- Biz PT 가져오기 복구 상태: 현재 기기·주간, reading/completed/login_required/failed 상태, redacted failure code와 갱신·만료 시각 — 새로고침 뒤 로그인 필요·실패 화면 복구 — 콘텐츠 없이 1개만 보관하며 reading은 최대 10분, terminal 상태는 최대 24시간. 일정 행·제목·참여자·받아쓴 내용·prompt·AI 답변·provider key·로컬 경로·raw error·Biz PT cookie/session을 포함하지 않음
- Biz PT 일정 감소 재확인 marker: SoriCue 사용자·기기, 주간, snapshot revision, 정규화한 후보의 SHA-256과 만료 시각 — 취소·삭제된 actual 일정 또는 사용자가 수정한 projection을 한 번의 불완전한 읽기로 삭제하지 않기 위한 재확인 — 콘텐츠 없이 1개·최대 2분 동안 이 브라우저 확장에만 보관. 같은 후보를 새로 읽은 두 번째 요청에서만 삭제하며 제목·일정 행·원본 수업 시각·받아쓴 내용·prompt·AI 답변·provider key·로컬 경로·Biz PT cookie/session을 포함하지 않음
- 기본 content-free 운영 진단: 인증된 SoriCue 사용자 ID, UUID event ID, 시스템 event의 occurredAt/서버 receivedAt, allowlist eventName·result·failureCode, session/tab/operation/trace SHA-256, incident UUID, 필수 allowlist source·moduleId·codePathId와 actionId, from/to 상태 및 web·extension 공통 stateAction/stateReason, 예상 다음 event·deadline, producer release ID·git commit과 별도 ingest release ID·git commit·identity source·extension version, duration·attempt·queue depth·HTTP status·종료 reason/actor 및 오류 때만 제한된 class·digest·message SHA-256·프로젝트 frame — 받아쓰기·캡처·요약·예약의 시도부터 terminal까지 재구성과 누락·불일치 incident 판정 — 일정 진단 localStorage는 사용자별 최대 400개·14일, IndexedDB outbox는 최대 256개·14일, 확장 private partition은 계정 hash별 최대 800개·512KiB·30일·event당 4KiB·최근 8개 partition으로 제한합니다. random per-tab nonce는 sessionStorage에만 두고 event에는 SHA-256 tabHash만 보내며 same-tab reload 동안 유지되고 계정 전환·logout·기기/계정 purge 때 회전 또는 삭제됩니다. web producer build proof는 typed event record 밖 IndexedDB row에 보존합니다. well-formed stale/invalid proof는 그 event만 unknown-producer로 강등하고 주장 release/commit을 신뢰하지 않으며 malformed·extra·event mismatch는 400입니다. keepalive final body는 proof map을 포함해 56KiB 이하로 동적 분할하며 non-final은 20–50개, 마지막 remainder만 20개 미만이고 sendBeacon은 쓰지 않습니다. expected-subject와 인증 session subject가 일치하는 same-origin API가 strict event 최대 8KiB·batch 최대 50개를 검증한 뒤 RLS 보호 Supabase Postgres event·incident table에 기본 30일 저장하고 영구 저장된 ID만 outbox에서 삭제합니다. 채팅·prompt·AI 답변·받아쓴 내용·요약·오디오·이름·email·일정 제목·메모·입력·키 입력·clipboard·화면·DOM·URL query·body·raw header/error·cookie·JWT·Authorization·session·password·key·raw nonce·로컬 경로·IP·위치는 저장하지 않으며 Supabase Storage object log는 사용하지 않음
- 운영 진단 Postgres 저장 경계: strict wire event를 개별 제약 typed column으로만 저장하고 임의 event payload나 broad JSON object를 저장하지 않습니다. 최대 8개 project frame만 exact-schema·enum 검증 JSON array이며 incident도 evidence UUID array·missing-event enum·last-normal-state typed column을 사용합니다. 새 event는 service-only typed persist RPC로 scope generation 증가와 한 transaction에 저장되고 idempotent duplicate는 generation을 증가시키지 않습니다. service_role direct event INSERT·UPDATE 권한은 없고 atomic reconcile RPC만 incident를 쓰거나 해결할 수 있으며 direct incident write도 금지됩니다.
- 운영 진단 incident reconcile generation state: Supabase 사용자 ID·opaque 64hex correlation scope hash·단조 증가하는 next generation·last reconciled generation counter 2개·DB 관리 updated/expires 시각만 — 진단 payload 없이 마지막 state 활동 후 최대 30일 보관하고 회원 탈퇴 시 auth.users cascade로 더 일찍 삭제합니다. target generation을 fresh typed context 읽기 전에 예약하고 lifecycle은 opaque lineage-guard generation도 예약합니다. atomic reconcile RPC가 target+lineage dual-generation CAS를 통과해야만 incident를 쓰며 stale writer는 resolved incident를 재열 수 없습니다. 별도 payload-free singleton round-robin scheduler는 마지막 사용자 pointer·DB update 시각만 보관하고 회원 탈퇴 시 pointer를 SET NULL함
- 운영 진단 deadline claim·평가 metadata: 보존 중인 event row 내부에만 UUID claim token, DB claim 시각·lease 만료 시각, claimed generation, 평가 시각과 completed/context_overflow 결과를 저장 — client 입력·인증 사용자 진단 응답·private operator export에서 제외하며 제품 payload나 임의 JSON을 저장하지 않습니다. service-only claim RPC는 DB clock·FOR UPDATE SKIP LOCKED·singleton round-robin cursor로 사용자·scope를 공정하게 선택하고 generation을 fresh context 전에 예약합니다. null·expired·superseded·token/generation mismatch claim은 fail closed하며 incident를 쓸 수 없고 crash 후 lease expiry로 다시 claim합니다. 1,000개를 넘는 fresh typed context는 truncate하지 않고 context_overflow로 기록하며 incident를 생성·해결하지 않습니다. 이 metadata는 원본 event와 함께 최대 30일 보관하고 회원 탈퇴 시 event cascade로 더 일찍 삭제함
- 사용자 비연결 Next.js service error: 신뢰 가능한 인증 subject가 없을 수 있는 instrumentation onRequestError와 proxy request-error 경계에서 UUID v1–v8·발생/수신 시각·next_server·release/commit·allowlist route group과 HTTP method·두 exact code path 중 하나·allowlist error class·선택적 error digest SHA-256·message SHA-256·최대 8개 enum-allowlist 프로젝트 frame만 별도 RLS 보호 Postgres table에 최대 30일 보관합니다. user ID·payload·URL/query·body/header·cookie/token/session·IP/location·content·local path·raw error·source map은 저장하지 않습니다. onRequestError는 durable persist RPC ACK 또는 실제 1.8초 abort/rejection까지 기다리고, proxy는 같은 bounded fail-open sink를 waitUntil로 예약한 뒤 원래 오류를 즉시 다시 던집니다. per-user account/portability export에는 포함하지 않지만 private operator export를 통해 승인된 Mac의 `events/YYYY/MM/DD/service-errors.ndjson`와 일별 report에 포함됩니다. 사용자 식별자가 없어 회원 탈퇴로 선택할 수 없고 DB row는 bounded expiry cleanup으로 삭제함
- 본인 계정 전용 Full Diagnostic: 기본-off이며 서버 기능 flag와 정확한 Auth UUID allowlist가 모두 유효하고 이용자가 이 브라우저에서 Shadow Mode를 직접 켠 동안에만 별도 IndexedDB에 사건·provider 원본 결과를 최대 7일 보관합니다. 품질 이상 오디오는 별도 기본-off 동의를 켠 경우에만 최대 24시간·20개·50MiB로 이 기기에 보관합니다. 서버 path에는 strict content-free 단계·집계·hash·안전 오류만 보내며 오디오 bytes·provider 원본 결과·prompt·API key는 local-only이고 기본 운영 진단 Postgres·Mac archive에도 섞지 않습니다. 진단 실패나 한도 초과는 받아쓰기 기능을 막지 않음
- 운영자 Mac 진단 archive: 전용 server-only bearer token으로만 접근하는 no-store private operator cursor export의 content-free event·incident와 strict 사용자 비연결 service error를 승인된 Mac의 `~/Library/Application Support/SoriCue/Diagnostics`에 권한 700/600의 `events/.../events.ndjson`·`events/.../service-errors.ndjson`·incident JSON·일별 report로 기본 365일 보관합니다. token은 stdin-only `/usr/bin/security -i` interactive import와 Keychain readback으로 저장하고 argv·URL·source·log·plist에 두지 않으며 모든 managed symlink chain은 fail closed합니다. 이미 export된 사본의 권리 삭제는 자동이 아닙니다. 서버 권리/export workflow가 제공한 lowercase 64hex userHash만 `delete-user`에 사용하고 email·name·user UUID는 쓰지 않습니다. matching event·incident·pending과 영향 report만 정리하며 다른 사용자·service error·legacy record를 보존함
- 로컬 기기 데이터: 받아쓴 내용, 설정, 같은 계정의 마지막 검증 단어장 bundle, ChatGPT·Gemini·Claude 통합 외부 요약 v5 동의, 사용자·기기·날짜별 예약 녹음 v1 동의, Google permission ID별 Sheets 파일·회원 탭 매핑, 사용자별 일정 실행 cache와 content-free Biz PT cloud sync marker, extension-local 실행 일정 snapshot, bounded run/attempt 및 사용자 STT API 키 — 이용자가 요청한 일정 자동화·받아쓰기·설정·내보내기 — 각 TTL, 활성 binding 또는 사용자가 삭제할 때까지. Google access token은 페이지 메모리에만 유지하고 중앙 단어장·수동·Biz PT 일정 원본을 제외한 로컬 받아쓰기·설정에는 서버 백업 없음
- 선택 MP3: 녹음 구간 오디오와 안전하게 정리한 일정 제목 기반 파일명 — 이용자가 옵션을 켜고 지정한 로컬 폴더 저장 — 이용자가 파일 시스템에서 삭제할 때까지. SoriCue 서버 업로드 없음
- 오디오·프롬프트·받아쓴 내용 payload: 사용자가 선택한 STT/AI 요청 수행 — 계약 이행 및 사용자의 요청 — SoriCue는 전송 중 메모리에서만 처리하고 저장하지 않음. 외부 제공자 보존은 해당 정책 적용
3. 로컬 저장, 쿠키와 추적기술
Supabase 인증 세션 쿠키에는 SameSite=Lax를 적용하고 운영 환경에서는 Secure로 전송합니다. 브라우저 인증 런타임이 이 세션 쿠키를 읽을 수 있으므로 HttpOnly가 아닙니다. OAuth 전 동의 의도와 탈퇴 재인증 증명은 별도의 서명된 단기 HttpOnly·Secure·SameSite 쿠키로 보호합니다.
받아쓴 내용·설정·API 키·일정 실행 snapshot·일일 예약 녹음 동의와 계정별 Google Sheets 파일·탭 매핑에는 브라우저 localStorage, IndexedDB 또는 확장 storage가 사용될 수 있습니다. Google Sheets access token은 localStorage·IndexedDB에 저장하지 않고 현재 페이지 메모리에만 둡니다. 수동 일정 series와 device-free Biz PT 일정·편집 설정은 사용자별 Supabase snapshot에 저장되고 SoriCue-origin localStorage 및 확장 연결 시 현재 사용자·기기의 extension-private state에는 실행·복구용 사본이 동기화됩니다. 법적 동의의 진실한 원장이나 서버 권한 판단에는 수정 가능한 로컬 값 또는 사용자 metadata를 신뢰하지 않습니다.
SoriCue-origin localStorage에는 사용자별 최대 400개의 content-free 일정 진단을, IndexedDB에는 사용자별 최대 256개의 실패 전달 outbox를 둘 수 있고 각 row는 14일 expiry를 가집니다. 확장 private storage의 content-free 운영 진단은 계정 hash partition별 최대 800개·512KiB·30일이며 최근 8개 partition만 유지합니다. 만료 row는 다음 SoriCue 접근·queue maintenance에서 삭제되며 site data 삭제로 더 일찍 지울 수 있습니다. 로그아웃·계정 전환·기기 데이터 삭제·회원 탈퇴는 대상 사용자의 진단 row를 지우고 사용자·event를 포함하지 않는 전역 purge generation·UUID·시각을 남겨 삭제 전에 열린 탭의 재기록을 막습니다. 이 content-free marker는 다음 purge로 대체되거나 site data 삭제 시까지 남을 수 있으며 다른 사용자의 진단 row는 대상 사용자 purge로 삭제하지 않습니다.
수동 일정 생성·autoRecord 설정, Biz PT import와 SoriCue 기기 연결은 녹음 동의가 아닙니다. 사용자가 scheduled-capture 고지를 확인하고 사용자·기기·날짜에 묶인 `오늘 자동 녹음 준비`에 명시적으로 동의한 뒤에만 wall-clock start/stop이 활성화됩니다. 준비된 mic/system track은 당일 동안 유지될 수 있고 브라우저와 앱이 이를 계속 표시합니다. 예약 gate 밖에서는 audio를 저장·받아쓰기·MP3 기록·외부 전송하지 않으며 video frame은 소비하거나 저장하지 않습니다.
ChatGPT·Gemini·Claude 통합 외부 요약 v5 동의는 철회·로그아웃·계정 전환·기기 데이터 삭제·회원 탈퇴까지 유지되며, 중요 고지 변경 시 다시 동의받습니다. 붙여넣기·자동 제출과 두 탭 병렬 더블 프롬프트 범위는 구분되며 이 동의와 예약 녹음 동의는 서로 독립적으로 끌 수 있습니다.
현재 광고 쿠키, 행동 기반 광고, 제3자 분석 쿠키를 운영하지 않습니다. 이를 도입하면 방침과 필요한 동의 절차를 먼저 변경합니다.
4. 처리위탁, 제3자 서비스와 국외이전
- Supabase: SoriCue Auth, 중앙 권한·법적 동의 원장·라이선스, 사용자별 최대 100개·128KiB 수동 일정 원본, 최대 500개·512KiB Biz PT occurrence와 최대 32주·16KiB repeat config, 최소 녹음 사용량, content-free 운영 진단 event·incident 및 pseudonymous 제품 UX 경로 event를 처리합니다. 계정 이메일·사용자 ID·세션, 동의 이벤트, 권한·라이선스 상태, 수동 일정 필드, Biz PT의 현재·원본 제목(회원·학생명일 수 있음)·source ID·logical identity·선택적 1~20자리 숫자형 member.uid·현재/원본 시각·mode/enabled/offset/hidden·base/override·repeat week와 날짜별 시작·완료 횟수·녹음 초가 처리될 수 있습니다. 운영 진단에는 user ID와 strict allowlist lifecycle/state/hash/code-path/release/error fingerprint를 기본 30일 보관합니다. 제품 UX event에는 전용 server-only HMAC pseudonym, journey별 무작위 session·sequence, allowlisted route/action/outcome, 제한된 duration·mode·viewport와 UTC 달력 날짜만 오늘 포함 최대 90개 달력 날짜 보관합니다. 두 table 계열은 RLS를 강제하고 anon/authenticated 직접 권한을 회수하며 인증된 same-origin Route Handler의 service_role admin client만 접근합니다. member.uid는 같은 계정의 다른 컴퓨터 복원 뒤 회원 관리 바로가기를 유지하는 데 사용합니다. Biz PT 비밀번호·cookie/session·원본 HTML·전화번호·이메일, description·위치, device binding·alarm·run/status/failure·actual run 시각, audio·받아쓴 내용·prompt·AI 답변·provider key·로컬 MP3 경로는 일정 원본으로 전달하지 않습니다. 운영 진단과 제품 UX에도 받아쓴 내용·오디오·prompt·AI 답변·일정 제목·정확한 개인 시각·secret을 저장하지 않습니다. 보유는 위 기간·계정 수명 및 Supabase 백업 정책에 따릅니다. Supabase 처리 위치·리전: ap-southeast-2 (Oceania, Sydney, Australia)
- Supabase 단어장: 관리자 전역 snapshot과 사용자별 최대 200개 개인 단어 snapshot을 분리하고 revision·schema version·갱신 시각을 계정 동기화에 사용합니다. RLS를 강제하고 anon/authenticated 직접 DML을 회수하며 인증된 same-origin 서버 경로만 service role로 접근합니다. 개인 snapshot은 계정 수명 동안 보관하고 회원 탈퇴 privacy plane과 Auth cascade로 삭제하며, 관리자 전역 snapshot은 유지합니다. Supabase backup 순환 정책이 적용됩니다.
- Supabase의 service-only incident reconcile state는 사용자 ID·opaque 64hex correlation scope hash·단조 증가 counter 2개·DB 관리 updated/expires 시각만 마지막 state 활동 후 최대 30일 보관하고 진단 payload를 저장하지 않으며 auth.users cascade로 더 일찍 삭제됩니다. target generation을 fresh context 전에 예약하고 lifecycle은 opaque lineage-guard generation도 예약하며 atomic reconcile RPC가 두 generation을 CAS한 경우에만 incident를 쓰거나 해결합니다. direct incident write는 금지되고 stale writer는 resolved incident를 재열 수 없습니다. 별도 payload-free singleton scheduler는 round-robin용 마지막 사용자 pointer·DB update 시각만 두며 탈퇴 시 pointer를 SET NULL합니다.
- 운영 진단 event의 service-only deadline metadata는 UUID claim token·DB claim/lease 시각·claimed generation·평가 시각·completed/context_overflow enum만 보관하며 제품 payload나 임의 JSON을 포함하지 않습니다. client 입력·인증 사용자 응답·operator export에서는 제외됩니다. service-only claim RPC는 DB clock·FOR UPDATE SKIP LOCKED·singleton cursor로 공정하게 claim하고 generation을 fresh context 전에 예약합니다. null·expired·superseded·mismatch claim은 fail closed하며 incident를 쓸 수 없고 lease expiry로 crash recovery합니다. context가 1,000개 typed row를 넘으면 truncate하지 않고 incident 생성·해결 없이 context_overflow로 기록하며 원본 event의 30일 expiry와 회원 탈퇴 cascade가 동일하게 적용됩니다.
- Supabase의 별도 사용자 비연결 Next.js service-error table은 위 제한된 service error 필드만 최대 30일 처리하고 RLS를 강제합니다. service_role에는 table 직접 select만 허용하며 저장은 전용 atomic persist RPC, 삭제는 bounded cleanup RPC로만 수행합니다. RPC는 같은 UTC 분·release·route·method·code path·error class·선택적 digest·message fingerprint가 모두 일치할 때만 중복 처리하고, 별도 1분 global·release/route·fingerprint bucket에는 accepted count와 포화형 dropped count만 보관합니다. user ID와 사용자 payload를 저장하지 않고 per-user account/portability export·회원 탈퇴 선택 대상에서는 제외되지만 private operator export를 통해 승인된 Mac archive에 포함됩니다. DB row는 expiry cleanup, Mac 사본은 설정된 local retention·권리 요청 삭제를 적용합니다.
- Google OAuth: 계정 인증. Google 식별자와 이메일이 Google의 글로벌 인프라와 구성된 Supabase 프로젝트를 통해 처리될 수 있으며 Google 정책이 적용됩니다.
- Google Sheets API: 이용자가 별도로 drive.file 권한을 승인하고 내보내기를 누른 경우 현재 필터의 기록 ID·회원·일정 유형·전체 제목·시각·상태·받아쓰기 방식·받아쓴 내용·요약이 브라우저에서 사용자의 Google Drive/Sheets로 직접 전송됩니다. SoriCue 서버를 경유하지 않으며 access token은 페이지 메모리에만 유지됩니다. 연결 해제나 SoriCue 기기 데이터 삭제는 사용자 소유 spreadsheet를 삭제하지 않으므로 Google Drive에서 별도로 삭제해야 합니다.
- GitHub OAuth: 기존 GitHub 계정 로그인 시 GitHub 식별자와 이메일이 GitHub의 글로벌 인프라와 구성된 Supabase 프로젝트를 통해 처리될 수 있으며 GitHub 정책이 적용됩니다.
- Groq/OpenAI API: 이용자가 제공자를 선택하고 받아쓰기를 실행할 때 오디오 창, 모델·언어·프롬프트 및 이용자 API 키가 이용자 브라우저에서 해당 제공자로 직접 전송됩니다. SoriCue 서버를 경유하지 않습니다. Groq 공식 문서상 보존되는 고객 데이터는 미국 GCP에서 처리될 수 있으며, OpenAI는 이용자 API 계정·endpoint에 적용되는 데이터 처리 위치와 정책을 따릅니다.
- 단어장 prompt는 관리자 기본 단어를 먼저, 개인 단어를 남은 OpenAI Whisper multilingual tokenizer 224토큰 안에서 삽입 순서대로 합성한 `Preferred spellings:` 힌트입니다. 작업 시작 때 고정되어 모델이 지원하는 provider 요청에만 포함되며, provider 응답이 prompt를 원인으로 지목한 400/422일 때만 prompt 없이 한 번 재시도합니다. 이미 provider에 전송된 prompt와 provider 사본은 SoriCue가 회수하거나 삭제할 수 없습니다.
- ChatGPT/Gemini/Claude 웹 전달: 이용자가 수동 전송하거나 세 provider 통합 v5 자동 제출에 동의한 경우 받아쓴 내용·요약 지시문을 선택한 계정 입력창으로 전달합니다. 더블 프롬프트에 별도 동의하면 새 대화 탭 2개에 받아쓴 내용과 서로 다른 prompt를 각각 병렬 제출합니다. 전송된 transcript/prompt와 생성 답변에는 제공자 정책이 적용됩니다.
- SoriCue Chrome 캡처 확장 및 운영 진단 runtime: Biz PT 페이지에서 직접 읽은 최소 일정과 exact-origin bridge로 동기화한 수동 series 및 materialized occurrence, 수동 캡처·PTT·외부 요약 및 명시적으로 준비한 예약 녹음의 오디오 청크·대상 탭·snapshot·bounded run/attempt·content-free import receipt·감소 재확인 marker를 브라우저 내부에서 처리합니다. Biz PT occurrence에는 같은 계정의 다른 컴퓨터 복원 뒤 회원 관리 바로가기를 유지하기 위한 선택적 1~20자리 숫자형 member.uid가 포함될 수 있지만 Biz PT 비밀번호·cookie/session·원본 HTML·전화번호·이메일은 extension-local schedule copy에 포함하지 않습니다. 다른 컴퓨터 복원용 device-free Biz PT occurrence·repeat 설정은 인증된 SoriCue API를 통해 위 Supabase 계정 원본으로 전달하지만 device binding·alarm·실행 상태·run과 import receipt/recovery/감소 재확인 상태는 브라우저에만 남고 별도 일정 실행 DB로 보내지 않습니다. content-free 운영 진단은 브라우저 localStorage 400개·IndexedDB outbox 256개에 각 14일, 확장 hash partition 800개·512KiB에 30일 보관하며, expected-subject와 인증 사용자를 대조한 same-origin API가 strict schema를 검증한 뒤 Supabase Postgres에 event·incident를 기본 30일 보관합니다. Storage object log는 쓰지 않습니다. 진단 event·receipt·marker에는 allowlist 식별자·revision·상태·건수·운영 시각 또는 SHA-256만 허용하며 받아쓴 내용·오디오·prompt·AI 응답·회원·학생명·일정 제목·정확한 개인 수업 시각·raw error·로컬 경로·provider key·인증 cookie를 저장하지 않습니다. 본인 allowlist용 Full Diagnostic의 local provider 결과와 별도 동의 audio는 이 기본 진단과 분리되고 서버·Postgres로 전송되지 않습니다.
- Lemon Squeezy: 기존 라이선스 이용자에게만 라이선스 검증·비활성화를 위해 라이선스·인스턴스·거래 메타데이터를 처리할 수 있습니다. 결제·세무 법정 기록은 제공자 정책에 따릅니다.
- 자동 광고 이메일 발송 및 이메일 발송업체 연동은 현재 범위에 없으며 어떤 발송기도 연결되어 있지 않습니다.
5. 파기
기기 데이터 삭제는 현재 계정의 마지막 검증 단어장 cache를 제거하지만 중앙 개인 snapshot은 유지합니다. 회원 탈퇴 privacy job은 중앙 개인 단어 snapshot을 명시적으로 삭제하고 Auth FK cascade를 다시 적용하며, 관리자 전역 snapshot과 다른 계정의 cache는 보존합니다.
준비 취소는 capture track·당일 alarm·미제출 prompt stage를, SoriCue 기기 연결 해제는 해당 binding의 extension-local schedule snapshot·alarm·run ledger·Biz PT 감소 재확인 marker를 정리합니다. 로그아웃·계정 전환·기기 데이터 삭제는 현재 기기의 수동·Biz PT 일정 cache와 content-free cloud sync/감소 재확인 marker, 준비 상태·schedule payload·동의를 제거하지만 Supabase 중앙 수동·Biz PT 일정 원본은 계정에 유지하고, 확장 제거 시 Chrome이 확장 local state를 제거합니다.
진단이 Supabase Postgres에 영구 수락되면 해당 IndexedDB 또는 확장 outbox row를 제거합니다. 로그아웃·계정 전환·기기 데이터 삭제·회원 탈퇴는 대상 사용자의 browser/extension 진단 row와 matching per-tab nonce를 제거하고 전역 content-free purge marker로 삭제 전에 열린 탭의 재기록을 차단하지만 다른 사용자의 row는 보존합니다. 회원 탈퇴 privacy job은 중앙 운영 진단 event·incident를 Auth 삭제 전에 명시적으로 삭제하며 auth.users 외래 키 cascade가 한 번 더 적용되고 singleton scheduler의 일치 user pointer는 SET NULL됩니다.
회원 탈퇴가 완료되면 현재 브라우저의 일정 cache를 포함한 일정 자동화 local state와 계정 데이터, 중앙 운영 진단 event·incident, pseudonymous 제품 UX event, 중앙 수동·Biz PT 일정 원본·권한·동의·사용량 및 Supabase Auth 사용자와 이메일을 삭제합니다. 제품 UX는 탈퇴 시작 시 새 적재를 차단하고 Auth 삭제 뒤 한 번 더 purge합니다. 운영 진단과 두 중앙 일정 원본은 Auth 외래 키 cascade 대상이며 별도 일정 실행 DB에는 device binding·alarm·예약 run을 저장하지 않습니다. 삭제 작업은 멱등 job과 plane별 상태로 관리하며 일부 실패를 완료로 표시하지 않습니다. Supabase backup 최종 소거는 프로젝트 순환 정책에 따릅니다. 이미 승인된 Mac 운영 archive 사본은 자동 삭제되지 않습니다. 운영자가 server rights/export workflow에서 받은 lowercase 64hex userHash만 `delete-user`에 사용하고 email·name·Supabase user UUID는 사용하지 않아야 합니다. 이 명령은 matching event·incident·pending과 영향 report만 정리하고 다른 사용자·사용자 비연결 service error·legacy record를 보존합니다. operator console 사본도 권리 요청과 운영 보존 정책에 따라 별도 삭제합니다.
사용자 비연결 Next.js service-error row에는 계정 식별자가 없어 회원 탈퇴로 선택할 수 없고 per-user account/portability export에는 포함되지 않습니다. DB row는 최대 30일 expiry와 bounded cleanup으로 삭제하지만, private operator export로 승인된 Mac에 복사된 `service-errors.ndjson`·일별 report는 설정된 local retention·권리 요청 삭제를 적용합니다.
완료 확인을 위한 콘텐츠 없는 삭제 job tombstone은 사용자 식별자가 분리된 뒤 30일간 보관될 수 있습니다. 별도의 제품 UX HMAC tombstone은 잔존 access token 재적재를 차단하도록 달력 날짜만 담아 최대 31개 UTC 달력 날짜 보관합니다. 데이터베이스·호스팅 백업은 운영 정책의 순환 주기에 따라 덮어쓰며 즉시 개별 삭제가 불가능할 수 있습니다.
이미 외부 제공자에 전송된 데이터, 제공자 사용량 기록, 법정 결제 기록 및 provider backup은 이용자가 해당 제공자에 별도 요청해야 합니다.
6. 안전성 확보조치
- 서버에서 인증 서명과 필수 동의 버전을 검증하고, RLS 및 service-only RPC로 동의 원장 변경을 제한
- 동의 이벤트는 일반 경로에서 append-only이며 이메일을 중복 저장하지 않음
- OAuth 동의 의도와 재인증 증명에 만료·목적이 있는 서명 쿠키 사용
- API 키의 로컬 보관 또는 중앙 경로에서의 암호화, 최소 수집, 동일 출처 검증, 요청 제한 및 보안 헤더 적용
- 예약 occurrence/revision/operation/device와 외부 AI provider/tab/document/conversation/stage/turn을 정확히 바인딩하고 stale·ambiguous·worker-restart 상태에서 fail closed
7. 이용자 권리와 요청 방법
설정에서 문서 버전과 광고 이메일 상태를 확인하고 광고 동의를 즉시 철회하거나 회원 탈퇴를 요청할 수 있습니다. 열람, 정정, 삭제, 처리정지, 동의 철회, 데이터 이동 또는 이의 제기는 soricue@gmail.com으로 요청하십시오.
요청 시 계정 이메일, 요청 권리, 대상 범위를 적어 주십시오. 계정 보호를 위해 추가 인증을 요청할 수 있으며, 대리인은 권한을 입증해야 합니다. 적용 법정 기간 내 처리하거나 연장·거절 사유와 불복 방법을 안내합니다.
대한민국 이용자는 개인정보보호법상 권리를 행사할 수 있습니다. EU·EEA 및 영국 거주자는 적용되는 경우 접근, 정정, 삭제, 제한, 이동, 이의제기 및 감독기관 진정 권리를 요청할 수 있습니다. 캘리포니아 거주자는 적용되는 경우 열람·삭제·정정·차별금지 및 판매·공유 거부 권리를 요청할 수 있습니다. 현재 개인정보를 판매하거나 교차 문맥 행동광고를 위해 공유하지 않습니다.
8. 아동
만 14세 미만은 서비스를 이용할 수 없습니다. 거주 국가가 더 높은 최소 연령을 요구하면 그 연령이 적용됩니다. 기준 미달 계정을 알게 되면 이용을 중단하고 삭제 절차를 진행합니다.
9. 기술 데이터 흐름과 변경 고지
활성 processor, 로컬 저장과 정확한 전송 경로는 /privacy 기술 데이터 흐름 페이지에 설명합니다. 이 법적 방침과 기술 페이지가 충돌하면 실제 코드를 바로 점검하고 더 정확한 내용으로 정정합니다.
방침 변경 시 시행일과 주요 변경 내용을 서비스 화면에 알리며, 처리 목적이나 법적 근거가 중대하게 달라져 동의가 필요한 경우 새 버전에 재동의를 받습니다.