원하는 웹사이트의 모든 요소를 압축 파일 하나로 받아 오프라인에서 열람하는 방법
인터넷 연결이 끊겨도 특정 웹사이트를 그대로 열람하고 싶은 순간이 있습니다. 이 도구는 원하는 사이트의 HTML, 스타일시트, 이미지, 자바스크립트까지 모두 내려받아 압축 파일 하나로 묶어 줍니다. 결과물은 로컬에서 바로 열 수 있는 오프라인 웹페이지가 됩니다.
wget과 archiver가 함께 일하는 방식
이 도구는 백그라운드에서 wget 명령을 실행해 사이트의 모든 요소를 수집합니다. --mirror 옵션을 사용해 하위 페이지까지 재귀적으로 다운로드하고, --convert-links로 링크를 상대 경로로 변환해 오프라인에서도 이동이 가능하도록 만듭니다. 또한 --page-requisites를 통해 페이지 표시에 필요한 CSS와 이미지를 함께 가져옵니다. 수집된 파일들은 archiver 라이브러리로 압축된 뒤, 소켓 채널을 통해 사용자에게 전송됩니다. 이 과정은 서버가 클라이언트와 실시간으로 소통하며 진행됩니다.
다운로드 범위를 제한하는 안전장치
무제한으로 파일을 받아들이면 디스크 용량이 부족해질 수 있습니다. 이를 막기 위해 DOWNLOAD_QUOTA 환경 변수를 설정할 수 있습니다. 기본값은 100MB로, 한 번의 요청에서 이 크기를 넘지 못하도록 wget에 전달합니다. 이러한 설정은 서버가 과도한 리소스를 소모하는 것을 방지합니다.
실행을 위한 준비물
이 도구를 실행하려면 Node.js 16 이상과 시스템에 설치된 wget이 필요합니다. wget은 운영체제에 따라 설치 명령이 다릅니다. Debian 또는 Ubuntu에서는 apt install wget, macOS에서는 brew install wget, Windows에서는 winget install JernejSimoncic.Wget을 사용합니다. 저장소를 클론한 뒤 npm install과 npm start를 실행하면 로컬 포트 3000에서 서비스를 시작할 수 있습니다. PORT 환경 변수를 변경해 다른 포트를 사용할 수도 있습니다.
사용 전 확인해야 할 점
이 도구는 특정 웹사이트의 전체 구조를 복제하는 데 초점을 맞춥니다. 따라서 대상 사이트가 방대하거나 동적 콘텐츠가 많을 경우 예상보다 큰 용량의 파일이 생성될 수 있습니다. wget이 없으면 다운로드 기능이 전혀 작동하지 않습니다. 클라우드 환경에 배포할 계획이라면 wget이 포함된 이미지나 환경을 구성해야 합니다.