# Monolith - 웹 페이지를 단일 HTML 파일로 저장하는 CLI 도구

> Clean Markdown view of GeekNews topic #13984. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=13984](https://news.hada.io/topic?id=13984)
- GeekNews Markdown: [https://news.hada.io/topic/13984.md](https://news.hada.io/topic/13984.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-03-25T11:35:28+09:00
- Updated: 2024-03-25T11:35:28+09:00
- Original source: [github.com/Y2Z](https://github.com/Y2Z/monolith)
- Points: 26
- Comments: 3

## Topic Body

- 웹 페이지를 단일 HTML 파일로 번들링  
- 기존의 "페이지 저장" 기능과 달리, `monolith`는 대상 문서뿐만 아니라 CSS, 이미지, 자바스크립트 애셋을 **한 번에** 포함시켜 저장  
- 모든 애셋을 데이터 URL로 내장하여, 네트워크 연결이 없는 상태에서도 인터넷에서와 똑같이 페이지를 렌더링할 수 있게 함  
- Rust로 작성되어 맥/윈/리눅스 모두 설치 가능: cargo/brew/choco/snap/apk..  
  
### 사용 방법  
  
- 명령어 예시: `monolith https://lyrics.github.io/db/P/Portishead/Dummy/Roads/ -o portishead-roads-lyrics.html`  
- 파이프를 통한 사용 예시: `cat index.html | monolith -aIiFfcMv -b https://original.site/ - > result.html`  
  
### 옵션  
  
- `-a`: 오디오 소스 제외  
- `-b`: 사용자 정의 `base URL` 사용  
- `-B`: 특정 도메인에서 자산 검색 금지  
- `-c`: CSS 제외  
- `-C`: `file`에서 쿠키 읽기  
- `-d`: 지정된 `domain(s)`에서만 자산 검색 허용  
- `-e`: 네트워크 오류 무시  
- `-E`: 사용자 정의 `encoding`으로 문서 저장  
- `-f`: 프레임 생략  
- `-F`: 웹 폰트 제외  
- `-h`: 도움말 정보 출력  
- `-i`: 이미지 제거  
- `-I`: 문서 격리  
- `-j`: 자바스크립트 제외  
- `-k`: 유효하지 않은 X.509 (TLS) 인증서 수락  
- `-M`: 타임스탬프 및 URL 정보 추가 안 함  
- `-n`: NOSCRIPT 요소의 내용 추출  
- `-o`: 출력을 `file`로 작성 (STDOUT을 위해 “-” 사용)  
- `-s`: 조용한 모드  
- `-t`: `network request timeout` 조정  
- `-u`: 사용자 정의 `User-Agent` 제공  
- `-v`: 비디오 제외  
  
### 도메인 화이트리스팅 및 블랙리스팅  
  
- `-d` 및 `-B` 옵션을 통해 애셋을 검색할 수 있는 도메인을 제어할 수 있음.  
  
### 동적 콘텐츠  
  
- Monolith에는 자바스크립트 엔진이 없어 초기 로드 후 데이터를 검색하고 표시하는 웹사이트는 추가 도구가 필요할 수 있음.  
- 예를 들어, Chromium(Chrome)을 사용하여 이러한 페이지에 대한 사전 처리기로 작동시킬 수 있음.  
  
### 프록시 설정  
  
- `https_proxy`, `http_proxy`, `no_proxy` 환경 변수를 설정해야 함.  
  
### 라이선스  
- Creative Commons Zero v1.0 Universal  
- 저자는 가능한 법적 범위 내에서 이 소프트웨어의 모든 저작권 및 인접 권리를 전 세계적으로 퍼블릭 도메인에 헌정함  
  
### GN⁺의 의견  
- `monolith`는 웹 페이지를 오프라인에서도 원본과 동일하게 보존할 수 있는 효과적인 도구로, 연구자나 개발자들에게 유용할 수 있음.  
- 이 도구는 웹 아카이빙이나 콘텐츠 보존에 관심이 있는 사람들에게 특히 매력적일 수 있으며, 인터넷이 연결되지 않은 환경에서도 웹 페이지를 검토할 수 있는 능력을 제공함.  
- 비판적인 시각에서 볼 때, 동적으로 로드되는 콘텐츠를 처리하지 못하는 한계가 있으며, 이는 사용자가 추가적인 도구를 사용해야 하는 번거로움을 초래할 수 있음.  
- 비슷한 기능을 제공하는 다른 프로젝트로는 HTTrack이나 Wget이 있으며, 이들도 웹사이트를 오프라인으로 저장하는 데 사용될 수 있음.  
- `monolith`를 사용하기 전에, 저장하려는 웹 페이지의 저작권 및 사용 권한을 확인하는 것이 중요하며, 저장된 콘텐츠의 사용 목적이 법적인 문제를 야기하지 않도록 주의해야 함.

## Comments



### Comment 24213

- Author: yangeok
- Created: 2024-04-04T13:58:03+09:00
- Points: 1

번들파일 저장돼서 짜증났는데 1파일 저장이면 땡큐겠네요 ㅎㅎ 정적사이트 아카이브 떠서 웹서버에 올릴 때 유용하겠네요^^

### Comment 24060

- Author: secret3056
- Created: 2024-03-28T10:03:09+09:00
- Points: 1

[Bicycle - 자전거가 움직이는 원리에 대한 모든 것](https://news.hada.io/topic?id=8831)을 아카이빙 해보았습니다.  
기존에 사용하던 비슷한 브라우저 확장으로 [SingleFile - 웹페이지를 HTML 파일 하나로 저장해주는 도구](https://news.hada.io/topic?id=390)가 있었는데요,  
  
두 도구 모두 정상적인 webgl 동작은 하지 않았습니다.  
monolith는 아예 모델을 다운로드 하지 않았고  
SingleFile은 모델을 다운로드해서 첫 이미지까지는 그려주는데 그 인터렉티브한 동작은 하지 않습니다.  
  
각 출력물의 크기는 2MB와 9MB 입니다. 개발자 도구에서 hard refresh 했을때는 3MB를 다운로드 받습니다.  
  
```ps1  
chrome.exe `  
--headless `  
--incognito `  
--virtual-time-budget=50000 `  
--dump-dom https://ciechanow.ski/bicycle/ | monolith `  
- `  
-I `  
-b https://ciechanow.ski/bicycle/ `  
-o bicycle.html  
```

### Comment 23994

- Author: neo
- Created: 2024-03-25T11:35:28+09:00
- Points: 1

#### [Hacker News 의견](https://news.ycombinator.com/item?id=39810378)   
- macOS에서 Google Chrome을 사용하여 JavaScript가 실행된 후의 웹 페이지 HTML 파일을 얻는 방법을 README 파일에서 배움. 자세한 내용은 TIL에 정리하고, Playwright Chromium을 사용하는 자신의 도구인 shot-scraper도 비슷한 기능을 제공함.  
  - ``` /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \   --headless --incognito --dump-dom https://github.com > /tmp/github.html ```  
  
- 단일 파일 페이지를 가능한 한 배포하는 것을 선호함. 소스 보기를 통해 모든 것을 볼 수 있어야 한다는 원칙 때문. 이러한 페이지들은 자체 포함적이며, 오프라인으로 사용하거나 다시 업로드할 수 있음. TypeScript를 사용하여 게임을 작성하고 이를 단일 HTML 파일로 빌드하는 간단한 빌드 시스템을 만듦. 브라우저가 TypeScript 문법을 지원하게 되면 컴파일러나 빌드 단계가 필요 없어질 것임.  
  
- SingleFile과의 비교해서 어떤지?  
  
- 나중에 읽기 위해 웹 페이지를 저장하는 서비스를 자주 사용하지만, 실제로 읽으려 할 때 페이지가 더 이상 존재하지 않는 경우가 많음. 오프라인 아카이브 버전으로 이동하는 것이 더 나은 옵션일 수 있음을 고려 중.  
  
- Wayback Machine에서 전체 웹사이트를 복원하는 방법에 대한 질문. 사랑하는 웹사이트의 데이터베이스가 삭제되었으나, 모든 내용이 인터넷 아카이브에 존재함. 수동 스크래핑과 파이썬을 사용한 CSS URL 수정 등이 필요할 것으로 보임.  
  
- 몇 년 전에 비슷한 것을 작성했으며, 주로 Go 프로그램에서 HTML을 생성할 때 사용함. 외부 스타일시트와 자바스크립트에 링크를 사용하고, 이를 단일 HTML 파일로 처리함.  
  
- 지정된 깊이까지 링크를 따라가는 기능에 대한 지원이 있으면 좋겠다는 의견. Httrack과 유사한 기능을 언급.  
  
- 이 도구는 흥미롭지만, 브라우저가 웹 페이지를 처리하는 방식에 대한 문제를 해결하기 위한 임시방편이라는 의견. 브라우저가 페이지를 "blah.html" 파일과 "blah_files" 폴더로 저장하는 대신, 둘을 하나의 폴더로 묶어서 쉽게 이동하고 복사할 수 있게 해야 한다고 주장함.  
  
- wget을 사용하여 웹 페이지와 모든 자산을 다운로드하는 방법에 대한 설명과 문서 링크 제공.  
  
- 2019년 8월에 해커뉴스에 게시된 "[Show HN: CLI tool for saving web pages as a single file](https://news.ycombinator.com/item?id=20774322)"에 대한 관련 링크 제공.
