개인정보 처리방침
최근 업데이트: 2026년 7월
개요
DuckTerm("본 앱")은 독립 개발자가 개발·운영하는 iPhone·Android용 모바일 SSH 클라이언트이자 AI 에이전트 콘솔입니다. 우리는 여러분의 프라이버시를 진지하게 다룹니다. 본 방침은 앱이 어떤 데이터에 접근하고, 어떻게 사용하며, 여러분에게 어떤 권리가 있는지 설명합니다.
SSH 자격 증명 및 개인 키
비밀번호, 개인 키(.pem), 패스프레이즈 등 인증 정보는 기기에 저장되며 — iPhone에서는 iOS 키체인, Android에서는 Android Keystore로 보호되는 암호화 볼트 — DuckTerm 서버로는 절대 전송되지 않습니다.
iOS에는 세 가지 동기화 채널이 있습니다. ① DuckTerm의 선택적 iCloud 동기화(앱 내 스위치)는 연결 메타데이터만 전달하며 자격 증명은 절대 포함하지 않습니다. ② 자격 증명은 키체인의 iCloud 동기화 가능 영역에 저장되어, 시스템 iCloud 키체인이 켜져 있으면 Apple이 같은 Apple ID 기기 간에 종단 간 암호화로 복제합니다. ③ 푸시 페어링 토큰(DuckTerm 푸시 릴레이 인증용 bearer)은 동기화 가능 키체인에 저장되고 Apple의 iCloud 키-값 저장소로도 미러링되어 기기 간 자동 페어링에 쓰이며 — 이 채널은 앱 내 동기화 스위치의 영향을 받지 않습니다. ①과 ②의 SSH 자격 증명과 메타데이터는 우리가 읽을 수 없습니다. ③의 페어링 토큰은 설계상 다릅니다: 모든 푸시 요청과 함께 DuckTerm 릴레이로 전송되며, 릴레이는 인증을 위해 이를 검증할 뿐 다른 용도로는 사용하지 않습니다.
Android에서 Google Drive 동기화를 켜면 비밀번호·키·점프/프록시 자격 증명을 포함한 전체 연결 프로필이 Google 계정의 비공개 Drive appDataFolder에 저장됩니다. Google은 해당 파일의 전송과 저장을 보호합니다. 선택 사항인 DuckTerm 관리 자격 증명 필드 암호화는 기본으로 꺼져 있습니다. 켜면 데이터 암호화 키로 자격 증명의 비밀 필드를 암호화합니다. 원본 키는 Android Keystore로 보호되는 로컬 저장소에 남고, 패스프레이즈로 감싼 복구 키 사본이 Drive에 저장됩니다. 프로필 메타데이터, 스니펫, 선택된 설정, 단축키, 테마는 암호화 여부와 관계없이 볼트 파일 안에 평문으로 남습니다. 자격 증명 암호화를 끄면 유효한 DuckTerm Drive 권한을 가진 주체가 비밀 필드도 읽을 수 있으며, appDataFolder는 일반 Drive UI에서 보이지 않습니다.
서버 목록, 워크스페이스, 스니펫
저장된 서버 항목, 워크스페이스, 스니펫, 단축키는 로컬에 저장됩니다. 설정에서 동기화를 켜면 iOS의 iCloud(CloudKit)은 서버 메타데이터(호스트, 포트, 사용자명, 점프/프록시 구성, 시작 명령 포함)와 워크스페이스를 동기화합니다. 스니펫, 단축키, 비밀번호, 개인 키는 포함하지 않으며, 자격 증명은 위에서 설명한 iCloud Keychain을 사용합니다. Android에서는 비공개 Google Drive appDataFolder 볼트가 전체 연결 프로필과 독립 SSH 키, 스니펫, 선택된 설정, 사용자 정의 단축키, 테마를 동기화합니다. iCloud와 Drive는 서로 동기화하지 않으며, 우리는 이 데이터를 위한 별도의 프로필 동기화 서버를 운영하지 않습니다.
SSH, Mosh, SFTP 트래픽
SSH, Mosh, SFTP 세션은 휴대폰이나 태블릿에서 지정한 호스트로 직접 연결됩니다. 우리는 이 트래픽을 프록시하거나 복호화하거나 저장하지 않습니다. HTTP/SOCKS5 프록시나 ProxyJump 배스천을 구성한 경우 그 구간 역시 사용자가 제어합니다 — DuckTerm은 구성된 경로로만 패킷을 전달합니다.
푸시 릴레이와 에이전트 상호작용 트래픽
선택 사항인 Pro 기능(에이전트 수신함, 완료 알림)은 iOS에서는 Apple Push Notification 서비스(APN), Android에서는 Firebase Cloud Messaging(FCM)을 통해 푸시를 전달합니다. 알림 내용 — 이벤트 종류, 세션 이름, 제목, 에이전트 활동에서 생성된 짧은 본문 미리보기 — 은 우리의 푸시 릴레이를 거치며 페어링 신원을 키로 전달과 중복 제거에 사용됩니다. 해당 내용은 릴레이가 수신한 뒤 약 60–65분 시점에 삭제할 예정이며, 정리 작업은 5분마다 및 서비스 시작 시 실행됩니다. 잠금 화면 Live Activity(iOS 전용)의 경우, 세션을 팔로우하는 동안 릴레이가 현재 작업 상태(프롬프트 요약과 마지막 출력 줄)를 유지하며, 팔로우를 해제하면 해당 내용은 약 1분 안에 비워지고 모든 작업 상태는 마지막 이벤트로부터 약 24시간 뒤 완전히 삭제됩니다. 이 내용은 알림 전달에만 사용하며 — 광고, 프로파일링, 재판매에는 절대 사용하지 않습니다.
릴레이는 앱과 페어링된 데몬 사이의 상호작용 트래픽도 전달합니다. 승인과 AskUser 답변, 텍스트 답장, Live Preview 대체 경로, 이미지 대체 경로, 그리고 선택했을 때만 실험적 ChatGPT 음성 오디오가 해당됩니다. Live Preview와 이미지 데이터는 가능한 경우 LAN/P2P를 우선하며, P2P가 TURN을 사용할 수 있습니다. 릴레이는 답장, 이미지, 오디오 내용을 전송 중에만 중계하고 해당 평문을 알림 이벤트 데이터베이스에 저장하지 않습니다. Payload hash와 라우팅·전달 메타데이터는 중복 전달을 막고 페어링된 기기를 운영하기 위해 별도로 저장되며, 알림 내용의 약 1시간 보관 규칙은 적용되지 않습니다.
수신함 & 스냅샷 (기기 내)
전달이 끝나면 수신함의 기준 레코드와 tmux 스냅샷은 기기에 저장되며, 전송 과정에서는 위에서 설명한 릴레이 경로를 사용할 수 있습니다. 무료 버전은 수신함을 30일, Pro는 무제한 보관합니다. 설정에서 개별 항목 또는 전체 수신함을 언제든 지울 수 있습니다.
음성 입력
기본 음성 입력(Mic / Wispr)은 플랫폼의 시스템 음성 인식을 사용합니다 — iOS는 Apple Speech 프레임워크, Android는 기기의 음성 인식기입니다. 오디오가 기기에서 처리되는지, 플랫폼 음성 서비스로 네트워크 전송되는지는 플랫폼·기기·설치된 언어 팩에 따라 다르며, 지원되는 경우 기기 설정에서 온디바이스 인식을 강제할 수 있습니다. 시스템 인식을 사용할 때 DuckTerm 자체는 오디오를 녹음·저장·수신하지 않습니다.
선택 사항인 실험적 ChatGPT 음성 인식도 제공됩니다. 이를 선택하면 DuckTerm이 기기에서 임시 오디오 클립을 녹음해 DuckTerm 릴레이를 거쳐 페어링된 개발 머신으로 보내고, 개발 머신이 ChatGPT(OpenAI)에 제출해 전사합니다. 오디오는 해당 전사에만 사용됩니다: 임시 파일은 업로드 후 삭제되고 릴레이는 오디오를 저장하지 않고 일시적으로만 전달하며, OpenAI는 자체 약관에 따라 처리합니다. 오디오가 DuckTerm 릴레이나 OpenAI로 전송되는 것을 원치 않으면 기본 시스템 인식을 사용하세요 — 시스템 인식 자체가 네트워크로 처리되는지는 플랫폼·기기·언어 팩에 따라 다릅니다. OpenAI의 처리 방식은 openai.com/policies/privacy-policy를 참조하세요.
크래시 리포트 (Sentry)
버그를 찾고 고치기 위해 Sentry로 익명 크래시 리포트와 성능 데이터를 수집합니다. 크래시 리포트에는 다음이 포함될 수 있습니다:
- 기기 모델 및 OS 버전
- 앱 버전 및 빌드 번호
- 크래시 스택 트레이스
- 기본 성능 지표
크래시 리포트에는 SSH 자격 증명, 비밀번호, 개인 키, 터미널 버퍼 내용이 절대 포함되지 않습니다. 진단 컨텍스트에는 오류 재현을 위한 자격 증명이 아닌 메타데이터(서버 호스트명과 포트, 알림 제목 등)가 포함될 수 있습니다. 인증 토큰·비밀번호 같은 민감 필드는 전송 전 자동으로 제거됩니다. 설정에서 크래시 리포트를 끌 수 있습니다.
광고 없음, 추적 없음
DuckTerm에는 광고 SDK나 앱 간 트래커가 없습니다. 서드파티 서비스는 Sentry 크래시 리포트(옵트아웃 가능), RevenueCat(구매 처리 및 표준 구매 분석), 그리고 — 선택 사항인 ChatGPT 음성 인식을 선택한 경우에만 — 전사를 위해 오디오 클립을 받는 OpenAI입니다. 여러분의 데이터를 판매하지 않고, 광고에 사용하지 않으며, 앱 간 추적을 위해 공유하지 않습니다.
인앱 구매
Pro 구독과 평생 구매는 구매한 스토어가 처리합니다 — iOS는 Apple App Store, Android는 Google Play입니다. 우리는 결제 정보를 받거나 저장하지 않습니다. 권한 검증은 RevenueCat이 구매 영수증과 구독 상태를 대신 처리합니다.
데이터 삭제
앱 안에서 서버나 저장된 키를 삭제하면 해당 자격 증명이 키체인 / Keystore 볼트에서 제거됩니다. 앱을 삭제하면 로컬 데이터베이스와 파일이 지워지지만, iOS에서는 시스템 동작에 따라 키체인 항목이 남을 수 있고(iCloud 키체인이 켜져 있으면 클라우드에도 남습니다) 자격 증명을 완전히 지우려면 먼저 앱에서 서버를 삭제하세요. 클라우드 데이터는 원본에서 삭제해야 합니다: iOS는 iCloud Drive 설정에서 DuckTerm 컨테이너를, Android는 Google Drive 웹사이트 → 설정 → "앱 관리"에서 DuckTerm의 숨겨진 앱 데이터를 삭제하세요. 동기화를 끄거나 Drive 연결을 해제해도 원격 볼트는 삭제되지 않습니다.
아동의 개인정보
DuckTerm은 만 13세 미만 아동을 대상으로 하지 않으며, 아동의 개인정보를 고의로 수집하지 않습니다.
방침 변경
본 방침은 수시로 업데이트될 수 있습니다. 변경 사항은 이 페이지에 개정일과 함께 게시됩니다.
문의
본 방침에 대한 질문은 [email protected]으로 문의하세요.