LeedyBox 작동 방식
LeedyBox가 브라우저에서 이미지, PDF 파일, 데이터, 텍스트를 처리하는 방식과 도구가 사용하는 라이브러리 및 브라우저 기능, 그리고 페이지에서 여전히 네트워크를 사용하는 부분을 설명합니다.
브라우저 기반 파일 처리
LeedyBox 도구는 웹 브라우저에서 JavaScript로 실행됩니다. 파일을 선택하거나 텍스트를 입력하면 브라우저가 기기에서 이를 읽고, 처리는 사용자의 컴퓨터나 휴대폰에서 실행됩니다. 처리를 위해 파일과 텍스트를 LeedyBox 서버로 업로드하지 않습니다. 많은 도구가 표준 브라우저 기능을 사용합니다. 이미지에는 Canvas API, 해시·비밀번호·UUID에는 Web Crypto API, 단어 수 세기에는 Intl.Segmenter, 시간대 처리에는 Intl 날짜 API를 씁니다. PDF 텍스트 추출과 이미지 텍스트 추출의 OCR은 브라우저 안에서 WebAssembly 코드를 실행하는 Tesseract.js를 사용합니다.
파일은 어떻게 처리되나요?
- 기기에서 파일을 선택하거나 끌어다 놓거나, 도구에 텍스트를 입력하거나 붙여넣습니다.
- 브라우저가 현재 페이지의 메모리로 파일을 읽어 들입니다.
- 도구가 기기에서 실행되는 JavaScript 라이브러리로 파일을 변환, 편집, 병합, 분할하거나 읽습니다.
- 결과는 브라우저에서 만들어져 페이지에 표시되거나 다운로드로 제공됩니다. 걸리는 시간은 입력 내용과 기기에 따라 다릅니다.
- 복사 버튼은 사용자가 누를 때만 결과를 클립보드에 씁니다.
- 페이지를 닫거나 새로 고치면 해당 페이지 메모리에 있던 파일, 텍스트, 생성된 값은 사라집니다.
도구별 사용 라이브러리
일부 도구는 오픈소스 라이브러리를 기반으로 하며, 다른 도구는 LeedyBox 자체 스크립트와 브라우저에 내장된 기능만 사용합니다. 모든 라이브러리와 그 라이브러리에 필요한 데이터(글꼴 표, OCR 언어 데이터, 모델)는 버전을 고정해 leedybox.com에서 직접 제공하며, 도구 페이지는 공개 콘텐츠 전송 네트워크(CDN)에서 코드를 불러오지 않습니다. 요청하는 것은 라이브러리 코드와 데이터뿐이며, 처리하는 파일과 텍스트는 이 요청에 포함되지 않습니다.
| 도구 | 라이브러리 | 불러오는 곳 |
|---|---|---|
| 이미지 변환 | 브라우저 Canvas API, LeedyBox BMP/ICO 인코더, JSZip(일괄 다운로드용) | leedybox.com |
| 이미지 크기 조절, 이미지 회전·뒤집기 | 브라우저 Canvas API, JSZip(일괄 다운로드용) | leedybox.com |
| 이미지 자르기 | 브라우저 Canvas API(서드파티 라이브러리 없음) | leedybox.com |
| 이미지 압축 | 브라우저 Canvas API, UPNG.js 2.1.0 및 pako 1.0.11(MIT 라이선스, PNG 색상 수 줄이기), JSZip(일괄 다운로드용) | leedybox.com |
| EXIF 메타데이터 제거 | LeedyBox 메타데이터 읽기·제거 스크립트(이미지 데이터는 다시 인코딩하지 않고 복사), JSZip(일괄 다운로드용) | leedybox.com |
| 이미지 텍스트 추출(OCR) | Tesseract.js(OCR 엔진과 언어 데이터) | leedybox.com |
| 파비콘 생성기 | 브라우저 Canvas API, LeedyBox ICO 인코더, JSZip(ZIP 패키지용) | leedybox.com |
| 증명사진 만들기 | MediaPipe Tasks Vision 0.10.35(Apache License 2.0)와 Face Landmarker, Selfie Segmenter 모델, 브라우저 Canvas API | leedybox.com(자체 호스팅) |
| QR 코드·바코드 생성기 | qrcode-generator 1.4.4, JsBarcode 3.11.6(MIT 라이선스) | leedybox.com(자체 호스팅) |
| PDF를 JPG로 | PDF.js, JSZip | leedybox.com |
| JPG를 PDF로 | jsPDF, SortableJS | leedybox.com |
| PDF 텍스트 추출 | PDF.js, Tesseract.js(OCR 엔진과 언어 데이터) | leedybox.com |
| PDF 병합, PDF 분할, PDF 압축 | PDF.js, pdf-lib, JSZip(PDF 분할) | leedybox.com |
| PDF 페이지 정리, PDF 회전 | PDF.js(페이지 썸네일), pdf-lib, SortableJS(PDF 페이지 정리) | leedybox.com |
| PDF 워터마크 추가, PDF 페이지 번호 추가 | PDF.js(미리보기), pdf-lib. 표준 PDF 글꼴로 표시할 수 없는 문자로 된 텍스트는 기기의 글꼴로 그려 이미지로 추가 | leedybox.com |
| 데이터 변환 | js-yaml, PapaParse, LeedyBox 데이터 도구 스크립트 | leedybox.com |
| Base64 / URL / JWT, Cron 해석기, 정규식 테스트 | LeedyBox 데이터 도구 스크립트와 브라우저 내장 기능(서드파티 라이브러리 없음) | leedybox.com |
| 해시 생성기 | MD5는 페이지 자체 스크립트로, SHA-1, SHA-256, SHA-384, SHA-512, HMAC은 브라우저의 Web Crypto API로 계산 | leedybox.com |
| 비밀번호·UUID 생성기 | Web Crypto API(crypto.getRandomValues, crypto.randomUUID) |
leedybox.com |
| 유닉스 타임스탬프 변환기 | 브라우저 Intl 날짜·시간대 API와 BigInt(서드파티 라이브러리 없음) |
leedybox.com |
| DNI·NIE·NIF 검증기, TC Kimlik 번호 검증기, INN·SNILS 검증기, 브라질 CPF·CNPJ 검증기, IBAN 검증기, 이탈리아 코디체 피스칼레 계산기 | LeedyBox 번호 검증 모듈(서드파티 라이브러리 없음), 테스트 번호는 브라우저의 crypto.getRandomValues; IBAN 나라별 형식은 SWIFT IBAN 등록부에서 가져와 LeedyBox가 제공하는 데이터 파일; 코디체 피스칼레 지역 코드는 이탈리아 내무부 ANPR 표로 만든 데이터 파일이며, 그 도구에서 필요할 때만 불러옴 |
leedybox.com |
| 단어·글자 수 세기 | 브라우저 Intl.Segmenter |
leedybox.com |
| 케이스 변환, 텍스트 비교, Lorem Ipsum 생성기 | LeedyBox 데이터 도구 스크립트(서드파티 라이브러리 없음) | leedybox.com |
| 금액 한글 변환 | LeedyBox 금액 변환 모듈(서드파티 라이브러리 없음), 브라우저 Intl.NumberFormat·Intl.DisplayNames |
leedybox.com |
| 전각·반각 변환 | LeedyBox 텍스트 모듈(서드파티 라이브러리 없음), 브라우저 String.prototype.normalize() |
leedybox.com |
| 베트남어 성조 제거 | LeedyBox 텍스트 모듈(서드파티 라이브러리 없음), 브라우저 String.prototype.normalize() |
leedybox.com |
| 슬러그 생성기 | LeedyBox 텍스트 모듈(서드파티 라이브러리 없음), 브라우저 String.prototype.normalize() |
leedybox.com |
| 한글 이름 영문 변환 | LeedyBox 텍스트 모듈(서드파티 라이브러리 없음) | leedybox.com |
| 러시아어 키릴 문자 로마자 변환 | LeedyBox 텍스트 모듈(서드파티 라이브러리 없음) | leedybox.com |
| 중국어 간체 ↔ 번체 | opencc-js 1.4.2(MIT 라이선스)와 OpenCC 사전(Apache License 2.0) | leedybox.com |
| 음성 텍스트 변환 | Transformers.js 4.3.1(Apache License 2.0), ONNX Runtime Web(MIT 라이선스), Whisper base·small·large-v3-turbo 모델(MIT 라이선스) | leedybox.com |
| 일본 연호 변환기 | LeedyBox 날짜 모듈(서드파티 라이브러리 없음). 날짜 표시는 브라우저의 Intl 날짜 형식 기능 | leedybox.com |
| 태국 불기 변환기 | LeedyBox 날짜 모듈(서드파티 라이브러리 없음). 날짜 표시는 브라우저의 Intl 날짜 형식 기능 | leedybox.com |
| 음력 양력 변환기 | LeedyBox 날짜 모듈과 한국천문연구원·홍콩천문대 자료로 만든 음력 표(서드파티 라이브러리 없음). 날짜 표시는 브라우저의 Intl 날짜 형식 기능 | leedybox.com |
| 만 나이 계산기 | LeedyBox 날짜 모듈과 한국천문연구원 자료로 만든 음력 표(서드파티 라이브러리 없음). 날짜·단위 표시는 브라우저의 Intl 형식 기능 | leedybox.com |
| 부가세 계산기 | LeedyBox 부가세 모듈(서드파티 라이브러리 없음). 정확한 계산은 브라우저의 BigInt, 금액·통화 표시는 Intl.NumberFormat. 세율표(vat-rates.json, 약 35 KB)는 페이지를 열 때 내려받음 | leedybox.com |
| 퍼센트 계산기 | LeedyBox 계산 모듈(외부 라이브러리 없음). 숫자·통화·날짜는 브라우저의 Intl 서식으로 표시 | leedybox.com |
| 대출이자 계산기 | LeedyBox 계산 모듈(외부 라이브러리 없음). 숫자·통화·날짜는 브라우저의 Intl 서식으로 표시 | leedybox.com |
| 복리 계산기 | LeedyBox 계산 모듈(외부 라이브러리 없음). 숫자·통화·날짜는 브라우저의 Intl 서식으로 표시 | leedybox.com |
| BMI 계산기 | LeedyBox 계산 모듈(외부 라이브러리 없음). 기준표(bmi-standards.json, 약 7KB)를 페이지를 열 때 내려받음 | leedybox.com |
| 기초대사량 계산기 | LeedyBox 계산 모듈(외부 라이브러리 없음). 공식(energy-equations.json, 약 8KB)을 페이지를 열 때 내려받음 | leedybox.com |
| 나이 계산기 | LeedyBox 계산 모듈(외부 라이브러리 없음). 숫자·통화·날짜는 브라우저의 Intl 서식으로 표시 | leedybox.com |
도구 페이지는 스타일을 위해 Tailwind CSS 스크립트(3.4.17 버전)도 leedybox.com에서 불러옵니다. 라이브러리의 라이선스 전문은 LICENSES.txt에 있습니다.
로컬 처리가 중요한 이유
기기에서 처리하면 파일이 변환 서버로 이동해 대기열에서 기다릴 필요가 없고, LeedyBox는 파일의 사본을 받지 않습니다. 대신 결과는 사용자의 기기에 따라 달라집니다. 메모리가 넉넉한 컴퓨터는 오래된 휴대폰보다 큰 파일을 처리할 수 있습니다.
브라우저의 한계
처리는 기기의 자원에 의존하므로 성능은 사용 가능한 메모리, 브라우저 기능, CPU 속도, 파일의 복잡도에 따라 달라집니다. 매우 크거나 복잡한 파일은 더 많은 메모리와 시간이 필요합니다. 탭의 메모리가 부족하면 브라우저가 페이지를 멈출 수 있으며, 작업을 더 작은 파일로 나누면 대개 도움이 됩니다. 일부 출력 형식은 브라우저가 인코딩할 수 있는지에 따라서도 달라집니다.
개인정보와 네트워크 요청
로컬 처리 덕분에 파일은 기기에 남지만, 웹 페이지 자체는 여전히 네트워크를 사용합니다. 페이지는 자체 HTML, 스타일, 스크립트와 위에 나열한 라이브러리를 모두 leedybox.com에서 불러오고, Google Analytics와 Google AdSense를 불러옵니다. 이 두 서비스는 쿠키에 동의한 경우에만 쿠키를 저장합니다. 사이트를 호스팅하는 Cloudflare도 페이지가 얼마나 빨리 열리는지 측정합니다(Cloudflare Web Analytics, 쿠키 없음). 이 요청 중 어떤 것에도 처리하는 파일이나 텍스트의 내용, 생성한 비밀번호, UUID, 해시, 코드는 포함되지 않습니다.
PDF 텍스트 추출과 이미지 텍스트 추출은 OCR 엔진과 언어 데이터가 처음 필요할 때 leedybox.com에서 내려받습니다. Tesseract.js는 내려받은 언어 데이터를 다시 내려받지 않아도 되도록 브라우저의 IndexedDB 저장소에 보관하며, 이 데이터는 브라우저에서 이 사이트의 데이터를 지워 삭제할 수 있습니다.
증명사진 만들기는 처음 사진을 고를 때 MediaPipe 라이브러리와 WebAssembly 런타임, 얼굴 모델을 leedybox.com에서 내려받습니다. 내려받는 양은 약 7MB(압축을 풀면 약 15MB)이고, 배경을 바꿀 때만 작은 모델 하나(0.25MB)를 더 받습니다. 이 파일들은 브라우저의 일반 캐시에만 남고, 사진은 어디에도 보내지 않습니다.
중국어 간체 ↔ 번체 변환기는 쓰기 시작할 때 opencc-js와 고른 변환의 사전을 leedybox.com에서 내려받습니다. 번체→간체는 최대 약 100KB, 간체→번체는 약 1.1MB입니다. 입력한 글은 어디에도 보내지 않습니다.
음성 텍스트 변환은 처음 받아쓰기를 시작할 때 Transformers.js, ONNX Runtime WebAssembly 엔진, 고른 Whisper 모델을 leedybox.com에서 내려받습니다. base는 약 90MB, small은 약 250MB, WebGPU로 그래픽 처리 장치에서 돌아가는 large-v3-turbo는 약 750MB입니다. 받은 파일은 다시 받지 않도록 브라우저의 Cache Storage에 저장되며, 도구에서 크기를 확인하고 지울 수 있습니다. 모델을 실행하는 부분은 다른 사이트에 접속할 수 없도록 막혀 있으며, 녹음은 어디로도 전송되지 않습니다.
관련 문서: 개인정보 처리방침 읽기 · 쿠키 정책 읽기
자주 묻는 질문
로컬 처리라면 어떤 데이터도 전송되지 않나요?
처리를 위해 파일과 텍스트를 LeedyBox로 업로드하지는 않습니다. 다만 페이지는 일반적인 웹 요청을 보냅니다. 자체 파일과 필요한 라이브러리를 leedybox.com에서 내려받고, Google Analytics와 AdSense 요청을 보내며(쿠키 저장 여부는 동의 선택에 따라 정해집니다), Cloudflare가 페이지 로딩 시간을 측정합니다. 이 요청에는 파일이나 텍스트의 내용이 포함되지 않습니다.
같은 PDF인데 기기마다 다르게 동작하는 이유는 무엇인가요?
클라이언트 측 처리는 기기의 사용 가능한 메모리, 브라우저 렌더링 엔진, CPU 속도, 설치된 시스템 글꼴에 의존합니다. 하드웨어나 브라우저 버전이 다르면 처리 속도가 달라지고, 가끔은 페이지가 렌더링되는 모습도 달라질 수 있습니다.
오프라인에서도 도구가 동작하나요?
안정적으로 동작하지는 않습니다. 페이지와 라이브러리를 먼저 내려받아야 하며, PDF 텍스트 추출과 이미지 텍스트 추출은 OCR 언어 데이터가 처음 필요할 때 내려받습니다.