Text Share
텍스트를 압축하여 URL로 공유 · 완전 클라이언트사이드 · 선택적 암호화
Create a shareable link
Compress your text into a URL. All processing happens in your browser.
이런 상황에 유용합니다
- 코드 스니펫을 계정 없이 빠르게 공유할 때
- 임시 메모나 회의 노트를 동료와 나눌 때
- 비밀번호 보호가 필요한 민감한 텍스트를 전달할 때
- 인터넷 연결이 불안정해도 URL만으로 텍스트를 보존할 때
URL로 텍스트를 공유하는 방법
전통적인 텍스트 공유 방법은 Pastebin, Google Docs, 이메일 첨부파일처럼 서버에 데이터를 저장한 뒤 링크를 나눠주는 방식입니다. 이 방법은 편리하지만 데이터가 제3자 서버에 보관된다는 프라이버시 문제가 있고, 서비스가 종료되면 링크도 사라집니다.
Text Share는 다른 방식을 사용합니다. 텍스트를 압축한 뒤 URL의 fragment(#) 부분에 직접 삽입합니다. HTTP 표준에 따르면 URL의 # 이후 부분은 브라우저에서만 처리되며 서버로 전송되지 않습니다. 이는 데이터가 네트워크를 통해 어떤 서버에도 도달하지 않는다는 의미입니다.
링크를 받은 사람이 URL을 열면, 브라우저가 # 뒤의 압축 데이터를 직접 읽어서 원래 텍스트로 복원합니다. 별도 서버 요청 없이 완전히 로컬에서 처리됩니다. 비밀번호가 설정된 경우에도 복호화는 수신자의 브라우저에서만 이루어집니다.
LZ-String: URL에 최적화된 압축 알고리즘
텍스트 공유의 핵심 과제는 URL 길이입니다. 원본 텍스트를 그대로 URL에 넣으면 수백 킬로바이트가 넘을 수 있고, 브라우저마다 URL 길이 제한이 있습니다. 이를 해결하기 위해 LZ-String 압축 라이브러리를 사용합니다.
LZ-String은 1977년 Abraham Lempel과 Jacob Ziv가 발표한 LZ77 알고리즘을 기반으로 합니다. 텍스트에서 반복되는 패턴을 찾아 짧은 참조로 대체하는 방식으로 압축합니다. 예를 들어 "abcabc"라는 문자열은 "abc(앞에서 3자 복사)"처럼 인코딩됩니다. 반복적인 단어나 구조가 많은 자연어 텍스트, JSON, 코드에서 특히 효과적이며 평균 50~80%의 크기 절감이 가능합니다.
다른 범용 압축 라이브러리(zlib, brotli)와 달리 LZ-String은 처음부터 브라우저 환경과 URL 삽입을 고려하여 설계되었습니다. compressToEncodedURIComponent() 메서드는 압축과 URL-safe base64 인코딩을 한 번에 처리합니다. 전체 라이브러리 크기도 3.5KB(gzip 기준)에 불과해 페이지 로드에 영향을 주지 않습니다.
압축률 참고 수치
비밀번호 암호화: AES-256-GCM
비밀번호를 설정하면 텍스트가 AES-256-GCM 알고리즘으로 암호화됩니다. AES(Advanced Encryption Standard)는 미국 국립표준기술연구소(NIST)가 표준으로 지정한 대칭키 암호화 방식으로, 정부기관과 금융기관에서 가장 민감한 데이터를 보호하는 데 사용됩니다. 256비트 키는 현재 컴퓨팅 기술로는 무차별 대입 공격이 사실상 불가능합니다.
GCM(Galois/Counter Mode)은 AES의 운영 모드 중 하나로, 암호화와 인증을 동시에 제공하는 AEAD(Authenticated Encryption with Associated Data) 방식입니다. 암호화된 데이터가 전송 중에 변조되었는지 자동으로 감지할 수 있습니다. 잘못된 비밀번호로 복호화를 시도하면 암호화 라이브러리가 이를 즉시 탐지하여 에러를 반환합니다.
비밀번호에서 암호화 키를 생성하는 과정에는 PBKDF2(Password-Based Key Derivation Function 2)가 사용됩니다. 비밀번호를 그대로 키로 사용하면 짧은 비밀번호가 취약해지는 문제가 있는데, PBKDF2는 랜덤 salt와 함께 100,000번의 해시 반복을 적용하여 공격자가 수십억 개의 비밀번호를 빠르게 시험하는 것을 어렵게 만듭니다.
비밀번호 보안 주의사항
- 비밀번호는 URL에 포함되지 않으며 서버로 전송되지 않습니다
- 비밀번호를 링크와 함께 같은 채널로 보내면 보안 이점이 줄어듭니다
- URL을 이메일로, 비밀번호는 SMS로 보내는 식으로 채널을 분리하세요
- 더 긴 비밀번호일수록 브루트포스 공격에 강합니다
URL Hash Fragment의 프라이버시 원리
URL은 여러 부분으로 구성됩니다. https://toolery.xyz/tools/text-share#v1:ABC123에서 # 이후 부분을 "fragment identifier"라고 합니다. RFC 3986 표준에 따르면 브라우저는 HTTP 요청을 서버로 보낼 때 fragment를 포함하지 않습니다. 이는 서버가 fragment에 어떤 데이터가 담겨있는지 알 수 없다는 의미입니다.
이 특성은 원래 HTML 페이지 내 특정 섹션으로 이동하는 앵커 링크를 위해 설계된 것이지만, Text Share는 이를 활용하여 데이터를 완전히 클라이언트사이드에서만 처리합니다. 링크를 공유해도 Toolery 서버에는 텍스트 내용이 전혀 도달하지 않습니다. 서버 로그에는 /tools/text-share에 대한 페이지 요청만 기록됩니다.
단, URL 자체가 브라우저 히스토리, 클립보드, 스크린샷에는 남을 수 있습니다. 매우 민감한 정보라면 비밀번호 암호화를 반드시 함께 사용하고, 텍스트 확인 후 링크를 폐기하도록 수신자에게 안내하세요.
실전 활용 사례
코드 공유
GitHub Gist나 Pastebin 계정 없이 코드 스니펫을 즉시 공유할 수 있습니다. 링크를 열면 바로 코드가 보이며, 별도 서비스 가입이 필요 없습니다. 비밀번호로 API 키나 설정 파일을 안전하게 전달할 수도 있습니다.
임시 메모 및 회의 노트
회의 중 작성한 노트나 할 일 목록을 즉시 링크로 만들어 팀원에게 전송합니다. 서버에 저장되지 않으므로 보존 기간 걱정 없이 사용하고 링크를 버리면 됩니다.
암호화된 메시지 전달
민감한 텍스트(개인 정보, 임시 비밀번호, 계약서 초안)를 비밀번호와 함께 공유합니다. URL은 이메일로, 비밀번호는 별도 메신저로 전달하면 이중 보안이 됩니다.
오프라인 환경에서의 데이터 전달
QR Code Generator와 함께 사용하면 인터넷이 없는 환경에서도 텍스트를 전달할 수 있습니다. Text Share로 URL을 만들고, QR 코드로 변환한 뒤 인쇄하거나 화면에 보여주면 됩니다.
설정 파일 및 JSON 데이터 공유
Kubernetes 설정, Docker Compose 파일, 환경변수 목록처럼 구조화된 텍스트는 반복 패턴이 많아 압축 효율이 높습니다. 팀 내에서 설정을 빠르게 공유하거나 지원 요청 시 설정을 첨부하는 데 유용합니다.
브라우저 내장 암호화를 사용하는 이유
많은 웹 앱이 암호화를 위해 CryptoJS나 forge 같은 서드파티 JavaScript 라이브러리를 사용합니다. 이 라이브러리들은 수백 킬로바이트 이상의 번들 크기를 추가하고, 버그나 취약점이 발견되면 라이브러리 업데이트에 의존해야 합니다.
Text Share는 모든 현대 브라우저에 내장된 Web Crypto API를 사용합니다. 이 API는 C++로 구현된 브라우저 네이티브 코드로, JavaScript보다 훨씬 빠르며 사이드채널 공격에 강합니다. 추가 라이브러리를 다운로드할 필요가 없으므로 로드 속도도 빠릅니다. Chrome, Firefox, Safari, Edge 등 모든 주요 브라우저에서 동일하게 지원되며, HTTPS 환경(또는 localhost)에서만 사용 가능합니다.
암호화 키는 extractable: false로 설정됩니다. 이는 JavaScript 코드에서 키 값을 읽어낼 수 없다는 의미로, 브라우저 확장 프로그램이나 XSS 공격으로부터 키를 보호합니다.
자주 묻는 질문
링크가 만료되나요?
링크는 만료되지 않습니다. 데이터가 서버에 저장되지 않고 URL 자체에 포함되므로, URL이 존재하는 한 데이터도 존재합니다. 단, URL을 삭제하거나 잃어버리면 데이터도 사라집니다.
얼마나 긴 텍스트까지 공유할 수 있나요?
브라우저의 URL 길이 제한에 따라 다릅니다. Firefox 기준 약 65,000자의 URL을 처리할 수 있으며, 압축률을 고려하면 일반 텍스트 기준 약 100,000자 이상도 공유 가능합니다. 대부분의 실용적인 사용 사례에 충분한 크기입니다.
비밀번호를 잊으면 어떻게 되나요?
데이터를 복구할 수 없습니다. 서버에 비밀번호나 키가 저장되지 않으므로 분실 시 복구 방법이 없습니다. 중요한 정보는 반드시 원본을 별도로 보관하세요.
링크를 "폐기"할 수 있나요?
불가능합니다. 데이터가 URL 자체에 포함되므로 링크를 가진 사람은 언제든 접근할 수 있습니다. 민감한 정보는 비밀번호 암호화와 함께 사용하고, 수신 확인 후 비밀번호를 변경하거나 해당 정보를 무효화하세요.