무거운 변환은 Web Worker에서
해싱, 정규식 평가, 차이 비교, 인코딩, 스트리밍은 전용 Web Worker 안에서 실행되며, 이 Worker들은 scripts/build-tool-workers.mjs가 TypeScript에서 컴파일합니다. Worker는 이 사이트의 동일 출처 스크립트이므로 수 MB 입력이 돌아가도 탭은 반응성을 유지합니다.
04 / DATA BOUNDARY
사용 가능한 103개의 Toolars 도구에는 입력 처리 위치를 명시하는 타입이 지정된 런타임 매니페스트가 있습니다. 이 페이지에는 매니페스트, 외부 연결, 제공되는 보안 헤더와 내부 검사 방법을 설명합니다.
숫자는 빌드 시점에 런타임 레지스트리에서 파생됩니다 — 손으로 적은 숫자는 없습니다.
이 수치는 사이트를 빌드할 때 카탈로그와 런타임 프라이버시 계약으로부터 계산됩니다. 둘이 어긋나면 해당 도구는 조용히 숨겨지지 않고 여기에 나열니다.
매니페스트에 processingLocation browser, inputLeavesDevice false, retention none이 명시된 경우에만 도구는 로컬로 계산됩니다 — 라벨은 카피가 아니라 계약에서 생성됩니다.
의도적으로 짧게 유지한 목록입니다. 도구 워크스페이스는 제3자 스크립트를 전혀 로드하지 않으며, 무거운 런타임은 동일 출처의 Web Worker, WASM, 정적 자산으로 제공됩니다. 아래는 사이트 셸 자체가 닿을 수 있는 전부입니다.
| 서비스 / 호스트 | 유형 | 용도 | 데이터 경계 |
|---|---|---|---|
track.toolars.com | 분석 | PostHog의 관리형 퍼스트파티 역방향 프록시를 통해 프로덕션 분석 이벤트를 받습니다(Cloudflare를 통해 제공). | 쿠키 없는 허용 목록 이벤트만: 정제된 페이지뷰, 16개의 지정된 제품 이벤트, Web Vitals, 예외. 도구 입력, 출력, 파일 이름, 검색어는 절대 포함되지 않습니다. SDK는 프로덕션 출처에서만 지연 로드됩니다. |
us.posthog.com | 분석 | 관리형 PostHog 애플리케이션을 식별해 UI 링크와 설정에 사용합니다. | 이벤트는 이 호스트로 흐르지 않습니다. 수집은 위의 프록시 행 호스트로 향합니다. |
project ref .supabase.co (NEXT_PUBLIC_SUPABASE_URL) | 계정 백엔드 | 인증, 즐겨찾기 동기화, 뉴스레터 구독, 피드백 저장. | 로그인, 구독, 양식 제출처럼 명시적인 사용자 작업에서만 연결됩니다. 워크스페이스는 이를 호출하지 않으며, 브라우저 번들에는 공개 키만 존재합니다. |
avatars.githubusercontent.com | 프로필 이미지 | GitHub으로 로그인한 계정의 프로필 사진. | 엄격한 이미지 옵티마이저 허용 목록을 통해 로드되며, 로그인된 헤더 메뉴에만 표시됩니다. |
lh3.googleusercontent.com | 프로필 이미지 | Google로 로그인한 계정의 프로필 사진. | 같은 엄격한 이미지 허용 목록입니다. 로그인하기 전에는 아무것도 로드되지 않습니다. |
buymeacoffee.com | 외부 링크 | 푸터의 선택적 크리에이터 지원 링크. | 임베드도 스크립트도 없는 일반 외부 링크로, 도구 사용에 대한 데이터를 받지 않습니다. |
chromewebstore.google.com | 외부 링크 | 확장 프로그램 설치 및 스토어 목록 링크. | 외부 이동만 하며 새 탭에서 열립니다. 스토어에는 일반 방문만 보이고 워크스페이스 내용은 절대 보이지 않습니다. |
fonts.googleapis.com / fonts.gstatic.com | 빌드 시점 가져오기 | next/font를 통한 Barlow 폰트 파일의 빌드 시점 다운로드. | 런타임 폰트는 사이트 자체의 정적 경로에서 제공됩니다. Toolars를 사용하는 동안 브라우저는 Google Fonts에 요청을 본내지 않습니다. |
vercel.app (hosting platform) | 인프라 | Toolars의 모든 응답을 제공하는 호스팅 플랫폼. | 어떤 호스트든 보는 표준 요청 메타데이터(IP, 헤더)만 봅니다. 도구 입력과 출력은 통과하지 않습니다. |
cloudflare.com (DNS + proxy layer) | 인프라 | toolars.com의 DNS와 분석 호스트 뒤의 프록시 계층. | 호스팅 계층과 동일한 요청 메타데이터를 처리합니다. 워크스페이스 내용은 흐르지 않습니다. |
이 목록은 2026-09-19에 배포된 소스로부터 감사했습니다: 외부 출처 전체 트리 검색, next.config.ts의 이미지 허용 목록, ADR 007의 분석 계약.
이것은 모든 Toolars 페이지의 응답 헤더로, 설정을 생성하는 것과 동일한 타입 선언에서 읽습니다 — 이 표는 배포 내용과 어긋날 수 없습니다.
| 헤더 | 값 | 의미 |
|---|---|---|
Strict-Transport-Security | max-age=63072000; includeSubDomains | 브라우저는 앞으로 2년간 toolars.com에 HTTPS로만 접속하며, 하위 도메인을 포함합니다. |
X-Content-Type-Options | nosniff | 브라우저가 콘텐츠 유형 추측을 거부해 흔한 은폐 다운로드 수법을 차단합니다. |
Referrer-Policy | strict-origin-when-cross-origin | 전체 리퍼러는 동일 출처에만 전송되고, 교차 출처 요청은 기본 호스트명 이상을 노출하지 않습니다. |
Toolars는 아직 사이트 전체의 Content-Security-Policy 헤더를 본내지 않으며, 이 페이지도 그렇다고 가장하지 않습니다. 잘못된 출처를 차단하는 CSP는 계정 동기화나 승인된 분석 프록시를 망가뜨리므로, 해당 제어는 ADR 010에 따라 실제 라우트와 브라우저 동작에 대해 먼저 설계되고 있습니다. 위의 헤더는 오늘 배포되며, 여기에 적힌 모든 네트워크 경계는 코드로 강제되고 테스트로 뒷받침됩니다. docs/adr/010-local-processing-evidence.md
브라우저 이상의 도구는 필요 없습니다. 무해한 합성 파일이나 샘플 텍스트를 사용하세요 — 실제 민감한 데이터는 절대 사용하지 말고, 그것을 담은 스크린샷이나 HAR도 공개하지 마세요.
같은 절차를 대신 실행해 두었습니다. 아래 카드는 scripts/capture-privacy-proof.mjs가 실제 헤드리스 브라우저로 프로덕션 빌드를 대상으로 생성합니다. 측정된 요청 수는 타입이 지정된 데이터로 커밋되며, 업로드·교차 출처 요청·카나리 유출 중 하나라도 발생하면 스크립트가 실패합니다.
카나리 마커를 숨긴 테스트 파일로 PNG → JPEG 변환과 다운로드를 완료했습니다. 측정 구간: 요청 0건, 업로드 0건, 카나리 유출 0건.
HEIC → JPEG 변환과 다운로드 한 번: 약 3.3 MB의 지연 로딩 libheif 디코더는 처음 사용할 때 이 사이트 자체의 경로에서만 로드되며, 측정된 반복 변환은 0개의 요청, 0회의 업로드, 0건의 치명적(캐너리) 누수를 기록하고 캐너리 이름의 사진은 기기를 떠나지 않습니다.
/generated/runtime/7879e1c92e1bdb08/libheif.js/generated/runtime/e4aa8333fbe55ec7/libheif.wasm/generated/runtime/6c728441042ea88c/heic-decode-worker.js처음 사용할 때 엔진, 워커, 선택한 언어 팩(13개, 각 0.4~2 MB)은 이 사이트 자체 경로(/generated/runtime/775a35df6f2ae100/tesseract-core-lstm.wasm.js · /generated/runtime/89456b34c2769c9a/chi_sim.traineddata.gz · /generated/runtime/d8438d6a4fba7bc3/eng.traineddata.gz · /generated/runtime/e4d26dedc913c87f/worker.min.js)에서만 로드됩니다. 영어와 간체 중국어의 반복 인식은 각각 3개 요청, 0번 업로드입니다.
GET /generated/runtime/e4d26dedc913c87f/worker.min.jsGET /generated/runtime/775a35df6f2ae100/tesseract-core-lstm.wasm.jsGET /generated/runtime/d8438d6a4fba7bc3/eng.traineddata.gz내장 샘플 불러오기, 회전, 결과 다운로드: 측정 구간 요청 0건, 업로드 0건, 카나리 유출 0건.
로그인은 즐겨찾기(도구 이름만)와 계정 상태를 행 수준 보안이 적용된 Supabase로 동기화합니다. 도구 워크스페이스는 계정 백엔드를 호출하지 않습니다: 처리에 계정이 필요 없고 아무것도 전송하지 않습니다.
위 목록은 배포된 소스의 전체 트리 검색으로 생성됩니다. 이 호스트들은 도구 워크스페이스에서 도달할 수 없으며, 그곳에서는 스크립트 로드 0, 도구 데이터 수신 0입니다.
track.toolars.com분석us.posthog.com분석project ref .supabase.co (NEXT_PUBLIC_SUPABASE_URL)계정 백엔드avatars.githubusercontent.com프로필 이미지lh3.googleusercontent.com프로필 이미지buymeacoffee.com외부 링크chromewebstore.google.com외부 링크fonts.googleapis.com / fonts.gstatic.com빌드 시점 가져오기vercel.app (hosting platform)인프라cloudflare.com (DNS + proxy layer)인프라더 강하게 확인하려면 예열 후 네트워크를 끄고 반복하세요. 텍스트와 이미지 도구는 계속 동작합니다. PDF 도구는 예열 때 본 동일 출처 Worker 자산이 필요하므로, PDF의 오프라인 사용을 주장하지 않는 이유입니다.
로컬 우선은 여기에서 구호가 아니라 아키텍처입니다. 세 가지 메커니즘이 데이터를 탭 안에 둡니다.
해싱, 정규식 평가, 차이 비교, 인코딩, 스트리밍은 전용 Web Worker 안에서 실행되며, 이 Worker들은 scripts/build-tool-workers.mjs가 TypeScript에서 컴파일합니다. Worker는 이 사이트의 동일 출처 스크립트이므로 수 MB 입력이 돌아가도 탭은 반응성을 유지합니다.
OCR 엔진(약 4 MB)과 각 0.4~2 MB 언어 팩, PDF 런타임은 도구를 연 후에만 이 사이트 자체의 정적 경로에서 로드됩니다. 인식과 파싱은 로컬에서 실행되며 처리를 위해 어떤 것도 업로드되지 않습니다.
도구의 실행 번들은 해당 도구를 열 때만 다운로드됩니다 — 카탈로그나 홈 페이지에서는 결코 로드되지 않습니다. 카탈로그 둘러보기는 메타데이터만 전송하며, 같은 Network 패널에서 쉽게 확인할 수 있습니다.
아래 검사 중 하나는 공개되어 있습니다. 개인정보 증명 캡처 하네스는 MIT 라이선스로 https://github.com/aixtral/toolars-open에 공개되어 있으므로, 라이브 사이트를 대상으로 직접 다시 실행할 수 있습니다. 나머지 명령은 고정된 Node와 pnpm 버전을 사용해 비공개 저장소에서 실행되며, 그 방법은 여기에 요약되어 있습니다.
기계가 읽을 수 있는 검증 영수증 — 실행하는 명령, 측정값, 그리고 이것이 증명하지 못하는 것: 검증 영수증(JSON).
| 스크립트 | 명령 | 검증 내용 |
|---|---|---|
로컬 처리 증명 하네스scripts/verify-local-processing.mjs | corepack pnpm verify:local-processing | 사이트를 다시 빌드하고, 새 브라우저 컨텍스트에서 네트워크를 차단하고, 합성 카나리로 대표 워크플로를 다시 실행하고, 소스와 빌드 지문을 비교해 영수증을 만듭니다. 재시도, 걸림, 드리프트 중 무엇이든 실행을 실패시킵니다. |
오픈 코어 종속성 감사scripts/audit-local-core.mjs | corepack pnpm audit:local-core | 공개 표면 후보의 실행 종속 그래프를 그리고, 소스 SHA-256 해시, 설치된 종속 버전, 라이선스 텍스트를 기록합니다. |
Worker 빌드scripts/build-tool-workers.mjs | corepack pnpm worker:build | 모든 브라우저 Web Worker를 TypeScript 소스에서 public/generated 아래 콘텐츠 해시가 붙은 파일로 컴파일해, 제공되는 Worker가 검토된 소스와 정확히 같도록 보장합니다. |
벤치마크 하네스scripts/benchmark-tools.mjs | node scripts/benchmark-tools.mjs | 도구별로 허용되는 최대 입력, 실행 시간 중앙값, 무결해 네트워크 격리를 측정한 뒤 벤치마크 페이지 뒤의 타입 데이터를 기록합니다. |
개인정보 증명 캡처 하네스scripts/capture-privacy-proof.mjs | node scripts/capture-privacy-proof.mjs | 헤드리스 Chromium에서 이미지 변환, OCR 엔진, PDF 회전을 실행하며 모든 요청(전용 Web Worker 요청 포함)을 기록한 뒤 이 페이지가 렌더링하는 증명 JSON을 작성합니다. 업로드, 교차 출처 요청, 카나리 유출 중 하나라도 있으면 실패합니다. |
벤치마크 페이지는 실제 헤드리스 브라우저에서 하네스가 만든 데이터를 표시하며, 입력이 기기에 남음을 증명하는 카나리 실행을 포함합니다.
로컬 우선이 곧 네트워크 제로는 아닙니다. 다음 기능은 작동에 네트워크가 필요해 데이터를 본내고, 각각 무엇이 기기를 떠나는지 정확히 밝힙니다.
로그인하면 Supabase Auth와 행 수준 보안이 있는 Postgres를 통해 즐겨찾기와 계정 상태가 동기화됩니다. 도구 입력과 출력은 그 동기화에 포함되지 않습니다 — 모든 워크스페이스는 로그아웃 상태에서도 작동합니다.
푸터 양식은 입력한 이메일 주소만 Supabase RPC로 본냅니다. 구독에 관한 분석 이벤트는 ADR 007 허용 목록대로 그 주소를 전혀 담지 않습니다.
이 양식들은 작성한 텍스트와 양식 메타데이터를 인증된 서버 액션으로 제출하며, 제출 전에 정확한 페이로드를 안내합니다. 워크스페이스 내용은 첨부되지 않습니다.
처음 사용할 때 OCR 도구는 이 사이트 자체의 /ocr 경로에서 약 4 MB의 엔진 파일과 선택한 언어별 언어 팩(0.4~2 MB)을 다운로드합니다. 다운로드는 모두 동일 출처이며, 이미지와 인식된 텍스트는 탭에 남고 다운로드된 팩은 브라우저의 오프라인 캐시에만 저장됩니다.
PDF 가져오기와 낯내기는 PDF.js Worker를 다시 시작해 예열 단계에서 본 동일 출처 정적 자산을 다시 가져옵니다. 그래서 PDF 도구의 완전한 오프라인 사용은 주장하지 않습니다.
확장 프로그램 설치 링크는 Chrome Web Store로, 선택적 지원 버튼은 Buy Me a Coffee로 향합니다. 둘 다 일반 외부 링크이며 Toolars 페이지에 제3자 스크립트를 임베드하지 않습니다.
제3자 보안 감사도, 컴플라이언스 인증도 없습니다. 별도로 공개된 개인정보 증명 캡처 하네스와 두 개의 로컬 Node 패키지는 MIT 라이선스입니다. 웹사이트 자체의 소스 코드는 공개되지 않았으며 이에 대한 라이선스도 부여하지 않습니다. 이 페이지는 오늘 검증 가능한 것만 보여 줍니다.
제3자 고지 — 이 사이트가 재배포하는 구성 요소와 해당 라이선스 전문: 고지 및 라이선스 전문.
모든 사용 가능한 도구에 대해 그렇습니다. 각 도구에는 브라우저 내 처리, 입력의 기기 비이탈, 보관 없음을 선언하는 타입이 지정된 런타임 매니페스트가 있습니다. 이 페이지의 라벨은 그 매니페스트에서 생성됩니다. 향후 클라우드나 하이브리드 도구는 출시 전에 경계를 공개해야 합니다.
잘 설계되지 않은 CSP는 계정 동기화나 승인된 분석 프록시를 망가뜨리므로, 해당 제어는 ADR 010에 따라 실제 라우트에 대해 먼저 만들어지고 있습니다. 그 전까지 이 페이지는 실제로 제공되는 헤더와 가능한 외부 연결을 정직하게 공개하며, 네트워크 경계는 코드로 강제되고 테스트로 뒷받침됩니다.
아니요. PostHog는 쿠키 없이 실행되며 자동 캡처, 세션 녹화, 영속화, 사용자 프로필이 모두 비활성화되어 있습니다. 허용 목록에는 정제된 페이지뷰, 16개의 지정된 제품 이벤트, Web Vitals, 예외만 들어가며 입력, 출력, 파일 이름, 검색어는 절대 포함되지 않고, 이벤트는 퍼스트파티 프록시 호스트를 통해서만 전송됩니다.
런타임 레지스트리와 카탈로그에서 빌드 시점에 파생되며, 벤치마크 페이지는 그 뒤의 측정 실행을 보여 줍니다. 카탈로그 라벨과 런타임 매니페스트가 어긋나면, 그 어긋남은 평균화되지 않고 이 페이지에 인쇄됩니다.
벤치마크 페이지는 실제 헤드리스 브라우저에서 하네스가 만든 데이터를 표시하며, 입력이 기기에 남음을 증명하는 카나리 실행을 포함합니다.