핵심 요약
RoundCut은 하이브리드 구조를 씁니다. 대부분의 도구는 아무런 업로드 없이 전적으로 브라우저 안에서 실행되고, 일부 도구는 브라우저가 품질을 따라가지 못할 때 우리 자신의 인프라 로 네트워크 요청 하나를 보냅니다. 이때는 언제나 눈에 보이지 않는 클라이언트 측 대체 경로를 갖추고 있습니다. 여러분이 어느 경로에 있는지는 각 도구에서도, 이 페이지에서도 알려 드립니다.
아래 표는 대표 사례이며 전부를 망라한 것은 아닙니다(새 도구는 정기적으로 나옵니다). 각 종류의 경로를 하나씩 예로 보여 줍니다.
| 예시 도구 | 작업이 일어나는 곳 |
|---|---|
| 원형 자르기(브라우저 전용) | 100% 브라우저 안, Canvas API. 업로드 없음, 오프라인에서 동작. |
| 압축 미리 보기(브라우저 전용) | 100% 브라우저 안, canvas.toBlob. 업로드 없음. 슬라이더는 항상 즉시 반영. |
| 압축 최종 다운로드(서버에 닿음) | api.roundcut.com.br의 우리 서비스로 한 번 왕복(Fastify, sharp, libvips, 독일의 VPS). 브라우저 대체 경로를 갖춤. |
| 배경 제거(서버에 닿음) | Cloudflare의 엣지 GPU에서 BiRefNet을 실행하는 Cloudflare Worker로 한 번 왕복. 클라우드에 닿지 못하면 브라우저 안의 WebAssembly로 대체. |
자르기, 크기 조정, 포맷 변환(AVIF 인코딩 제외), 압축 미리 보기는 모두 전적으로 브라우저 안에서 실행됩니다. 배경 제거, 압축 다운로드, AI 업스케일링, AVIF 인코딩, 여러 장 이미지 PDF는 각각 요청 하나를 보내고, 클라우드에 닿지 못하면 브라우저로 대체됩니다.
클라이언트 측 주장은 약 30초면 확인할 수 있습니다. DevTools → Network를 열고 로그를 비운 뒤, 원형 자르기나 압축 미리 보기 슬라이더 같은 브라우저 전용 도구를 쓰면, 여러분의 이미지 바이트를 실어 나르는 요청이 페이지에서 하나도 나가지 않는 것을 보게 됩니다. 서버에 닿는 도구에서는, 명시된 엔드포인트로 작업마다 정확히 한 번의 업로드가 보입니다.
왜 하이브리드인가
온라인 이미지 도구의 대부분은 한쪽 극단에 자리합니다. 모든 것을 서버에 업로드하는 방식(왕복을 기다려야 하고 운영자가 여러분의 파일을 보관합니다)이나, 모든 것을 브라우저 안에서 하는 방식 (인코딩과 AI 단계에서 품질과 속도를 치릅니다)입니다. 두 극단 모두 모든 면에서 이기지는 못합니다.
우리는 브라우저가 이미 뛰어난 부분에서는 클라이언트 측을 골랐습니다. <canvas> 요소가 자르기,
회전, 크기 조정, 그리고 JPG/WebP에서의 손실 미리 보기 인코딩을 맡습니다. 그리고 브라우저가
여전히 측정 가능할 만큼 뒤처지는 부분에서는 서버 측을 골랐습니다.
- 이미지 압축, 최종 다운로드에서. 서버 측
sharp와libvips 8.17은 같은 시각 품질에서 브라우저 인코더보다 바이트 대 바이트로 10~15% 더 작은 파일을 만들고, 브라우저가 노출하지 않는 AVIF 속도·크로마 조정과 JPEG XL 출력에 접근하게 해 줍니다. 슬라이더와 미리 보기는 여전히 브라우저 안에서 동작하므로 조정이 즉시 반영되고, “다운로드” 탭만 우리 서비스를 거칩니다. - AI 배경 제거와 AI 업스케일링, 기본 경로에서. 모델(분할용 BiRefNet, 확대용 초해상도)은 몇 초 안에 끝내려면 실제 GPU가 필요합니다. 브라우저 안의 대체 경로는 동작하지만 더 느리고, 머리카락, 털, 가는 가장자리에서 눈에 띄게 거친 결과를 냅니다.
- AVIF 인코딩, 변환에서. 브라우저 안의 AVIF 인코더는 일부 기기에서 느리므로, AVIF 출력은 압축 Worker에 요청 하나를 보내고, 메인 스레드 브라우저 인코딩을 대체 경로로 둡니다.
그 경로들에서 서버 측을 택하는 대신 우리가 받아들이는 비용은 작업마다 한 번의 왕복입니다. 나머지 모든 곳에서 클라이언트 측에 머무름으로써 피하는 비용은, 가장 빠르게 반복되는 작업 부분에서의 왕복 부담입니다.
파이프라인, 단계별로
1. 파일을 고른다
파일 선택기, 끌어다 놓기, 또는 붙여넣기를 통해 브라우저가 JavaScript에 File 객체를 건넵니다.
JavaScript는 FileReader 또는 Blob.arrayBuffer()를 써서 바이트를 읽습니다. 이 단계의 어느
시점에도 파일은 네트워크로 전송되지 않습니다. 어떤 도구를 쓰든 마찬가지입니다.
2. 브라우저가 이미지를 디코딩한다
최신 브라우저는 JPG, PNG, WebP, GIF, AVIF를 기본으로 디코딩합니다. 우리는 createImageBitmap()
을 써서 원시 바이트를, GPU가 다룰 수 있는 비트맵으로 메인 스레드 바깥에서 변환합니다. HEIC를
기본으로 디코딩하지 않는 브라우저에서는, 여러분의 브라우저 안에서 로컬로 동작하는 WebAssembly
디코더로 대체합니다.
3. 도구가 제 일을 한다, 여기서 경로가 갈라진다
- 브라우저 전용 도구(자르기, 크기 조정, PNG/JPEG/WebP로의 포맷 변환, 압축 미리 보기). Canvas 2D 픽셀 변환이나 WebAssembly 코덱이 비트맵을 로컬에서 다시 인코딩합니다. 결과는 아무런 업로드 없이 준비됩니다. Cropper.js가 자르기 도구의 상호작용 자르기 틀을 맡고,
canvas.toBlob이 미리 보기 재인코딩을 맡습니다. 전적으로 브라우저 안에서입니다. - 압축, 다운로드. “다운로드”를 탭하면 이미지가 한 번
api.roundcut.com.br로 전송됩니다(Hostinger가 운영하는 독일의 VPS에서 동작하는 Fastify 서비스, Node 24에sharp 0.34와libvips 8.17, Squoosh가 서버 경로에서 쓰는 것과 같은 C 라이브러리입니다). 미리 보기에서 설정한 것과 같은 매개변수로 다시 인코딩되고, 바이트는 여러분의 브라우저로 스트리밍되어 돌아옵니다. 서비스는 테넌트 격리된 내용 주소 기반 캐시(입력 바이트와 매개변수의 해시)를 500MB 한도로 유지하므로, 같은 이미지를 같은 설정으로 다시 다운로드하면 캐시된 바이트가 재생됩니다. 캐시는 여러분, IP, 파일 이름으로 색인되지 않습니다. 서비스에 닿지 못하면 도구는 브라우저 안의 미리 보기 blob으로 대체합니다. - 배경 제거, 기본 클라우드 경로. 이미지는 한 번 Cloudflare Worker로 업로드되어 비공개 R2 버킷에 임시 보관되고, Cloudflare의 엣지 GPU에서 BiRefNet 모델을 실행하는
cf.image.segment변환으로 처리되며, 잘라낸 결과가 스트리밍되어 돌아옵니다. 임시 보관된 R2 객체는 결과와 무관하게 R2 수명 주기 규칙에 따라 한 시간 이내에 삭제됩니다. 일반적인 사진은 1~3초에 끝납니다. IP별·일별 업로드 한도와 5MB 한도가 무료 등급을 지속 가능하게 유지합니다. - 그 밖의 클라우드 기반 도구(AI 업스케일링, AVIF 인코딩, 여러 장 이미지 PDF)도 같은 형태를 따릅니다. 명시된 인프라로의 요청 한 번(초해상도에는 클라우드 이미지 API, AVIF 인코딩에는 압축 Worker, 여러 장 이미지 PDF에는 우리 VPS 서비스), 결과의 스트리밍 반환, 그리고 그 요청이 실패할 때의 브라우저 안의 눈에 띄지 않는 대체 경로입니다.
- WebAssembly 대체 경로. 해당 클라우드 경로에 닿지 못하면(네트워크가 끊기거나, 엄격한 방화벽 뒤에 있거나, 일일 할당량이 찼거나, 파일이 클라우드 한도를 넘은 경우), 도구는 여러분의 브라우저 안에서 동작하는 로컬 모델이나 코덱으로 눈에 띄지 않게 전환합니다. 예를 들어 ONNX Runtime Web과 WebAssembly를 통한 배경 제거 모델 ISNet입니다. 첫 실행은 모델을 내려받느라 더 느리고, 이후 실행은 더 빠릅니다. 이 대체 경로들에서는 업로드가 없습니다. DevTools에서 확인할 수 있습니다.
4. 결과를 다운로드한다
출력 비트맵은 Blob으로 인코딩되어 object URL로 감싸이고, 여러분 브라우저의 표준 파일 저장
대화 상자에 제시됩니다. 파일이 디스크에 나타납니다.
직접 확인하는 방법
원하는 쪽을 고르세요.
방법 1. Network 탭을 지켜본다
- 새 탭에서 RoundCut을 열고 DevTools → Network를 엽니다.
- 브라우저 전용 도구, 원형 자르기나 압축 미리 보기 슬라이더를 씁니다. HTML/CSS/JS/폰트 요청과, 첫 사용 때의 해당 WebAssembly 모듈만 보입니다. 어떤 요청도 여러분의 이미지 바이트를 싣지 않습니다.
- 이제 서버에 닿는 도구, 압축 → 다운로드 또는 배경 제거를 씁니다. 여러분의 이미지를 싣는
POST하나와, 결과를 가지고 돌아오는 응답 하나가 정확히 보입니다. 아무 요청에나 포인터를 올리면 크기와 시간이 보입니다.
“Initiator” 열은 어떤 스크립트가 각 요청을 일으켰는지 알려 주고, “Type” 열은 무엇이 전송되었는지 알려 줍니다. 우리는 둘 다 숨기지 않습니다.
방법 2. 도구를 오프라인으로 쓴다
- RoundCut의 아무 도구 페이지나 불러옵니다. 작은 이미지로 배경 제거를 한 번 써서 브라우저 안의 ISNet 모델을 캐시에 둡니다.
- DevTools → Network를 열고 Offline에 체크합니다(또는 Wi-Fi를 끕니다).
- 페이지를 새로 고칩니다. 정적 자산은 캐시에 있으므로 그래도 불러와집니다.
- 도구를 시험합니다.
- 브라우저 전용 도구(원형 자르기, 크기 조정, 압축 미리 보기)는 계속 동작합니다. 애초에 네트워크가 필요 없었습니다.
- 압축 다운로드는 브라우저 안의 미리 보기 blob으로 대체합니다(인코딩 효율은 약간 떨어지지만 동작합니다).
- 배경 제거는 ISNet WebAssembly 모델로 대체하며 바깥으로 나가는 요청 없이 동작합니다.
도구가 오프라인에서 동작했다면(클라우드 기반은 약간 저하, 브라우저 전용은 동일), 정의상 어떤 서버도 여러분의 이미지를 보지 못한 것입니다.
우리가 보는 것과 보지 않는 것
클라이언트 측 경로에서는, 우리는 여러분의 이미지에 대해 아무것도 보지 못합니다. 들여다볼 요청도, 그것을 담을 캐시도, 뒤질 로그 줄도 없습니다.
서버 측 경로에서는,
- 압축 및 PDF 서비스는 인코딩 동안(보통 수백 밀리초)만 이미지 바이트를 보고, 캐시 TTL 동안만 내용 주소 기반 캐시 항목을 유지하며, 그게 전부입니다. 캐시는 사용자, IP, 파일 이름, 또는 “여러분의” 이미지를 찾는 데 쓸 수 있는 어떤 식별자로도 색인되지 않습니다. 우리는 이미지 내용을 로그에 남기지 않습니다. 인코딩 서비스는 전환 전에 v1이 제공하던 것과 같은 두 테넌트가 공유하며, 테넌트별 CORS, 속도 제한, HMAC 서명된 정규 URL을 갖춥니다.
- 배경 제거와 그 밖의 AI 경로는 임시 업로드와 모델 호출 동안(보통 몇 초)만 이미지를 보고, 그 뒤 임시 사본은 R2 수명 주기 규칙으로 삭제됩니다. BiRefNet 모델은 Cloudflare 자체 인프라 안에서 실행되며, remove.bg / fal.ai / Replicate 식의 외부 API에서 실행되지 않습니다.
모든 경로에서, 우리의 분석 제공자(Cloudflare Web Analytics) 는 페이지 조회 집계 데이터를 기록합니다. URL, 국가, 브라우저 계열, Core Web Vitals입니다. 쿠키도, 지속 식별자도, 개인에 묶인 것도 전혀 없습니다.
첫 사용 때 WebAssembly 모듈을 내려받는 도구(HEIC 디코더, ISNet ONNX 모델)에 대해서는, 우리 호스팅 제공자가 CSS 파일을 가져가는 것을 보는 것과 같은 방식으로 누군가 그 모듈을 가져갔다는 것을 봅니다. 모듈 자체에는 여러분의 이미지에 관한 정보가 들어 있지 않습니다.
전체 데이터 목록은 우리의 개인정보 처리방침에 있습니다.
기술 스택
궁금한 분들을 위해.
- Astro, 정적 사이트 생성기. 모든 페이지는 평범한 HTML로 출력되며, 상호작용 도구가 있는 곳에만 점진적 향상의 JavaScript “아일랜드”가 실립니다.
- 사용자 정의 속성을 쓴 바닐라 CSS, Tailwind 없음, CSS-in-JS 없음. 디자인 시스템 전체가 단일
tokens.css파일입니다. canvas.toBlob/<canvas>. 브라우저 전용 도구에서의 JPEG, PNG, WebP, AVIF(브라우저 지원) 인코딩, 그리고 모든 자르기와 크기 조정 작업.- Cropper.js, 자르기 사각형 상호작용 계층.
- ONNX Runtime Web, 배경 제거를 위한 ISNet WebAssembly 대체 경로를 실행합니다.
- Cloudflare Pages, 정적 빌드를 호스팅하고 엣지에서 서빙합니다.
- Cloudflare Workers, R2,
cf.image.segment(BiRefNet), 기본 배경 제거 파이프라인. - Node 24 위의 Fastify,
sharp 0.34,libvips 8.17, 독일의 Hostinger VPS에 있는api.roundcut.com.br의 압축 및 PDF 서비스. - Cloudflare Web Analytics, 집계된, 쿠키 없는 페이지 조회수.
브라우저 지원
모든 도구는 Chrome, Firefox, Safari, Edge의 현재 버전과 직전 버전에서, 데스크톱과 모바일 모두에서
동작합니다. 사이트는 점진적 향상을 씁니다. 브라우저가 더 새로운 API(예: showSaveFilePicker,
OffscreenCanvas)를 지원하면 그것을 쓰고, 지원하지 않으면 더 오래된 동등한 것으로 대체합니다.
“여러분의 브라우저는 지원되지 않습니다”라는 벽은 없습니다.
유일한 엄격한 요건은 JavaScript(어떤 도구에든)와 네트워크 연결(클라우드 기반 도구를 기본 경로로 쓸 때만. 브라우저 전용 도구는 첫 페이지 로드 이후 완전히 오프라인으로 동작합니다)입니다.
질문
다루지 않은 것이 있나요? support@roundcut.app로 메일을 보내 주세요. 기술적인 질문도 환영합니다.