Zero Send 처리 방식
최종 수정 2026.10.03
도구에 입력하거나 붙여 넣은 값은 브라우저 안에서만 처리합니다. 서버로 보내지 않고, 기록하거나 저장하지 않습니다.
Zero Send란
Zero Send는 도구에 입력하거나 붙여 넣은 값을 사이트가 이 브라우저 밖으로 보내지 않는다는 ZEKILO Dev의 처리 원칙입니다. 여기서 입력값은 입력한 텍스트, 연 파일의 내용과 이름, 처리 결과를 모두 가리킵니다. 사이트는 입력값을 서버, 방문 분석 도구, 페이지 주소(URL)로 보내지 않고 저장하지도 않습니다.
이 페이지는 그 원칙이 어떻게 구현되어 있는지, 방문자가 직접 확인하려면 어떻게 하면 되는지를 설명합니다. 마지막에는 Zero Send가 다루지 못하는 범위도 적었습니다.
처리 위치
- 모든 도구는 방문자의 브라우저(내 기기)에서 JavaScript로 처리합니다. 사이트에는 입력값을 받아 처리하는 서버 프로그램이 없습니다.
- ZEKILO Dev는 Cloudflare Pages에 올린 정적 파일(HTML, CSS, JavaScript, 글꼴, 아이콘)로만 이루어져 있습니다. 애플리케이션 서버, 데이터베이스, 회원 계정, 입력값을 저장하는 공유 링크 기능이 없습니다.
- 작은 입력은 페이지 안에서 바로 처리합니다. 64KB를 넘는 입력이나 시간이 걸리는 작업은 Web Worker에서 처리합니다. Web Worker는 같은 브라우저 안에서 화면과 따로 도는 실행 공간이며, 다른 컴퓨터가 아닙니다.
- 정규식처럼 실행 시간이 길어질 수 있는 작업은 전용 Worker에서 시간 제한(1초)을 두고 실행합니다.
- 파일을 여는 기능도 파일을 브라우저 안에서 읽습니다. 사이트는 파일을 어디로도 보내지 않습니다.
네트워크 요청
사이트가 만드는 네트워크 요청은 아래 세 종류입니다.
| 요청 | 시점 | 입력값 |
|---|---|---|
| 이 사이트의 정적 파일(페이지, 스크립트, 글꼴 등) | 페이지를 열 때, 도구를 처음 쓸 때 | 들어가지 않음 |
| 방문 분석(Google Analytics 4) | 운영 사이트(dev.zekilo.com)에서 페이지를 열 때, 도구를 쓰거나 오류가 났을 때 | 들어가지 않음. 도구 이벤트로는 도구 ID, 동작 종류, 입력 크기 구간, 오류 코드만 보냅니다 |
| 광고(Google AdSense) | 광고 게재를 시작한 뒤, 광고 스크립트가 있는 페이지를 열 때 | 들어가지 않음 |
- 방문 분석으로 사이트가 보내는 이벤트는
tool_use와tool_error두 가지뿐입니다. 입력 크기는<1K·1-64K·64K-1M·>1M네 구간 중 하나로만 보내며, 정확한 길이는 보내지 않습니다. 허용 목록에 없는 값은 코드에서 걸러 냅니다. - 방문 분석 스크립트는 운영 도메인에서 페이지를 열었을 때만, 측정 ID를 설정한 뒤에만 불러옵니다. 방문 분석과 광고 스크립트는 Google이 제공하며, 불러온 뒤에는 Google의 주소로 자체 요청을 보냅니다. 전송되는 항목은 개인정보처리방침에 적었습니다.
- 서비스 소개와 정책·안내 페이지(이 페이지 포함)에는 광고 스크립트를 넣지 않습니다.
- 「복사」는 결과를 클립보드에 넣고, 「붙여넣기」는 버튼을 눌렀을 때만 클립보드를 읽어 입력란에 넣습니다. 「내려받기」는 브라우저 안에서 파일을 만들어 저장합니다. 모두 네트워크 요청이 아닙니다.
- 오류 신고 링크는 방문자의 메일 앱을 엽니다. 도구 ID, 페이지 주소, 브라우저·운영체제 정보, 오류 코드만 미리 채우며 입력값은 넣지 않습니다.
저장하는 값
입력과 결과는 저장하지 않습니다. 새로 고침하거나 탭을 닫으면 사라집니다. 브라우저 저장소에 남기는 값은 다음뿐입니다.
zd-opt:도구 ID(localStorage): 들여쓰기 같은 도구의 옵션 값. 예:zd-opt:json-formatterzd-lang(localStorage): 언어 선택 메뉴에서 고른 표시 언어zd-consent(localStorage): 쿠키 안내 배너를 확인한 날짜zd-ref(sessionStorage): 다른 사이트에서 첫 화면(/)으로 들어와 한국어·일본어 페이지로 자동으로 옮겨 갈 때의 참조 페이지 주소. 방문 분석에 한 번 전달한 뒤 지우며, 탭을 닫아도 지워집니다.
사이트가 직접 설정하는 쿠키는 없습니다. 개발자 도구의 Application(애플리케이션) 탭에서 Local Storage와 Session Storage를 열면 위 값만 있는지 확인할 수 있습니다.
라이브러리
- YAML, CSV, SQL, 텍스트 비교, 해시처럼 일부 도구는 오픈소스 라이브러리를 사용합니다. 라이브러리는 사이트와 함께 빌드해 이 사이트의 주소(
/_astro/아래)에서 제공하며, 외부 CDN에서 받지 않습니다. - 도구의 처리 코드와 라이브러리는 그 도구에 처음 입력할 때 이 사이트에서 내려받습니다. 이때 생기는 요청은 파일을 받는 요청이며 입력값은 들어가지 않습니다.
- 글꼴도 이 사이트에서 제공합니다.
- 라이브러리는 버전을 고정해 쓰며, 목록과 라이선스는 오픈소스 라이선스에 공개합니다.
콘텐츠 보안 정책(CSP)
- 사이트는 응답 헤더에 콘텐츠 보안 정책(Content-Security-Policy)을 담아 보냅니다. 이 정책의
connect-src항목은 스크립트가 데이터를 주고받을 수 있는 대상을 정하며, 이 사이트 자신('self')과 Google의 방문 분석·광고 주소만 나열합니다. script-src항목에는'unsafe-eval'을 넣지 않았습니다. 사이트는 문자열을 코드로 실행하는 방식(eval)을 쓰지 않습니다.- 현재 이 정책은 보고 전용(
Content-Security-Policy-Report-Only) 헤더로 보냅니다. 보고 전용에서는 브라우저가 정책에 어긋나는 요청을 막지 않고, 개발자 도구의 콘솔에 위반으로 표시합니다. 방문 분석·광고와 충돌이 없는지 확인한 뒤 차단하는 방식으로 바꿀 예정이며, 바꾸면 이 페이지를 고칩니다. - CSP는 보조 장치입니다. 사이트가 입력값을 보내지 않는다는 점은 아래의 자동 검사와 직접 확인으로 확인합니다.
자동 검사
- 자동 테스트가 실제 브라우저에서 도구에 표식 문자열(
ZD-SECRET-7f3a)을 입력하고, 처리·복사·내려받기를 한 뒤 브라우저가 보낸 모든 요청을 검사합니다. - 요청 주소, 요청 본문, 요청 헤더, WebSocket 전송 내용에 표식이 있으면 테스트가 실패합니다. URL 인코딩, Base64, 16진수로 바뀐 형태도 함께 찾습니다.
- localStorage, sessionStorage, 페이지 주소, 쿠키에 표식이 남아 있는지, 허용한 이름(
zd-opt:…,zd-lang,zd-consent) 이외의 localStorage 값이 생겼는지도 검사합니다. - 이 검사는 Chromium, Firefox, WebKit 세 브라우저 엔진에서 실행하며, 코드를 바꿀 때마다 다시 실행합니다.
- 이 검사는 방문 분석·광고 설정을 켠 테스트용 빌드에서 실행합니다. 다만 Google의 방문 분석·광고 스크립트 자체는 테스트에서 실행하지 않습니다(Google로 가는 요청은 가로채 빈 응답으로 바꿉니다).
- 이 사이트의 코드가 방문 분석에 넘기는 값(도구 ID, 동작 종류, 입력 크기 구간, 오류 코드)에 입력값이 들어 있지 않은지는 운영 도메인을 흉내 낸 테스트로 따로 확인합니다.
직접 확인하는 방법
브라우저의 개발자 도구로 누구나 확인할 수 있습니다. 실제 비밀 값 대신 my-test-12345처럼 눈에 띄는 시험용 문자열을 쓰세요.
- 도구 페이지를 열고 개발자 도구를 엽니다(F12 또는 Ctrl+Shift+I, macOS는 Cmd+Option+I).
- Network(네트워크) 탭을 열고 기록을 지웁니다.
- 도구에 시험용 문자열을 붙여 넣고 결과가 나오는지 봅니다.
- 새로 생긴 요청을 확인합니다. 도구를 처음 쓸 때는
/_astro/로 시작하는 스크립트 파일 요청이 생길 수 있습니다. 파일을 받는 GET 요청이며, 주소에 시험용 문자열이 없습니다. - 운영 사이트에서는
google-analytics.com으로 가는 요청이 생길 수 있습니다. 요청을 눌러 주소와 Payload(페이로드)를 보면 이벤트 이름, 도구 ID, 동작 종류, 입력 크기 구간과 Google Analytics가 붙이는 방문 정보(페이지 주소, 식별자 등)가 있고, 시험용 문자열은 없습니다. - 요청 목록에서 메서드가 POST인 요청이 있으면 Payload를 열어 시험용 문자열이 없는지 확인합니다.
- 도구에 한 번 입력해 결과를 본 뒤 Network 탭에서 Offline(오프라인)을 켜거나 네트워크 연결을 끊고 입력을 바꿔 봅니다. 연결이 없어도 결과가 계속 바뀌면 처리가 브라우저 안에서 이루어진다는 뜻입니다.
Zero Send의 한계
Zero Send는 이 사이트의 코드가 입력값을 보내거나 저장하지 않는다는 뜻입니다. 다음은 사이트가 막을 수 없습니다.
- 브라우저 확장 프로그램: 페이지 내용을 읽을 권한이 있는 확장 프로그램은 입력값도 읽을 수 있습니다. 걱정되면 확장 프로그램을 끈 창(시크릿 창 등)에서 쓰세요.
- 기기의 상태: 악성 프로그램에 감염된 기기, 키 입력이나 화면을 기록하는 프로그램, 조직이 설치한 감시·보안 프로그램은 브라우저 안의 내용을 볼 수 있습니다.
- 화면 공유와 녹화: 화면 공유, 원격 지원, 화면 녹화 중에는 화면에 보이는 입력값이 그대로 전달됩니다.
- 클립보드: 복사한 결과는 운영체제의 클립보드에 들어갑니다. 클립보드 기록이나 기기 간 동기화 기능을 켜 두었다면 거기에 남을 수 있습니다.
- 내려받은 파일: 내려받은 결과 파일은 이용자의 기기에 남으며, 이후 관리는 이용자의 몫입니다.
- 제3자 스크립트: 운영 사이트에서는 Google의 방문 분석·광고 스크립트가 같은 페이지에서 실행됩니다. 사이트는 이 스크립트에 입력값을 넘기지 않지만, 스크립트의 코드는 Google이 관리합니다. 광고·추적 차단 기능으로 이 스크립트를 막아도 도구는 그대로 동작합니다.
- 방문 기록: 사이트를 여는 요청 자체(IP 주소, 페이지 주소, 브라우저 정보)는 호스팅 사업자와 방문 분석에 전달됩니다. 입력값과는 관계없지만, 아무 정보도 전송되지 않는다는 뜻은 아닙니다.
- 앞으로의 변경: 이 설명은 위에 표시한 최종 수정일 기준입니다. 사이트의 코드는 바뀔 수 있으므로, 중요한 값을 다루기 전에는 위 방법으로 직접 확인해 보세요.
운영 환경의 키나 비밀번호처럼 유출되면 피해가 큰 값은, 어떤 온라인 도구를 쓰든 소속 조직의 보안 규정을 먼저 확인하는 것이 좋습니다.
문의
이 페이지의 설명과 실제 동작이 다르다고 보이면 알려 주세요: manager@zekilo.com