Xenon

개인정보 처리방침

Xenon 앱은 사용자의 PC에서 실행되고 데이터도 그 PC에 저장합니다. 이 웹사이트는 그것과 별개이며 적용되는 규칙도 다릅니다. 이 페이지는 둘을 나누어, 각각이 무엇을 보내고 무엇을 저장하는지 설명합니다.

최종 수정: 2026년 9월 27일

요약

  • Xenon 앱은 사용자가 앱을 어떻게 쓰는지 추적하지 않습니다. 계정도, 프로필도 없고, PC 밖으로 나가는 사용 기록도 없습니다. 집계는 두 가지가 있습니다. 하나는 앱이 업데이트를 확인할 때 전송되며 설치 자체를 설명합니다. 버전, 운영체제, 그리고 설치된 지 대략 얼마나 되었는지입니다. 다른 하나는 스토어에서 창작물을 설치할 때 그 창작물의 설치 수를 1 올립니다. 어느 쪽도 어떤 위젯을 여는지, 무엇을 검색하는지, 대시보드로 무엇을 하는지는 전혀 알려 주지 않습니다. 새로 설치하면 둘 다 켜진 상태로 시작하며, 설정 → 일반 → 업데이트에서 각각 끌 수 있습니다. 둘 중 하나가 추가된 버전 이전부터 Xenon을 쓰고 있었다면, 그 항목은 꺼진 상태로 유지되었습니다. 둘 다 식별자를 담고 있지 않으므로, 어느 쪽도 사용자와 연결되거나 다른 쪽과 결합될 수 없습니다.
  • 앱이 완전히 오프라인으로 동작하지는 않습니다. 업데이트 확인과 짧은 공지 목록 받아 오기는 앱이 스스로 합니다. 날씨, 앨범 아트, 사용자가 연결한 서비스에는 그것을 쓰는 기능이 있을 때만 연결합니다. 이 통신들은 아래에 정리되어 있습니다.
  • 이 웹사이트는 Google Analytics를 사용해 사람들이 어떤 페이지와 다운로드에 도달하는지 확인합니다. EEA(유럽경제지역), 영국, 스위스에서는 배너에서 동의하기 전까지 아무것도 저장되지 않습니다.
  • 페이지 조회 수는 Cloudflare Web Analytics로도 집계합니다. 이 도구는 쿠키를 설정하지 않고 프로필도 만들지 않습니다. 몇 명이 페이지에 도달했는지만 알려 줍니다.
  • 다운로드 버튼을 누르면 제 서버의 카운터가 1 올라갑니다. 쿠키도 식별자도 없습니다. 다운로드 링크는 여전히 GitHub를 곧바로 가리키므로, 이 카운터가 사용자와 파일 사이에 끼어들 일은 없습니다.

개인정보 처리 책임자와 연락처

Xenon은 개발자 한 명, Marcello Mastroeni의 개인 프로젝트입니다. 소스는 자체 비상업 라이선스로 GitHub에 있으며, 이 웹사이트의 데이터 컨트롤러(개인정보 처리 책임자)는 저입니다. 질문, 정정, 본인 데이터에 관한 요청 등 이 페이지의 내용에 관한 것이라면 무엇이든 marcellomastroeni4@gmail.com으로 메일을 보내거나 GitHub에 이슈를 열어 주세요.

이 웹사이트(xenon-app.com)

이 사이트는 Google Analytics 4(측정 ID G-LQ8Y8WZPQF)를 사용해 어떤 페이지가 읽히는지, 어떤 다운로드가 클릭되는지, 방문자가 어디에서 오는지 파악합니다. 이는 사이트에 대한 집계 보고입니다. 사용자가 가진 앱과는 연결되어 있지 않으며, 제가 이곳의 방문을 사용자 PC의 설치와 연결할 방법은 없습니다.

Analytics가 받는 정보

Cloudflare Web Analytics

Analytics와 함께 이 사이트는 쿠키 없이 페이지 조회 수를 세는 Cloudflare Web Analytics도 불러옵니다. 쿠키를 설정하지 않고, 식별자를 저장하지 않으며, 사이트를 넘나들거나 방문과 방문 사이에 사용자를 따라갈 수 없습니다. 페이지 URL, 리퍼러, 국가, 기기 유형, 페이지 로딩 시간을 집계 형태로 보고합니다. 누구도 식별하지 않으므로 동의 배너 없이 실행되며, 이런 것이 있다는 것을 알 수 있도록 여기에 적어 둡니다. 둘 다 쓰는 이유는 이렇습니다. Analytics는 배너에서 동의한 방문자만 세므로, 그 숫자를 비교해 읽을 전체 합계가 이쪽입니다.

다운로드 카운터

이 사이트에서 다운로드 버튼을 누르면, 페이지는 제 서버(앱이 통신하는 것과 같은 서포터 허브)에 다운로드 버튼이 눌렸다는 사실과 어느 버튼인지(hero, footer 등)를 알리는 한 줄짜리 메시지도 보냅니다. 메시지는 그것이 전부입니다. 쿠키도, 식별자도 없고, IP도 보관하지 않으며, 다른 무엇과도 결합될 수 있는 내용이 없습니다. (날짜, 버튼)별 카운터를 1 올리고 요청은 폐기됩니다.

이 카운터가 있는 이유는 그 한 단계가 제게 보이지 않았기 때문입니다. Cloudflare는 페이지가 조회되었다는 것을 알고 GitHub는 다운로드가 끝났다는 것을 알지만, 그 사이의 버튼 누름은 둘 다 보지 못합니다. 그런데 다운로드 페이지가 실제로 제 역할을 하는지 알려 주는 것은 바로 그 한 가지입니다. Google Analytics로도 보고할 수는 있지만, 배너에서 동의한 사람만 세고 이 사이트 방문자 중 상당수는 그것을 아예 차단하므로, 숫자가 제가 측정할 수 없는 방향으로 틀어지게 됩니다.

다운로드 링크 자체는 제 서버를 거치지 않습니다. 이전과 똑같이 GitHub를 곧바로 가리킵니다. 카운터는 따로 보내고 끝나는 메시지이며, 페이지는 그 응답을 기다리지 않습니다. 제 서버가 다운되었거나 사용자가 차단하더라도 다운로드는 정상적으로 되고, 버튼 누름이 집계되지 않을 뿐입니다.

쿠키 동의

이 사이트는 Google 동의 모드(Consent Mode)를 사용합니다. EEA, 영국 또는 스위스에 있다면 모든 저장 및 광고 신호가 거부 상태로 시작합니다. 동의를 누르기 전까지는 쿠키가 기록되지 않고, Analytics는 쿠키 없이 개인을 식별하지 않는 핑만 받습니다. 그 밖의 지역에서는 기본값이 허용이며, 거부를 누르면 꺼집니다. 거부는 동의와 같은 자리에서 같은 크기로, 한 번의 클릭으로 할 수 있습니다.

언제든 마음을 바꿀 수 있습니다. 이 버튼을 누르면 저장된 선택이 지워지고 배너가 다시 표시됩니다:

선택한 내용은 브라우저의 로컬 저장소에 xenon.site.consent라는 이름으로 기억됩니다. 이 값은 기기 밖으로 나가지 않습니다. 브라우저 데이터를 지우면 초기화됩니다.

호스팅과 글꼴

이 사이트는 GitHub Pages에서 제공되며, GitHub Pages는 페이지를 전달하기 위해 요청과 IP 주소를 처리하고 짧은 기간 보안 로그를 보관합니다. 이는 기술적으로 필요한 처리이며 동의 여부를 정하기 전에 일어납니다. 페이지 상단은 브라우저 세션당 한 번 GitHub API에 프로젝트의 별 개수도 요청하므로, GitHub는 그 요청도 보게 됩니다. 사이트의 글꼴은 사이트 자체(/fonts/)에서 제공되므로, 글꼴을 불러와도 다른 곳에는 연결하지 않습니다. 유일한 예외는 라이브 데모입니다. 데모는 앱의 대시보드 페이지를 그대로 실행하고 그 페이지의 글꼴을 Google Fonts에서 불러오므로, Google Fonts가 그 요청을 보게 됩니다. 커뮤니티 스크린샷은 Cloudflare R2(assets.xenon-app.com)에서 제공됩니다.

Xenon 앱

앱은 데이터를 사용자의 PC에 저장합니다. 설정, 메모, 할 일, 일정, 덱, AI 메모리, 업로드한 배경은 모두 server/data/에 있습니다. 앱은 이 폴더를 어디에도 업로드하지 않으며, 앱 안에는 분석 SDK도, 크래시 리포터도, 행동 추적도 없습니다. 아래에 설명하는 두 가지 익명 집계가 앱이 자기 자신에 대해 보내는 유일한 보고이며, 둘 다 어떤 종류의 식별자도 담고 있지 않습니다. 서버에 남는 것은 카운터뿐이고, 기기별 기록은 없습니다.

로컬 파일 검색과 디스크 공간 위젯은 사용자의 PC에서 실행됩니다. 검색어, 파일 이름, 폴더 인덱스, 디스크 검사 결과는 모두 PC에서 계산되며, 검색에서 연 파일 목록(내 검색 결과의 순위를 더 잘 매기는 데 쓰입니다)도 다른 모든 것과 마찬가지로 server/data/에 있습니다. 예외는 Xenon AI에 직접 넘기는 내용입니다. 클라우드 AI 제공자를 쓰는 경우, 스마트 검색(Ctrl+I)은 입력한 문구를 그 제공자에게 보내고, AI에게 파일을 찾거나 디스크 상태를 설명해 달라고 하면 AI가 답하는 데 쓰는 결과(파일 이름, 폴더 크기 등)를 보냅니다. AI 검색 및 정리를 위한 전체 컨텍스트 스위치(기본값은 꺼짐)를 켜면 설치된 앱, 인덱싱된 폴더, 가장 많이 쓰는 폴더, 최근 검색에서 연 파일의 이름도 보내지만, 그 내용은 절대 보내지 않습니다.

앱이 실제로 하는 일은 네트워크가 필요한 기능을 위해 네트워크에 연결하는 것입니다. 아래는 그 목록과 각 통신이 일어나는 시점입니다.

연결 대상시점목적과 보내는 내용
api.github.com 자동, 실행할 때(24시간 캐시) 새 릴리스가 있는지 확인합니다. 식별자는 보내지 않지만, 여느 HTTP 요청과 마찬가지로 GitHub는 IP 주소를 볼 수 있습니다. 사용자가 무언가를 켜지 않아도 실행됩니다.
xenon-app.com 커뮤니티 카탈로그나 스토어를 열 때 커뮤니티 테마, 위젯, 팩의 공개 카탈로그를 내려받습니다. 읽기 전용이며 식별자는 없습니다.
xenon-app.com
(공지)
자동, 하루 최대 한 번 모두가 받는 것과 같은 짧은 공지 목록을 내려받습니다. 새 릴리스, 스토어의 새 항목, 가끔 전하는 소식 같은 것입니다. 읽기 전용이며 식별자는 없습니다. 일부 공지는 특정 위젯이나 버전을 쓰는 사람처럼 일부 사용자를 대상으로 하는데, 그 선별은 사용자의 PC에서 이루어집니다. 대시보드가 목록 전체를 내려받고 어떤 공지가 해당하는지 스스로 판단합니다. 무엇을 보여 줄지 정하려고 설치한 항목에 관한 정보를 보내는 일은 없으므로, 저는 특정 사용자를 겨냥할 수도 없고 누가 무엇을 봤는지 알 수도 없습니다. 공지는 어느 공지에서든 끌 수 있습니다.
서포터 허브
(설문 응답)
공지에 표시된 설문에서 답을 탭한 경우에만 선택한 항목만 보내고 그 밖에는 아무것도 보내지 않습니다. 설치 UUID도 계정도 없고, IP는 보관하지 않으며, 시각조차 보내지 않습니다. 서버는 그 항목의 카운터를 1 올리고 요청을 폐기하므로, 저를 포함해 누구도 특정 PC가 무엇이라고 답했는지 조회할 수 없습니다. 아무것도 탭하지 않으면 아무것도 전송되지 않으며, 공지를 끄면 완전히 멈춥니다.
서포터 허브
(설치 수 집계)
스토어에서 무언가를 설치할 때, 그리고 해당 스위치가 켜져 있을 때만 설치한 창작물의 ID만 보내고 그 밖에는 아무것도 보내지 않습니다. 설치 UUID도 계정도 없고, IP는 보관하지 않습니다. 서버는 그 창작물의 카운터를 1 올리고 요청을 폐기합니다. 어떤 창작물을 이미 집계했는지는 대시보드가 사용자의 PC에 기억해 두므로 창작물마다 최대 한 번만 보고하며, 그래서 중복 집계를 피하려고 식별 가능한 정보를 보낼 필요가 없습니다. 그 결과 이 숫자는 “몇 명이 가지고 있는지”가 아니라 “보고된 설치 수”를 뜻하며, 숫자가 표시되는 곳마다 그렇게 표기되어 있습니다.
서포터 허브
(Cloudflare Worker)
카탈로그 항목에 별점을 주거나, 서포터 코드를 사용하거나, 잠금 해제한 항목을 업데이트할 때 PC에는 무작위 UUID(install-id.json)가 보관되어, 한 표가 한 번만 집계되고 코드가 끝없이 재사용되지 않도록 합니다. 이 UUID는 기기 밖으로 나가지 않습니다. 전송되는 것은 UUID의 단방향 해시이며, 별점과 코드 사용에는 같은 UUID에서 만든 서로 다른 해시가 쓰입니다. 이는 의도된 것입니다. 하나의 값을 함께 쓰면 서포터 코드(Discord 계정과 연결될 수 있습니다)와 별점이 데이터베이스에서 같은 식별자로 묶이게 되고, 저는 이름을 아는 서포터가 어떤 창작물에 별점을 줬는지 볼 수 있게 됩니다. 값이 둘이면 둘을 맞춰 볼 근거가 없습니다. 어느 해시도 하드웨어나 이름과 연결되어 있지 않으며, 파일을 지우면 새 UUID가 만들어집니다. 잠금 해제한 항목을 업데이트할 때도 같은 해시와 창작물 ID, 보유한 버전만 보내며 코드는 보내지 않습니다. 허브는 이미 소유자로 알고 있는 PC에만 응답합니다.
ipwho.is 날씨 위치 자동 감지가 켜져 있을 때만 날씨 위젯이 위치를 알 수 있도록 IP를 대략적인 도시로 바꿉니다. 위치를 직접 설정하면 이 통신은 일어나지 않습니다.
날씨 및 대기질 API
open-meteo, met.no, wttr.in
대시보드에 날씨 위젯이 있을 때만 예보할 위치의 좌표를 보냅니다. 식별자는 없습니다.
itunes.apple.com 미디어가 재생되는 동안 곡 제목으로 앨범 아트를 찾습니다. 식별자는 없습니다.
직접 연결한 서비스
Spotify, Twitch, YouTube, Discord, Home Assistant, OBS, AI 제공자, 주식·뉴스·축구 피드
해당 연동을 설정한 뒤에만 각 서비스는 사용자가 입력한 자격 증명으로, 그 제공자의 개인정보 처리방침에 따라 해당 제공자와 통신합니다. 설정하기 전까지는 아무 동작도 하지 않습니다.
휴대폰의 푸시 서비스
휴대폰 브라우저에 따라 Apple, Google 또는 Mozilla
페어링한 휴대폰이나 태블릿에서 알림을 켠 뒤에만 타이머가 끝나는 것처럼, 사용자가 직접 설정해 두고 기다리는 일이 있을 때 PC가 닫혀 있는 휴대폰을 깨울 수 있게 합니다. 메시지는 그 휴대폰의 브라우저까지 종단 간 암호화되므로, 푸시 서비스는 내용을 읽지 못한 채 전달만 합니다. 다만 그 휴대폰으로 메시지가 갔다는 사실과 그 시각은 알 수 있습니다. 휴대폰에서 버튼을 누르기 전까지는 아무것도 설정되지 않으며, 페어링한 기기를 제거하면 멈춥니다.
익명 버전 핑
서포터 허브
v4.8.0 이상으로 설치한 경우 기본으로 켜짐. 그 이전 설치는 직접 켜지 않았다면 꺼짐 버전, 운영체제, 설치된 지 얼마나 되었는지, 그리고 이번 주 첫 핑인지를 나타내는 플래그를, 위 행들과 같은 서포터 허브로 하루 최대 한 번 보냅니다. 어떤 종류의 식별자도 없습니다. 전체 목록은 아래 섹션에 있습니다.

로컬 AI 기능(Ollama, Whisper)은 전부 사용자의 기기에서 실행됩니다. 클라우드 AI 제공자는 그렇지 않습니다. Gemini, OpenAI, Anthropic을 선택하면 프롬프트는 해당 제공자의 약관에 따라 그 제공자에게 전송됩니다. 음성 답변은 방식이 다릅니다. 자체 음성이 있는 Gemini와 OpenAI 외의 제공자를 쓰면, 소리 내어 읽을 텍스트가 음성으로 변환되도록 Microsoft의 온라인 Edge 음성 서비스로 전송됩니다. AI 제공자는 앱에서 사용자가 선택하며, 선택하지 않은 클라우드 모델에 프롬프트를 보내는 일은 절대 없습니다.

버전 핑

실제로 Xenon을 쓰는 사람이 몇 명인지 저는 전혀 모릅니다. 다운로드 수는 잡음에 가깝고, 짐작하기보다는 사람들이 오래된 릴리스에 머물러 있는지를 알고 싶습니다. 그래서 설정 → 일반 → 업데이트에 이 설치를 익명으로 집계라는 스위치가 있습니다. 이 스위치가 켜져 있으면 앱이 업데이트를 확인할 때 하루 최대 한 번 몇 가지 항목을 보냅니다. 전체 목록은 다음과 같습니다:

보내는 내용은 이것이 전부입니다. 여기에 없는 것은 다음과 같습니다. 설치 UUID가 없습니다(이 식별자는 별점과 서포터 코드 전용으로 남겨 두었고, 여기에 섞으면 제가 둘을 연결할 수 있게 되는데, 그것이 바로 제가 할 수 없기를 바라는 일입니다). IP도 보관하지 않고, 하드웨어 정보도, 시간대도, 어떤 위젯을 쓰는지, 무엇을 검색하는지, 무엇을 여는지에 관한 정보도 없습니다. 핑은 앱이 이미 하는 업데이트 확인 직후 서포터 허브로 보내는 작은 요청 하나입니다.

주간 및 월간 집계

사람을 식별하지 않고는 얻을 수 없던 숫자가 하나 있습니다. “이번 주에 활동한 서로 다른 설치가 몇 개인가”입니다. 보통은 ID가 있어야 서버가 한 PC에서 온 핑 두 개와 두 PC에서 온 핑 두 개를 구분할 수 있습니다. 여기서는 사용자의 PC가 그 일을 대신합니다. 마지막으로 보고한 주와 달을 디스크에 기억해 두었다가, “이번 주 처음”이라고 한 번만 알립니다. 서버는 1을 더할 뿐 그 밖에는 아무것도 모릅니다. 주간과 월간 집계는 정확하게 나오고, 사용자를 식별할 수 있는 것은 여전히 아무것도 없습니다.

집계를 저장하는 방식

서버 쪽에는 카운터만 있고, 기기에 관한 행은 없습니다. 그리고 위의 항목들은 한 행에 함께 저장되지 않고 항목마다 별도의 테이블에서 집계됩니다. 중요한 것은 이 부분입니다. 버전과 운영체제와 설치 기간과 첫 실행 월과 언어를 모두 담은 한 행은 특정한 한 사람을 쉽게 가리킬 수 있습니다. 또 이 값들은 대부분 날마다 그대로이므로, 연속된 날들의 기록을 이어 붙여 한 기기의 이력을 만들 수 있습니다. 애써 식별자를 보내지 않았는데 데이터로 식별자를 만들어 내는 셈입니다. 항목을 하나씩 따로 세면 그런 조합은 데이터베이스에 아예 존재하지 않습니다. 숨겨진 것도, 접근이 제한된 것도 아니고, 없습니다. 제가 읽을 수 있는 것은 “오늘 4.11.0을 실행한 설치 N개”, “7월에 처음 실행된 설치 N개”, “90일이 넘은 설치 N개” 같은 것뿐이며, 그 N개가 어느 것인지도, 서로 겹치는 부분도 알 수 없습니다.

두 곳에서는 한 쌍의 값을 나란히 저장합니다. 거기서는 그 쌍이 곧 알고 싶은 질문이기 때문입니다. 한 버전에서 다른 버전으로 옮겨 간 설치가 몇 개인지, 그리고 특정 달에 처음 실행된 설치 중 몇 개가 이후의 달에도 여전히 활동했는지입니다. 두 곳 모두 그 밖의 내용은 전혀 담지 않으며, 다섯 번 미만으로 나타난 조합은 저만 볼 수 있는 콘솔에서도 “기타”로 합쳐집니다.

모든 데이터는 400일 후에 삭제됩니다. 요청별 기록은 보관하지 않으므로, 넘겨주거나 법적 명령으로 제출하거나 유출될 수 있는 데이터 세트가 존재하지 않습니다.

v4.11.0의 변경 사항

스위치 자체의 상태는 누구에게도 바뀌지 않았습니다. 꺼져 있었다면 그대로 꺼져 있고, 켜져 있었다면 그대로 켜져 있습니다. 바뀐 것은 스위치가 켜져 있을 때 핑이 담는 내용이며, 그래서 이 페이지도 같은 릴리스에서 바뀌었습니다.

한 가지 한계가 있습니다. 이 릴리스 이전부터 있던 설치는 설치 기간과 첫 실행 월을 unknown으로 보고하며, 앞으로도 계속 그렇습니다. 앱이 처음 실행된 시점을 기록해 두지 않았기 때문이며, 저는 추측한 숫자보다 눈에 보이는 공백을 택하겠습니다. 이 빈틈은 따로 집계되어 별도의 항목으로 표시되므로, 전체 그림에서 얼마나 빠져 있는지 언제든 볼 수 있습니다.

v4.8.0의 변경 사항

v4.7.1까지는 이 스위치가 직접 켜기 전까지 꺼져 있었습니다. v4.8.0부터는 새로 설치하면 기본으로 켜져 있습니다. 이런 스위치를 켜는 사람은 거의 없어서 집계가 쓸모없었기 때문입니다. 설정에서 언제든 끌 수 있으며, 끄면 즉시 적용됩니다.

이미 Xenon을 설치해 두었다면 달라진 것은 없습니다. 새 기본값은 설정 파일이 아직 없을 때, 즉 새로 설치할 때만 읽힙니다. v4.8.0 이전에 설치하고 스위치를 건드리지 않았다면 계속 꺼져 있습니다. 직접 켜지 않는 한 꺼져 있다고 안내받았고, 업데이트는 그 결정을 슬그머니 다시 정할 자리가 아니기 때문입니다. 켜 두었다면 계속 켜져 있습니다. 어느 경우든 앱은 설정에 이미 저장된 값을 그대로 유지합니다.

사용자의 권리

GDPR에 따라 개인정보의 열람, 정정, 삭제를 요청할 수 있고, 처리에 반대할 수 있습니다. 이 웹사이트에서 실제로 쓸 수 있는 방법은 다음과 같습니다. 거부(또는 위의 버튼)를 눌러 Analytics를 멈추거나, Google의 차단 부가 기능을 쓰거나, 브라우저 데이터를 지우세요. 앱의 경우, 제거하면 위에 설명한 모든 통신이 멈추고, server/data/를 삭제하면 설치 UUID를 포함해 앱이 저장한 모든 것이 지워집니다.

감독 기관에 민원을 제기할 권리도 있습니다. 이탈리아에서는 Garante per la protezione dei dati personali(이탈리아 개인정보 보호 감독기관)가 그 기관입니다.

이 페이지의 변경

앱이 위 표에 없는 네트워크 통신을 새로 하게 되면, 같은 릴리스에서 표가 갱신되고 릴리스 노트에도 그 사실이 적힙니다. 이 페이지가 마지막으로 바뀐 날짜는 맨 위에 있습니다.