서버 측 PDF 도구는 파일을 운영자의 컴퓨터로 업로드해 거기서 처리한 뒤 결과를 돌려보내요. 클라이언트 측 도구는 반대로 프로그램을 브라우저로 내려받고, 그 프로그램이 내 기기에서 파일을 처리해요. 앞의 경우에는 문서가 이동하고, 뒤의 경우에는 코드만 이동해요.

이 하나의 차이가 누가 내 파일을 볼 수 있는지를 정해요. 두 종류의 도구가 다르게 느껴지고, 다른 방식으로 실패하고, 다른 작업에 맞는 이유도 이것으로 설명돼요. 이 글에서는 각각에서 실제로 무슨 일이 일어나는지 단계별로 살펴봐요.

서버 측 도구에서 일어나는 일

  1. 파일을 고르면, 페이지가 인터넷을 통해 운영자의 서버로 파일을 보내요. 보통은 HTTPS 업로드예요.
  2. 서버는 적어도 작업하는 동안 디스크나 메모리에 파일을 저장하고, 다른 사람들의 파일과 함께 대기열에 넣는 경우가 많아요.
  3. PDF 라이브러리, 변환기, 문자 인식 엔진 같은 서버의 프로그램이 작업을 해요.
  4. 결과물도 저장되고, 페이지는 내려받을 수 있는 링크를 줘요.
  5. 두 파일 모두 운영자가 정한 보관 규칙에 따라 나중에 삭제돼요.

예전에는 이게 유일하게 현실적인 설계였어요. 브라우저는 느렸고, PDF를 읽고 다시 쓸 수 있는 라이브러리는 서버에서만 돌아갔어요. 요즘 브라우저는 복잡한 코드도 빠르게 실행하고, JavaScript로 만든 오픈 소스 PDF 라이브러리로 일상적인 작업 대부분을 탭 안에서 할 수 있어요.

HTTPS는 1단계를 엿듣는 사람으로부터 보호해요. 2~5단계는 운영자에게 달려 있어요. 운영자의 보안, 직원 접근 권한, 백업, 그리고 서버가 있는 나라에서의 법적 의무 같은 것들이죠. 대부분의 운영자는 책임감 있게 다루지만, 그렇게 하리라고 믿고 맡기는 거예요.

클라이언트 측 도구에서 일어나는 일

  1. 도구 페이지를 열어요. 브라우저가 다른 웹사이트와 똑같이 페이지와 JavaScript를 내려받아요.
  2. 파일을 골라요. 브라우저의 File API가 디스크에서 탭의 메모리로 파일을 읽어 들여요. 아무것도 보내지 않아요.
  3. 탭에서 실행되는 코드가 작업을 해요. 무거운 부분은 백그라운드 스레드인 Web Worker에서 실행되는 경우가 많아서, 페이지가 계속 반응해요.
  4. 결과물은 메모리에서 만들어지고, 내 브라우저의 메모리를 가리키는 임시 링크를 통해 내려받기로 전달돼요.
  5. 탭을 닫으면 메모리가 해제돼요. 아무것도 보내지 않았으니 다른 곳에서 지울 것도 없어요.

Kopitiam의 PDF 도구는 이렇게 작동해요. Mozilla의 오픈 소스 PDF 엔진인 pdf.js로 페이지를 읽고 그리며, 파서는 Web Worker에서 실행돼요. 새 PDF는 또 다른 오픈 소스 라이브러리인 pdf-lib로 만들어요. 둘 다 탭 안에서 실행돼요.

클라이언트 측이라고 해서 페이지가 네트워크 요청을 전혀 보내지 않는다는 뜻은 아니에요. 코드와 글꼴, 그리고 무료 사이트라면 광고도 여전히 불러와요. 중요한 건 파일의 데이터가 어떤 요청에도 담기지 않는다는 거예요.

클라이언트 측 도구가 오프라인에서도 작동하는 이유

프로그램이 일단 브라우저에 들어오면, 실행하는 데 네트워크가 필요 없어요. 그래서 오프라인 테스트가 통하는 거예요. 도구를 열고 Wi-Fi를 끄면 도구는 계속 작동해요. 정말로 업로드하는 도구라면 바로 실패할 거예요.

알아 둘 만한 세부 사항도 있어요. Kopitiam은 파일을 놓을 때가 아니라 도구 페이지가 열리자마자 PDF 엔진의 워커를 시작해서, 페이지가 열린 뒤 연결이 끊겨도 도구가 계속 작동해요. 자주 쓰지 않는 일부 기능은 처음 쓸 때 추가 코드를 불러와요. 라틴 문자가 아닌 글자를 위한 글꼴 엔진 같은 것이죠. 그건 코드가 나에게 오는 것이지, 내 파일이 나가는 게 아니에요.

클라이언트 측 처리의 실제 한계

내 기기에서 작업하는 데에도 대가가 있고, 정직한 도구라면 그걸 알려 줘야 해요.

  • 메모리. 파일 전체가 탭의 메모리에 올라가고, 처리하는 동안에는 여러 벌로 올라가는 경우가 많아요. 200 MB짜리 스캔본은 그 몇 배가 필요할 수 있어요. 브라우저는 탭마다 메모리를 제한하고, 휴대폰이 가장 엄격해요.
  • 속도. 작업은 데이터 센터가 아니라 내 노트북이나 휴대폰이 해요. 400쪽을 이미지로 그리거나 긴 스캔본의 사진을 전부 다시 압축하는 일은 오래된 기기에서 눈에 띄게 오래 걸려요.
  • 배터리와 발열. 휴대폰에서 긴 작업을 하면 한동안 프로세서가 열심히 돌아가요.
  • 어려운 작업. 대량의 스캔 자료에 대한 문자 인식이나, 복잡한 Office 파일을 레이아웃 그대로 변환하는 일처럼 서버 소프트웨어로 하는 편이 훨씬 쉬운 작업도 있어요. 다른 부분은 클라이언트 측인 도구도 그런 작업만큼은 서버로 보내는 경우가 많아요.

실제로 클라이언트 측 도구의 크기 제한은 요금제 페이지의 숫자가 아니라 내 기기예요. Kopitiam의 코드에는 파일 크기 제한이 없어서, 아주 큰 파일은 처리되거나 메모리가 모자라거나 둘 중 하나예요. 큰 파일을 먼저 나누거나, 휴대폰 대신 데스크톱 브라우저를 쓰면 보통 해결돼요.

느린 모바일 연결에서 이메일로 보내려고 40 MB짜리 스캔본을 줄여야 한다고 해 봐요. 서버 측 도구는 시작하기 전에 40 MB를 모두 업로드해야 하고, 그다음 결과를 내려받아야 하니 기다리는 시간 대부분이 네트워크예요. 클라이언트 측 도구는 두 번의 전송을 건너뛰지만, 압축은 휴대폰이 직접 하니 긴 스캔본이라면 시간이 걸릴 수 있어요. 어느 쪽이 늘 더 빠르지는 않아요. 연결과 기기에 달려 있어요.

혼합형, 그리고 꼼꼼히 읽어야 할 주장

모든 도구가 완전히 한쪽인 건 아니에요. 몇 가지 유형이 있어요.

  • 대부분 기기에서, 일부는 서버에서. 간단한 작업은 브라우저에서 하고 변환이나 문자 인식은 업로드해요. 사이트 전체에 대한 설명이 아니라 도구별 설명을 찾아보세요.
  • 암호화 업로드. 파일을 업로드하지만 전송 중과 저장 중에 암호화해요. 아무것도 없는 것보다는 낫지만, 작업하려면 서버가 결국 복호화해요.
  • 기기에서 처리하고 클라우드에 저장. 작업은 기기에서 하지만, 나중에 열 수 있도록 결과물을 내 계정에 저장해요. 설계상 서버에 사본이 남아요.
  • 데스크톱 앱. 설치한 프로그램도 클라이언트 측이지만, 파일이나 사용 데이터를 본사로 보낼 수도 있어요. 개인정보 처리방침은 여전히 중요해요.

내가 쓰는 도구가 어느 쪽인지 확인하는 법

브라우저의 개발자 도구를 열고(대부분의 데스크톱 브라우저에서 F12) Network 탭으로 가서 테스트 파일을 도구로 처리해 보세요. 서버 측 도구라면 시작할 때 파일과 비슷한 크기의 요청이 나가는 게 보여요. 클라이언트 측 도구라면 광고나 분석 신호 같은 작은 요청만 보이고, 파일 크기에 따라 커지는 요청은 없어요. Wi-Fi를 끄고 같은 작업을 해 보는 게 같은 테스트의 간단한 버전이에요.

어느 쪽을 고를까요

계약서, 급여 명세서, 진료 관련 서류, 신분증 스캔본이라면 클라이언트 측이 더 나은 기본 선택이에요. 유출되거나 보관될 사본이 다른 곳에 없으니까요. 공개 안내 책자나 메뉴라면 어느 쪽이든 괜찮아요. 2,000쪽짜리 자료의 문자 인식처럼 브라우저가 잘하지 못하는 일이 필요할 때는, 보관 정책이 분명한 평판 좋은 서버 측 도구가 합리적인 선택이에요. 습관처럼 쓰지 말고 그 파일에만 쓰세요.