REACH / PRIVACY

개인정보, 분명하게.Privacy. Clearly explained.

무엇을 전송하고, 무엇을 저장하는지. 계정 없이 쓰는 경우부터 Cloudflare 중계와 계정 삭제까지 구분해 설명합니다.What is transmitted, what is stored, and what you control. From account-free use to Cloudflare relay and account deletion.

개인정보 처리방침 · 최종 업데이트 2026년 10월 7일Privacy policy · Last updated October 7, 2026

목차 열기On this page

한눈에 보기At a glance

화면·오디오·입력Screen, audio, and input

기기 사이에서 암호화해 전송합니다. Reach 계정 데이터베이스나 연결 서버에 세션 내용을 저장하지 않습니다.Encrypted between devices. Session content is not stored in the Reach account database or signaling service.

계정·연결 메타데이터Account and connection metadata

이메일, 기기 신뢰 정보, 연결 후보, 운영 로그는 서비스 기능에 따라 처리합니다. 세션 내용과 구분해 아래에 설명합니다.Email, device trust, connection candidates, and operational logs are processed for service functions. They are described separately below.

내 기기에 남는 정보Information on your devices

프로필·프리셋·설정은 로컬에, 비밀 자격 증명은 Keychain에 저장됩니다. 선택형 창 복원 정보도 구분해 안내합니다.Profiles, presets, and settings are local; secret credentials are in Keychain. Optional window-restoration data is described separately.

삭제의 범위What deletion covers

계정 삭제는 로그아웃과 다릅니다. 운영 로그·서비스 보호 기록·로컬 설정의 정리 범위는 각각 다릅니다.Account deletion is not sign-out. Operational logs, abuse-prevention state, and local settings have separate cleanup rules.

Reach("앱")는 두 개의 앱으로 이루어진 원격 데스크톱 도구입니다. iPhone과 iPad용 Reach Viewer(App Store 등록명 "Reach Remote"), 그리고 Mac용 Reach Host입니다. Reach는 KMWORKS, INC.("당사")가 배포하며 이 방침에 대한 책임도 당사에 있습니다. 이 문서는 두 앱과 그 뒤에 있는 선택적 백엔드가 이용자의 데이터를 어떻게 다루는지 설명합니다.

Reach (the "App") is a remote desktop tool made of two parts: Reach Viewer for iPhone and iPad, listed on the App Store as "Reach Remote", and Reach Host for Mac. Reach is published by KMWORKS, INC. ("we", "us"), which is responsible for this policy. It explains what the apps, and the optional backend behind them, do with your data.

계정 없이 Reach 사용하기Using Reach without an account

로그인하지 않아도 두 가지 경로를 쓸 수 있습니다. 두 경로 모두 화면, 오디오, 입력은 물론 연결 후보까지 당사 인프라를 거치지 않습니다.

  • Nearby(같은 네트워크) — Reach Viewer가 같은 네트워크에 있는 Mac을 Bonjour/mDNS로 찾아 암호화된 QUIC 연결을 직접 엽니다. 기본 설정에서는 첫 연결에 Mac에 표시된 페어링 코드를 확인합니다. 세션 데이터는 네트워크 밖으로 나가지 않습니다.
  • 수동 Direct IP — 호스트 주소와 포트를 직접 입력하면(기본값은 UDP 8443이며, 보통 라우터에 포트포워딩 규칙이 필요합니다) 앱이 그 주소로 곧장 연결합니다. 시그널링 서비스도, 중계도 쓰지 않습니다.

다만 경로와 별개로, Mac에서 호스트 페어링이 활성화되어 있고 원격 접속이 켜져 있으면 Reach Host가 호스트 연결 메타데이터를 담은 작은 레코드를 Apple의 CloudKit에 게시해 본인 기기끼리 서로를 알아볼 수 있게 합니다. Reach Viewer도 여기에 대응하는 신뢰 레코드를 게시할 수 있습니다. 둘 다 바로 아래에서 자세히 설명합니다.

Two routes are available signed out. Neither sends your screen, audio, input, or connection candidates through our infrastructure.

  • Nearby / LAN — Reach Viewer finds your Mac over Bonjour/mDNS on the same network and opens a direct, encrypted QUIC connection. By default the first connection confirms a pairing code shown on the Mac. No session data leaves your network.
  • Manual Direct IP — you enter the host address and port yourself (UDP 8443 by default, which usually needs a port-forwarding rule on your router), and the App connects straight to it. No signaling service, no relay.

Separately from those routes: when host pairing is active and remote access is enabled on the Mac, Reach Host publishes a small record of host connection metadata into Apple's CloudKit so your own devices can recognize each other, and Reach Viewer can publish a matching trust record. Both are described in full just below.

CloudKit 페어링 메타데이터CloudKit pairing metadata

Reach Host는 Reach iCloud 컨테이너의 공개 CloudKit 데이터베이스에 CKRecord를 기록합니다. 앱은 페어링 코드를 레코드 식별자로 사용해 조회합니다. 이것이 비공개 저장소나 코드 소유자만 읽을 수 있다는 보장을 뜻하지는 않습니다. 데이터베이스 범위는 개인 컨테이너가 아니라 공개 영역입니다. 저장소를 운영하는 곳이 Apple이더라도 당사는 이를 기기 밖으로 나가는 데이터로 간주합니다.

레코드에는 다음이 담깁니다.

  • 호스트 이름 — macOS가 네트워크에서 사용하는 기기 이름
  • 호스트의 공개 신원 키와 TLS 인증서 지문
  • 설정해 둔 경우, 호스트의 외부 IP 주소와 포트
  • 직접 연결 후보 — QUIC 연결을 세우는 데 쓰이는 LAN과 WAN 엔드포인트
  • 게시 시각과 CloudKit 레코드 스키마 버전
  • 연결 전 기능 메타데이터 — 지원 코덱, 시스템 오디오 지원 여부, 기기 검색을 위해 알리는 기본 해상도, 기능 페이로드 버전
  • iCloud 사용자 레코드 이름 — Reach iCloud 컨테이너 안에서만 유효한 고정 식별자입니다. 항상 담기는 값은 아니고, iCloud Auto-Trust가 켜져 있고 iCloud 계정이 확인된 경우에만 기록되어 viewer가 같은 iCloud 계정에 속한 호스트를 알아보는 데 쓰입니다

iCloud에 로그인되어 있으면 Reach Viewer도 연결을 시도할 때 같은 공개 데이터베이스에 대응하는 신뢰 레코드를 게시할 수 있습니다. viewer의 공개 키 지문, 타임스탬프, 그리고 CloudKit이 찍어 주는 iCloud 사용자 레코드 이름이 담깁니다. Mac에서 iCloud Auto-Trust를 명시적으로 켠 경우에만, 이 레코드는 같은 Apple ID로 확인된 아직 신뢰되지 않은 viewer를 첫 연결에서 페어링 코드 없이 신뢰하는 데 쓰입니다. 이미 신뢰된 viewer는 저장된 지문으로 재연결하므로 이 레코드가 필요하지 않습니다. 신뢰 기기 목록에서 수동으로 제거된 지문은 이 자동 신뢰보다 우선해 차단되며, 다시 신뢰하려면 새 페어링 코드를 명시적으로 입력해야 합니다. Mac은 레코드를 검증하고 로컬 신뢰 저장이 성공한 뒤 CloudKit에 삭제를 요청합니다. 삭제 요청이 실패하면 같은 신뢰 항목의 이후 연결 완료 시 다시 시도할 수 있지만, 즉시 또는 최종적인 물리 삭제를 보장하지는 않습니다. Mac의 신뢰 기기 목록에서 viewer를 지우는 동작은 Mac에 저장된 로컬 신뢰를 취소하는 것이며, CloudKit 레코드 삭제와는 별개입니다.

앱은 이 메타데이터를 기기 발견과 신뢰 확인에 사용합니다. Reach Host에서 페어링이나 원격 게시를 중지하거나 페어링 코드를 초기화하면 관련 호스트 레코드 삭제를 요청합니다. 네트워크나 CloudKit 오류가 있으면 처리가 지연되거나 실패할 수 있습니다. Reach Viewer의 “Forget Mac”은 그 기기에 저장된 연결 정보와 로컬 신뢰만 지우며, Mac의 CloudKit 레코드를 삭제하지는 않습니다. 앱 삭제나 iCloud 설정 변경만으로 이 공개 데이터베이스의 모든 레코드가 삭제된다고 보장하지 않습니다.

Reach Host writes a CKRecord into the public CloudKit database of the Reach iCloud container. The App looks up the record using your pairing code as its identifier. This does not make it private storage or guarantee that only someone holding the code can read it; the database scope is public rather than your private container. We treat this as data that leaves your device, even though Apple operates the storage.

The record contains:

  • Your host name — the device name macOS uses on the network
  • The host's public identity key and its TLS certificate fingerprint
  • The host's external IP address and port, when configured
  • Direct connection candidates — the LAN and WAN endpoints used to set up QUIC
  • The publication timestamp and the CloudKit record's schema version
  • Pre-connect capability metadata — supported codecs, whether system audio is supported, the advertised default resolution, and the capability-payload version
  • Your iCloud user record name — a stable identifier scoped to the Reach iCloud container. It is not always present: it is written only when iCloud Auto-Trust is enabled and the iCloud account has been confirmed, so the viewer can recognize hosts that belong to the same iCloud account

When you are signed in to iCloud, Reach Viewer can publish a matching trust record into the same public database on a connection attempt: your viewer's public-key fingerprint, a timestamp, and the iCloud user record name CloudKit stamps on it. Only when iCloud Auto-Trust is explicitly enabled on the Mac does this record let an otherwise-untrusted viewer verified as using the same Apple ID establish trust on its first connection without a pairing code. An already-trusted viewer reconnects through its stored fingerprint and does not need this CloudKit trust record. Manual removal takes precedence over automatic trust: that fingerprint needs a new explicit pairing code before it can be trusted again. After validation and successful local trust persistence, the Mac requests deletion of the record. A failed CloudKit deletion can be retried after a later successfully established connection for that trust entry; immediate or eventual physical deletion is not guaranteed. Removing that viewer from the Mac’s trusted devices revokes local trust on the Mac. That is separate from deleting the CloudKit record.

The App uses this metadata for device discovery and trust verification. Reach Host requests deletion of the relevant host record when you stop pairing or remote publication, or reset the pairing code. Network or CloudKit errors can delay or prevent that operation. “Forget Mac” in Reach Viewer removes the saved connection details and local trust on that device; it does not delete the Mac's CloudKit record. Deleting the App or changing iCloud settings does not guarantee deletion of every record in this public database.

Reach 계정 (선택)Reach Account (optional)

Reach 계정은 인터넷 경로 두 가지를 열어 줍니다. 저장된 연결 프로필로 NAT 통과를 수행하는 Internet Direct와 Relay(중계)입니다. 또한 같은 계정에 속한 기기끼리는 페어링 코드 없이 서로를 신뢰할 수 있습니다. 다만 계정이 있다고 해서 경로가 저절로 생기지는 않습니다. 연결하려면 여전히 실제로 연결할 수 있는 직접 연결 주소가 있거나 중계가 설정되어 있어야 합니다.

로그인은 이메일로 합니다. 일회용 매직 링크나 코드를 보내 드리며 비밀번호는 없습니다. 로그인하면 당사 백엔드가 계정에 연결된 다음 정보를 저장합니다.

  • 이메일 주소 — 로그인에만 사용합니다.
  • 계정 레코드 — 계정 식별자와 이메일, 서버가 보관하는 계정 서명 키 한 쌍, 그리고 생성·인증 시각, 세션 세대 값, 계정 역할처럼 로그인 상태를 관리하는 데 필요한 메타데이터입니다.
  • 기기 목록 — 등록한 기기마다 기기 식별자, 이름, 종류(Mac 호스트인지 iPhone 또는 iPad viewer인지), 암호학적 식별자(공개 키, 키 지문, TLS 인증서 지문), 그리고 등록·최근 확인·해지 시각을 저장합니다. Mac 호스트는 다른 기기가 다이얼할 수 있도록 접속 가능한 주소와 포트에 더해 직접 연결 후보 목록도 함께 보관합니다.
  • 로그인 상태 — 수명이 짧은 세션 토큰과 리프레시 토큰을 해시 형태로 저장하며 만료 시각과 회전 시각이 함께 남습니다. 고엔트로피 매직 링크 토큰은 해시로만 저장합니다. 다만 다른 기기에서 입력하는 6자리 폴백 코드는 코드 자체가 같은 단기 로그인 대기 행에 저장되며, 이메일, 컨텍스트 해시, 만료·사용 시각, 무차별 대입을 막기 위한 시도 횟수가 함께 남습니다.
  • 토큰 갱신 복구 기록 — 중단된 토큰 갱신을 안전하게 재시도하기 위한 작업 식별자, 토큰 해시, 만료 시각, 암호화된 갱신 응답을 저장합니다. 평문 세션 토큰은 이 기록에 저장하지 않습니다.
  • 구매 권한 — App Store 구매를 계정에 연결하는 기능을 이용하면 요금제, 만료·갱신 시각, Apple의 원거래 식별자를 저장합니다.
  • 패스키 — 패스키로 로그인하는 경우 WebAuthn 챌린지와 패스키의 공개 자격 증명(자격 증명 ID, 공개 키, 서명 카운터, 전송 방식)을 저장합니다.
  • 남용 방지 카운터 — 로그인 기능을 보호하기 위해 IP 주소와 정규화된 이메일 주소를 키로 하는 단기 요청 카운터를 별도로 유지합니다.
  • App Store 심사용 계정 — 심사 기간에만 쓰이는 계정에는 해시된 심사 로그인 코드, 실패 시도 횟수, 로그인 시도 횟수를 집계하는 구간의 시작 시각이 계정 레코드에 함께 저장됩니다.

이 정보는 로그인, 기기 신뢰, 연결 준비, 구매 권한 확인과 서비스 보호에 사용합니다. 화면·오디오·입력 내용은 계정 데이터베이스에 저장하지 않습니다. 운영 텔레메트리·요청 로그와 시그널링의 일시 데이터는 아래에서 별도로 설명합니다. 서비스 제공에 필요한 인프라 처리는 제3자 서비스 절을 참고해 주세요.

백엔드는 Cloudflare에서 동작합니다. 이 방침은 특정 처리 지역을 보장하지 않습니다.

A Reach Account unlocks the two internet routes — Internet Direct, which performs NAT traversal through a saved connection profile, and Relay — and lets devices on the same account trust each other without a pairing code. An account does not by itself create a path: connectivity still requires a dialable direct candidate or a configured relay.

Sign-in is by email. We send a one-time magic link or code; there are no passwords. If you sign in, our backend stores the following, tied to your account:

  • Your email address — used only to sign you in.
  • An account record — the account identifier and email, a server-held account signing key pair, and the metadata needed to manage sign-in state: creation and verification times, a session generation counter, and the account role.
  • A device registry — for each device you register: its device identifier, name, type (Mac host, or iPhone or iPad viewer), cryptographic identifiers (public key, key fingerprint, TLS certificate fingerprint), and its registration, last-seen, and revocation times. For a Mac host it also holds the reachable address and port plus a list of direct connection candidates, so your other devices can dial it.
  • Sign-in state — short-lived session and refresh tokens, stored hashed, with their expiry and rotation times. The high-entropy magic-link token is stored only as a hash. The six-digit cross-device fallback code, however, is stored as the code itself in the same short-lived pending-login row, alongside the email, a context hash, its expiry and consumption times, and an attempt counter that bounds brute force.
  • Token-refresh recovery — operation identifiers, token hashes, expiry times, and an encrypted refresh response allow interrupted token rotations to be retried safely. These records do not store plaintext session tokens.
  • Purchase entitlements — when you use App Store purchase linking, the account stores the plan, expiry and update times, and Apple’s original transaction identifier.
  • Passkeys — if you sign in with a passkey, the WebAuthn challenge and the passkey's public credential (credential ID, public key, signature counter, transports).
  • Abuse-prevention counters — short-lived request counters keyed by IP address and normalized email address, kept separately to protect the sign-in surface.
  • App Store review accounts — for an account used only during App Store review, the account record also stores a hashed review sign-in code, the failed-attempt count, and the attempt-window start time.

This information supports sign-in, device trust, connection setup, purchase-entitlement verification, and service protection. Screen, audio, and input content are not stored in the account database. Operational telemetry, request logs, and ephemeral signaling data are described separately below. See Third-party services for the infrastructure processing needed to provide these functions.

The backend runs on Cloudflare. This policy does not promise a specific processing region.

시그널링과 일시적 연결 후보Signaling and ephemeral connection candidates

로그인 상태에서 Internet Direct와 Relay를 시도할 때 시그널링 서비스가 IP 주소와 포트 같은 연결 후보를 교환합니다. 연결 후보, 시도 인증 정보, 해당하는 경우 viewer의 공개 IP 주소와 요청 제한 상태를 처리합니다.

개별 후보 데이터에는 게시 시점부터 최대 60초의 유효기간이 설정됩니다. 재게시가 있으면 시도 전체의 기한이 갱신될 수 있습니다. 취소·만료 처리가 후보와 관련 상태를 정리하지만, 성공 즉시 또는 정확히 60초에 저장소에서 물리 삭제된다는 뜻은 아닙니다. 활성 호스트 소켓에 필요한 인증 정보는 소켓이 유지되는 동안 남을 수 있고, 취소된 연결 시도가 다시 시작되지 않도록 잠시 유지하는 상태와 서비스 보호용 카운터에는 별도 수명이 적용됩니다.

시그널링 서비스는 화면·오디오·입력 내용을 받거나 저장하지 않습니다. 세션 내용은 직접 연결 또는 아래 Cloudflare TURN 경로로 전송됩니다.

For signed-in Internet Direct and Relay attempts, signaling exchanges connection candidates such as IP addresses and ports. It processes candidate payloads, attempt-authentication bindings, a viewer public IP address when present, and rate-limiting state.

Each candidate payload has a validity period of at most 60 seconds from publication. Republishing can update the overall attempt deadline. Cancellation and expiry handling clean up candidates and related state; this does not promise physical deletion immediately after success or at exactly 60 seconds. Authentication state needed by a live Host socket can remain while that socket is active. Brief cancellation markers that prevent reopening an attempt and service-protection counters have separate lifetimes.

The signaling service does not receive or store screen, audio, or input content. Session content travels over a direct connection or the Cloudflare TURN route described below.

Cloudflare TURN을 통한 Relay(중계)Relay through Cloudflare TURN

CGNAT, 엄격한 방화벽, 일부 모바일 네트워크처럼 직접 경로를 열기 어려울 때 Reach는 세션을 Cloudflare TURN으로 중계할 수 있습니다. 본인의 Cloudflare 계정과 자격 증명을 Reach Host에 설정해야 하며, 이용자의 Cloudflare 요금과 정책이 적용됩니다.

계정 API 토큰으로 자동 설정하면 Mac이 Cloudflare API에 TURN 키 생성을 요청합니다. 이 요청에는 Cloudflare Account ID와 토큰, Mac 이름을 포함할 수 있는 키 이름이 전달됩니다. 생성된 TURN 키 또는 직접 입력한 키는 Mac Keychain에 저장되며, 세션용 단기 자격 증명을 발급받는 데 사용합니다. 이 자격 증명 요청은 Mac에서 Cloudflare로 직접 보내며 Reach 계정 서버로 전달하지 않습니다.

영상·오디오·입력은 중계를 지나는 동안에도 QUIC 위 TLS 1.3으로 암호화된 상태를 유지합니다. Cloudflare는 암호화된 패킷과 서비스 제공에 필요한 네트워크 메타데이터를 처리합니다. 연결 지연은 네트워크와 중계 경로에 따라 달라집니다.

선택형 Cloudflare 사용량 조회

사용량 조회를 켜고 새로고침하면 Mac이 Cloudflare GraphQL API에 직접 요청합니다. Account ID, 조회 기간, 선택한 경우 TURN Key ID와 API 토큰이 전달되며, 송수신 바이트 합계를 받아 보여 줍니다. 계정 전체 범위를 고르면 Reach 이외의 TURN 사용량도 포함될 수 있습니다. 사용량 조회 자체는 토큰 저장만으로 실행되지 않습니다.

조회 토큰은 TURN 세션 자격 증명과 구분된 기기 전용 Keychain 항목에 저장됩니다. 조회 활성화 여부·Account ID·표시 범위는 로컬 설정에, 조회 결과는 앱 실행 중 메모리에만 보관합니다. 조회를 끄거나 Reach 계정을 변경하면 기존 결과를 비우지만 저장한 Cloudflare 자격 증명을 자동 삭제하지는 않습니다. Host에서 자격 증명을 지워도 Cloudflare 계정에서 발급된 키나 토큰을 폐기하는 것은 아니므로, 폐기는 Cloudflare에서 처리해 주세요.

When a direct path is difficult to open — for example behind CGNAT, restrictive firewalls, or some mobile networks — Reach can relay the session through Cloudflare TURN. You configure your own Cloudflare account and credentials in Reach Host; your Cloudflare charges and policies apply.

With automatic account-token setup, the Mac requests a TURN key from Cloudflare’s API. This sends the Cloudflare Account ID, token, and a key name that can include the Mac’s name. The generated TURN key, or a key you enter manually, is stored in the Mac Keychain and used to obtain short-lived session credentials. These credential requests go directly from the Mac to Cloudflare, not through the Reach account server.

Video, audio, and input remain encrypted with TLS 1.3 over QUIC while traversing the relay. Cloudflare processes encrypted packets and the network metadata needed to provide its service. Connection latency depends on the network and relay path.

Optional Cloudflare usage reporting

When you enable usage reporting and select Refresh, the Mac calls Cloudflare’s GraphQL API directly. The request includes the Account ID, time range, optional TURN Key ID, and API token; the response provides aggregate ingress and egress bytes. Account-wide results can include TURN usage from services other than Reach. Storing a token alone does not run a usage query.

The reporting token is held in a device-only Keychain entry separate from TURN session credentials. The enable switch, Account ID, and display scope are local preferences; fetched results are held only in memory while the App runs. Turning reporting off or changing Reach accounts clears the previous results without automatically deleting the saved Cloudflare credentials. Removing credentials in Host does not revoke keys or tokens already issued by your Cloudflare account; manage revocation in Cloudflare.

계정 삭제와 기기 제거Deleting your account and removing devices

Reach 계정은 앱 안에서 삭제할 수 있습니다. 계정 데이터베이스에서 계정 레코드, 등록 기기, 세션과 토큰 갱신 복구 기록, 대기 중인 로그인 코드, 패스키, 연결된 WebAuthn 챌린지를 함께 삭제합니다. 계정 생성 전에 만들어졌더라도 같은 이메일을 가진 WebAuthn 챌린지는 이 정리에 포함됩니다.

서비스 보호용 요청 카운터와 운영 로그는 계정 삭제 요청의 대상이 아닙니다. 카운터는 설정된 제한 창과 정리 절차를 따르며, 운영 로그는 Cloudflare에서 별도로 보관됩니다. 이 방침은 운영 로그의 고정 보존 일수를 보장하지 않습니다.

만료되거나 사용된 로그인 링크·코드는 다시 인증에 쓰이지 않습니다. 만료된 로그인·WebAuthn·토큰 갱신 복구 기록과 리프레시 수명이 끝난 세션은 정기 정리 작업의 대상입니다. 정리 일정이나 작업 오류에 따라 물리 삭제는 만료 시점보다 늦어질 수 있습니다.

기기는 계정과 별도로 제거할 수 있습니다. 로그아웃은 계정 삭제가 아닙니다. 로컬 연결 설정, 프리셋, 신뢰 기록, Cloudflare 자격 증명은 각각 별도로 정리해야 합니다. Reach 계정 삭제가 Apple의 CloudKit 공개 레코드나 본인 Cloudflare 계정의 키까지 삭제하지는 않습니다.

You can delete your Reach Account in the App. The account database deletes the account record, registered devices, sessions and token-refresh recovery records, pending login codes, passkeys, and associated WebAuthn challenges together. Pre-account WebAuthn challenges with the same email address are also included.

Abuse-prevention counters and operational logs are outside this account-deletion request. Counters follow their configured rate-limit windows and cleanup procedures; operational logs are retained separately in Cloudflare. This policy does not promise a fixed retention period for operational logs.

Expired or consumed login links and codes cannot be reused for authentication. Expired login, WebAuthn, and refresh-recovery records, and sessions whose refresh lifetime has ended, are eligible for scheduled cleanup. The cleanup schedule or a failed operation can make physical deletion occur after expiry.

You can remove individual devices separately. Signing out is not account deletion. Local connection preferences, presets, trust records, and Cloudflare credentials have separate cleanup controls. Deleting a Reach account does not delete Apple’s public CloudKit records or keys in your own Cloudflare account.

화면 기록과 시스템 오디오 (Reach Host)Screen recording and system audio (Reach Host)

Reach Host는 선택한 디스플레이를 캡처하기 위해 macOS 화면 기록 권한을, viewer에서 보낸 입력을 전달하기 위해 손쉬운 사용 권한을 요청합니다. 선택형 창 위치 복원도 이 권한으로 지원되는 앱 창의 위치와 크기를 읽고 변경합니다.

시스템 오디오는 ScreenCaptureKit을 통해 캡처됩니다. Reach Host는 마이크 권한을 요청하지 않고 마이크 샘플도 처리하지 않습니다. 필요한 것은 화면 기록/시스템 오디오 권한입니다. 캡처는 Mac에서 이뤄지며 해당 세션에 대해 인증된 viewer에게만 전송됩니다.

Reach Host requests macOS Screen Recording permission to capture the display you select, and Accessibility permission to deliver the input you send from the viewer. Optional window restoration also uses this permission to read and change the position and size of supported app windows.

System audio is captured through ScreenCaptureKit. Reach Host does not request Microphone permission and ignores microphone samples; what it needs is Screen Recording / system-audio access. Capture happens on the Mac and is streamed only to viewers authenticated for that session.

커서 위치 공유Cursor position sharing

Direct Touch 모드에서는 픽셀 단위로 정확하게 포인터를 움직일 수 있도록 viewer에 커서 핸들이 나타납니다. 이를 움직이기 위해 Reach Host는 Mac 커서의 위치, 즉 정규화된 좌표와 그 커서가 속한 디스플레이, 타임스탬프를 연결되어 인증된 viewer로 보냅니다. 영상·입력과 같은 암호화된 QUIC 세션을 쓰며, 별도의 분석 서버로 보내거나 커서 이동 이력으로 저장하지 않습니다. Relay를 이용하면 암호화된 세션 패킷이 Cloudflare를 경유합니다.

Reach Host → Devices & Trust → Advanced → Cursor Telemetry에서 끌 수 있습니다. 끄면 호스트는 커서 위치 전송을 멈추고, 지원되는 viewer에는 화면에 남은 핸들을 지우라고 알립니다.

In Direct Touch mode the viewer shows a cursor handle for pixel-precise pointer movement. To drive it, Reach Host sends the position of the Mac's cursor — a normalized coordinate, the display it belongs to, and a timestamp — to the connected, authenticated viewer, over the same encrypted QUIC session as video and input. It is not sent to a separate analytics service or stored as a cursor-movement history. With Relay, encrypted session packets pass through Cloudflare.

You can turn it off in Reach Host → Devices & Trust → Advanced → Cursor Telemetry. The host then stops sending cursor position and tells supported viewers to clear any handle left on screen.

로컬 네트워크 접근Local network access

Reach Viewer는 주변 Mac을 Bonjour/mDNS로 찾고 로컬 네트워크의 Mac과 직접 통신할 때 로컬 네트워크 접근 권한을 사용합니다. 같은 네트워크의 Mac은 IP 주소를 직접 입력해도 이 권한이 필요합니다. 네트워크 밖의 주소로 수동 Direct IP 연결을 시도하는 경우에는 해당 주소와 포트에 도달할 수 있어야 합니다.

Reach Viewer uses Local Network permission to discover nearby Macs over Bonjour/mDNS and to communicate directly with a Mac on the local network. Entering that Mac's IP address manually does not replace this permission. Manual Direct IP to an address outside the local network is a separate case and requires a reachable address and port.

앱 업데이트 (Reach Host)App updates (Reach Host)

Reach Host는 Sparkle 업데이트 프레임워크를 사용해 실행할 때와 실행 중 주기적으로 새 버전을 확인합니다. 업데이트 확인은 GitHub Pages에서 호스팅되는 당사 업데이트 피드로 보내는 평범한 HTTPS 요청이며, 다른 HTTPS 요청과 마찬가지로 IP 주소와 User-Agent 헤더가 해당 엔드포인트에 보입니다. 다만 계정 식별자, 계정 식별자나 텔레메트리 등 별도의 식별 정보를 요청 본문에 추가하지 않습니다. 다만 IP 주소와 User-Agent는 요청을 처리하는 서버에 전달됩니다. Reach Viewer는 App Store를 통해 업데이트되며 Apple의 표준 App Store 정책을 따릅니다.

Reach Host checks for new versions on launch and periodically while running, using the Sparkle update framework. An update check is a standard HTTPS request to our update feed, which is hosted on GitHub Pages; as with any HTTPS request, your IP address and a User-Agent header are visible to that endpoint, but no account identifier, telemetry, or other identifying payload is sent. Reach Viewer updates through the App Store, governed by Apple's standard App Store policies.

분석, 추적, 광고Analytics, tracking, and advertising

Reach는 광고 식별자(IDFA)나 광고·프로파일링 SDK를 사용하지 않습니다. Crashlytics, Sentry, Google Analytics를 앱에 포함하지 않으며, 로컬 진단 기록은 이용자가 리포트를 공유할 때 제공할 수 있습니다. 위의 선택형 Cloudflare 사용량 조회와 아래의 백엔드 운영 기록은 별도로 동작합니다.

서비스 운영과 보호를 위해 Cloudflare에 운영 이벤트와 요청 로그를 기록하며, 구성된 경우 Analytics Engine으로 지표를 전송합니다. 주요 항목은 다음과 같습니다.

  • 연결 수명주기 이벤트 이름·시각, 연결 시도 식별자, 리전 레이블, 역할(호스트 또는 viewer), 결과와 지연 시간
  • 호스트 소켓 등록·등록 거절 이벤트의 앱 버전과 빌드, 소켓 종류, 재연결 경로, 안정적인 SHA-256 기반 호스트 가명 식별자. 관련 kill-switch 이벤트에는 Worker 요청 엔드포인트도 포함됩니다. 같은 확장 항목이 모든 초대·소켓 종료 이벤트에 붙는 것은 아닙니다.
  • 그룹·정리 건수, 소켓 리스 해제 사유와 상태, 오류 클래스와 짧은 상관 접두사. 기기 복원 로그에는 계정·기기 식별자의 앞 8자가 포함됩니다.
  • 구매 연결 기능을 이용하는 경우 계정 식별자의 앞 8자, 상품 식별자, 검증 환경과 적용 결과 등 구매 검증 운영 기록

가명 식별자는 기기 이름이나 계정 이메일 자체를 담지 않지만 같은 호스트의 이벤트를 연결하는 데 쓰일 수 있습니다. 요청 제한 상태도 서비스 보호를 위해 유지합니다. 로컬 진단에는 선택한 연결 경로가 포함될 수 있습니다. 현재 연결 수명주기 이벤트를 Analytics Engine에 보내는 코드에서는 별도의 경로 종류 필드를 채우지 않습니다.

이 기록은 연결 성공률·장애·서비스 보호와 구매 검증을 위한 것이며 화면·오디오·입력 내용은 포함하지 않습니다. 광고나 이용자 프로파일링에 사용하거나 판매하지 않습니다. Cloudflare는 서비스 제공자로서 이 운영 데이터를 처리합니다.

Reach does not use advertising identifiers (IDFA) or advertising and profiling SDKs. The apps do not include Crashlytics, Sentry, or Google Analytics. Local diagnostics can be provided when you choose to share a report. Optional Cloudflare usage reporting, described above, and backend operational records, below, are separate functions.

To operate and protect the service, the backend records operational events and request logs in Cloudflare and, when configured, sends metrics to Analytics Engine. Principal categories include:

  • Connection-lifecycle event names and times, attempt identifiers, region labels, role (host or viewer), outcome, and latency
  • App version and build, socket kind, reconnect path, and a stable SHA-256-derived host pseudonym on host socket registration and blocked-registration events. Related kill-switch events also include the Worker request endpoint. These extra fields are not attached to every invite or socket-close event.
  • Group and cleanup counts, socket-lease release reasons and status, error classes, and short correlation prefixes. Device-restoration logs include the first eight characters of account and device identifiers.
  • When purchase linking is used, operational purchase-verification records such as the first eight characters of the account identifier, product identifier, verification environment, and application result

A pseudonym does not contain the device name or account email itself, but can link events from the same host. Rate-limiting state is also kept for service protection. Local diagnostics can include the selected connection route. The current code forwarding connection-lifecycle events to Analytics Engine does not populate a separate route-kind field.

These records support connection reliability, fault diagnosis, service protection, and purchase verification. They exclude screen, audio, and input content. We do not sell them or use them for advertising or user profiling. Cloudflare processes this operational data as a service provider.

기기에 저장되는 데이터Data stored on your devices

  • 연결 환경설정 — 선택한 디스플레이, 해상도, 코덱, 프레임레이트, 비트레이트, 스크롤 방향 토글, 커서 텔레메트리 켬/끔, 그리고 Mac마다 마지막으로 고른 경로
  • 작업공간 프리셋 — 이름, 화면 배치와 각 화면의 Mac·디스플레이 식별자, 경로, 크기·해상도 설정, 창 위치 복원 선택과 생성·수정 시각을 Viewer의 로컬 설정에 저장합니다.
  • 저장된 연결 정보 — Direct IP 호스트에 입력한 주소와 포트, 그리고 페어링한 Mac의 페어링 코드
  • 신뢰 기록 — 페어링한 호스트, 그리고 호스트가 신뢰한 viewer의 암호학적 지문
  • 계정 세션 토큰(로그인한 경우) — 기기의 보안 키체인에 저장됩니다
  • Cloudflare 자격 증명(설정한 경우) — 중계 키와 선택형 사용량 조회 토큰은 Mac Keychain에 저장합니다. 키 생성·세션 자격 증명 발급·사용량 조회는 위에서 설명한 대로 Cloudflare API와 직접 통신합니다.
  • 진단 로그 — 문제 해결을 위해 일시적으로 보관하며, 이용자가 직접 리포트를 공유하지 않는 한 업로드되지 않습니다

선택형 앱 창 위치 기억

프리셋에서 Remember app window positions를 켜고 Mac에 손쉬운 사용 권한이 있으면, Reach 가상 디스플레이를 닫기 전에 지원되는 열려 있는 창의 참조·정규화된 위치와 크기·크기 조절 가능 여부를 Mac 프로세스 메모리에 보관합니다. 같은 디스플레이를 다시 만들 때 아직 열린 창을 복원하는 데 사용합니다. 이 스냅샷에는 창 제목이나 문서 식별자를 별도 필드로 저장하지 않으며 디스크나 Reach 서버에 저장하지 않습니다. Host 프로세스 종료 시 사라지고, 해당 디스플레이에서 복원 기능을 끄면 관련 스냅샷을 비웁니다. 프리셋의 켬/끔 선택 자체는 Viewer 설정에 남습니다.

iPhone이나 iPad에서 앱을 삭제하면 앱 컨테이너 데이터도 함께 지워집니다. Keychain 항목은 앱 컨테이너와 별도로 관리되므로 앱 삭제만으로 모든 자격 증명이 지워진다고 보장하지 않습니다. Mac에서는 Reach Host 앱 번들을 지워도 설정, Application Support 파일, 키체인 항목이 자동으로 삭제되지는 않습니다. 깨끗이 지우고 싶다면 직접 제거해 주세요.

  • Connection preferences — selected display, resolution, codec, frame rate, bitrate, scroll-direction toggles, cursor telemetry on or off, and the route last chosen for each Mac
  • Workspace presets — names, layout and per-screen Mac and display identifiers, route, sizing and resolution choices, window-restoration preference, and creation and update times are stored in the Viewer’s local settings.
  • Saved connection details — the address and port you entered for a Direct IP host, and the pairing code for a Mac you have paired with
  • Trust records — cryptographic fingerprints of hosts you have paired with, and of viewers your host has trusted
  • Account session tokens, if you are signed in — in the device's secure keychain
  • Cloudflare credentials, if configured — relay keys and optional reporting tokens are stored in the Mac Keychain. Key creation, session-credential generation, and usage reporting call Cloudflare directly as described above.
  • Diagnostic logs — kept temporarily for troubleshooting, never uploaded unless you choose to share a report

Optional remembering of app window positions

With Remember app window positions enabled in a preset and Accessibility permission on the Mac, Reach keeps references to supported, open windows, their normalized position and size, and whether they can be resized in Mac process memory before removing a Reach virtual display. It uses this snapshot to restore still-open windows when that display is recreated. Window titles and document identifiers are not saved as snapshot fields, and the snapshot is not written to disk or a Reach server. It disappears when the Host process exits; disabling restoration for the display clears its snapshot. The preset’s on/off choice remains in Viewer settings.

Deleting the iPhone or iPad app removes its app-container data. Keychain items are managed separately, so uninstalling alone does not guarantee removal of all credentials. On the Mac, deleting the Reach Host app bundle does not automatically remove its settings, Application Support files, or Keychain items; remove those by hand if you want a clean slate.

이 웹사이트This website

reachremote.app은 Cloudflare Pages에서 제공하는 정적 웹사이트입니다. 사이트 자체의 스타일·스크립트·이미지는 같은 사이트에서 제공합니다. Cloudflare는 공개 도메인에 이메일 주소 난독화와 브라우저 검증 스크립트를 추가합니다. 공개 페이지에는 페이지 조회와 성능 지표를 위한 Cloudflare Web Analytics 비콘도 포함됩니다. Cloudflare 보안 기능은 필요한 쿠키를 사용할 수 있습니다. 광고 추적 도구는 사용하지 않습니다. Cloudflare는 웹 요청을 처리하면서 IP 주소와 User-Agent 등 일반적인 접속 정보도 처리합니다.

언어는 /ko/, /en/ 등의 URL 경로에, Cloudflare 설정 목적은 setup 쿼리 매개변수에 반영합니다. 기존 ?lang=en 링크는 해당 영어 경로로 이동합니다. 웹페이지에서 API 토큰이나 페어링 코드를 입력받지 않습니다. Mac 설치 파일을 누르면 GitHub Releases API로 최신 DMG를 확인한 뒤 GitHub 다운로드로 이동합니다. GitHub와 App Store 등 외부 링크를 열면 해당 서비스의 개인정보 처리방침이 적용됩니다.

reachremote.app is a static site hosted on Cloudflare Pages. The site's own styles, scripts, and images are served from this site. Cloudflare adds email address obfuscation and browser verification scripts on the public domain. Public pages also include the Cloudflare Web Analytics beacon for page-view and performance metrics. Cloudflare security features may use necessary cookies. We do not use advertising trackers. Cloudflare also processes ordinary request metadata, such as IP address and User-Agent, when serving web requests.

Website language is specified in the URL path. Old ?lang=en links move to the matching English page. The Cloudflare setup choice is stored in the setup query parameter. This website does not collect API tokens or pairing codes. Selecting the Mac download queries the GitHub Releases API for the latest DMG, then opens GitHub’s download. External destinations, including GitHub and the App Store, have their own privacy policies.

제3자 서비스Third-party services

  • Cloudflare — 웹사이트, 선택적인 계정·이메일 로그인·시그널링 서비스와 운영 기록을 처리합니다. 또한 이용자 계정의 TURN 중계, 키 생성과 선택형 사용량 조회 API를 제공합니다. 중계 패킷의 세션 내용은 기기 사이에서 암호화됩니다.
  • Apple (CloudKit) — 본인 기기끼리 서로를 발견할 수 있도록 위에서 설명한 페어링 메타데이터를 저장합니다.
  • Apple (App Store) — Reach Viewer를 배포하고 해당하는 구매·구독과 구매 검증을 처리합니다. Apple의 표준 App Store 정책이 적용됩니다.
  • GitHub — Reach Host 업데이트 피드(appcast)를 GitHub Pages에서 호스팅하고 Host 설치 파일을 GitHub Releases로 배포합니다. 업데이트를 확인하거나 내려받을 때 GitHub가 IP 주소와 User-Agent 같은 표준 HTTPS 요청 메타데이터를 처리합니다.

위 서비스는 각각의 역할에 필요한 데이터를 처리합니다. Reach는 데이터를 광고 네트워크나 데이터 브로커에 판매하지 않습니다.

  • Cloudflare — serves the website and processes optional account, sign-in email, signaling, and operational data. It also provides TURN relay, key creation, and optional usage APIs under your own account. Session content in relayed packets is encrypted between your devices.
  • Apple (CloudKit) — stores the pairing metadata described above so your own devices can discover each other.
  • Apple (App Store) — distributes Reach Viewer and processes applicable purchases, subscriptions, and purchase verification under Apple's standard App Store policies.
  • GitHub — hosts the Reach Host update feed (appcast) on GitHub Pages and distributes the Host installer through GitHub Releases. GitHub processes standard HTTPS request metadata such as your IP address and User-Agent when you check for or download an update.

These services process data needed for their respective roles. Reach does not sell data to advertising networks or data brokers.

보안Security

Nearby(같은 네트워크), 수동 Direct IP, Internet Direct, Relay(중계) — 모든 경로는 QUIC 위 TLS 1.3으로 암호화되고 인증서 핀닝으로 보호됩니다. viewer는 이미 신뢰하는 인증서 지문을 가진 호스트에만 연결합니다. 그 지문은 페어링할 때 기록되었거나, Reach 계정의 기기 목록에 보관된 것이거나, 이용자가 명시적으로 허용한 첫 직접 연결에서 고정(TOFU)된 것입니다. 이후 지문이 달라지면 연결은 거부됩니다. 어떤 경로에서도 당사는 이 트래픽을 복호화할 수 없습니다.

Every route — Nearby / LAN, Manual Direct IP, Internet Direct, and Relay — is encrypted with TLS 1.3 over QUIC and protected by certificate pinning. A viewer connects only to a host whose certificate fingerprint it already trusts — recorded when you paired, held for that device in your Reach Account's device registry, or pinned on an explicitly authorized first direct connection (trust on first use). A later mismatch is rejected. We cannot decrypt this traffic on any route.

아동 개인정보Children's privacy

Reach는 만 13세 미만 아동을 대상으로 하지 않으며, 아동의 정보를 알면서 수집하지 않습니다. 페어링과 계정 메타데이터는 위에 설명한 서비스 기능에 사용하며 광고나 이용자 프로파일링에 사용하지 않습니다.

Reach is not directed at children under 13, and we do not knowingly collect information from children. Pairing and account metadata supports the service functions described above and is not used for advertising or user profiling.

방침 변경Changes to this policy

이 방침은 필요에 따라 갱신될 수 있습니다. 변경 사항은 이 페이지에 게시하고 맨 위의 날짜를 함께 갱신합니다. 신뢰 모델이나 데이터 흐름이 바뀔 때마다 방침을 수정합니다.

We may update this policy from time to time. Changes are posted on this page and the date at the top is updated. We revise it whenever the trust model or the data flow changes.

문의Contact

개인정보 처리방침에 관한 문의는 support@reachremote.app으로 보내 주세요. 버그 신고와 공개 질문은 github.com/SGT-Cho/Reach에서 받습니다.

Questions about this privacy policy: support@reachremote.app. Bug reports and public questions: github.com/SGT-Cho/Reach.

스크린샷 크게 보기Screenshot