본문으로 건너뛰기

© 2026 Molayo

GeekNews헤드라인2026. 06. 15. 10:43

Show HN: Kage - 웹사이트를 오프라인 열람용 단일 바이너리로 섀도잉

요약

웹사이트 전체를 오프라인 열람이 가능한 단일 바이너리로 패키징하는 도구인 Kage를 소개합니다. 크롤러를 통해 DOM을 캡처하고 HTML을 깨끗하게 변환하여, 인터넷 연결이 어려운 환경에서도 웹사이트를 탐색할 수 있게 합니다.

핵심 포인트

  • 웹사이트 전체를 단일 바이너리 또는 ZIM 파일로 미러링 가능
  • Chrome/Chromium 기반의 DOM 캡처 및 HTML 정제 기술 사용
  • 오프라인 환경(비행기, 현장 등)에서의 위키 및 문서 접근성 향상
  • SingleFile의 재현 품질과 HTTrack의 스파이더링 방식 결합 지향

내 $HOME/bin/에도 이런 식의 개인용 바이너리가 꽤 있음. delete-all-npm, clean-rust-cache, download-youtube-playlist, get-markdown 같은 것들인데, 명령을 외울 필요가 없어서 좋음
가끔은 코딩 에이전트가 이런 도구들을 어떻게 호출해야 하는지도 알아서 찾아냄

참고로 다른 플랫폼인 Windows/macOS에서는 LiceCAP이 화면을 작은 GIF로 녹화하기에 훌륭한 도구임. Winamp와 Reaper DAW 작성자가 만든 것임: https://www.cockos.com/licecap/

VHS는 명령줄 영상 생성을 스크립트로 만들 때 훌륭함

회사 위키를 오프라인에서도 쉽게 접근하게 해주고 싶을 때 이걸 쓸 수 있겠음. 예를 들면 휴대폰 신호가 안 잡히는 현장에서 유용한 문서가 위키에 있을 수 있음
사이트 전체를 단일 바이너리로 묶을 수 있다는 점은 멋지지만, 별도의 서빙 프로세스가 필요 없는 버전이면 특히 좋겠음
사이트 콘텐츠 아카이브를, 가능하면 내장된 형태로, 찾아볼 수 있는 약간의 JavaScript가 들어간 단일 HTML 진입점 shim 같은 방식도 가능해 보임

Hacker News에 올린 게 딱 맞는 자리였네요. 아이디어를 구현할지 고려해보겠음
머릿속에는 이미 HTML을 Markdown으로 변환하는 스크립트/프로그램이 있어서, 실제로는 모든 것을 디스크에 Markdown 파일 폴더로 저장한 뒤 Git 저장소에 커밋할 수도 있음

kage serve $HOME/data/kage/paulgraham.com이라고 되어 있는데, 결과물이 정적이라면 왜 서버가 필요한지 모르겠음. 브라우저에서 그냥 열 수 있게 만들 수는 없나?
예를 들면 $ firefox $HOME/data/kage/paulgraham.com처럼 가능하면, kage가 설치되지 않은 기계에서도 결과물을 사용할 수 있음

대신 python -m http.server를 쓸 수 있을 것 같음. 아직 시도해보진 않았지만 동작할 듯함
실제로 Kage는 두 부분으로 되어 있음. 하나는 Chrome/Chromium 렌더링 이후 DOM을 캡처해서 페이지를 크롤링하고 깨끗한 HTML로 바꾸는 크롤러이고, 다른 하나는 결과를 Kiwix용 ZIM 파일이나 실행 파일로 패키징하는 pack/serve 구성요소임

이 저장소는 웹페이지 하나만 저장하는 것처럼 보임
여기서 구현 중인 건 하위 페이지까지 포함한 전체 웹사이트 미러링이라서, 오프라인에서도 전부 탐색할 수 있음. 예를 들면 paulgraham.com의 모든 에세이 같은 것임

SingleFile 정말 좋아함. Firefox 확장은 깔끔하게 저장하는 데 꽤 잘 동작함
다만 Kage가 SingleFile 수준의 재현 품질과 HTTPTrack식 스파이더링 접근을 결합할 수 있다면 유망해 보임. 단일 페이지 앱은 아카이빙이 좀 까다로운데 Kage가 얼마나 잘 처리할지 궁금함

링크 고마움. 이 단일 HTML 기능을 구현해보겠음. 있으면 좋아 보임

컴퓨터의 아무 웹브라우저에서 File -> Save as 하는 것과 뭐가 다른가?

나도 처음에 이걸 떠올렸고, 매우 우아한 해결책이라고 봄. 불필요하게 복잡하지도 않음

HTTP, 즉 HTTPS가 아닌 사이트를 복제해보려 했는데 navigation failed: net::ERR_NAME_NOT_RESOLVED가 나옴. http://로 프로토콜을 명시해도 마찬가지였음

비행기에서 읽으려고 위키를 내려받을 때 httrack(https://www.httrack.com)을 써왔음. 완벽하진 않지만 이전에 찾은 것들보다는 나았음
이것도 시도해보겠고, 결과가 좋으면 정말 기쁠 듯함

추억 돋음. 20년쯤 전에는 인터넷이 여전히 비싼 전화 접속이라, PC방에 가서 HTTrack으로 웹사이트와 만화를 내려받고, 그때는 아주 크게 느껴졌던 128MB USB 메모리에 전부 복사한 다음 집에 가져와 오프라인으로 읽곤 했음

수년간 오래된 웹사이트 아카이브를 꽤 모았음. 재미있는 건 못생긴 HTML 덤프가 “완벽한” 아카이브보다 더 유용했다는 점임
시간이 갈수록 RSS를 더 좋아하게 된 이유 중 하나도 그거임. 10년쯤 된 피드는 정성껏 보존된 애플리케이션형 웹사이트보다 오늘날 더 사용하기 쉬운 경우가 많음

RSS 피드를 생성하고 아카이빙하는 프로젝트를 하고 있음. 크롤러가 시작된 시점부터 전체 이력을 보존함
조금 정리한 뒤 곧 오픈소스로 공개할 예정임

이건 사이트에 꽤 큰 부하를 만들 가능성이 있어 보임. 복제 속도를 조절하거나 이미지/비디오를 피하는 설정이 있나?
웹사이트의 일부만 가져오는 방법도 있는지 궁금함

이걸 새 이슈로 만들어줄 수 있나? 나중에 처리하겠음. 지금 내 시간으로 새벽 1시지만, 누군가 관심을 가져줘서 기쁨

그냥 AI 크롤러인 척하면 문제 해결됨

깔끔한 프로젝트고 아이디어가 마음에 듦
빠르게 읽어보니 Chrome을 --no-sandbox로 실행하던데, 그럴 만한 이유가 있나? 보안 측면에서는 좋은 생각이 아닐 가능성이 큼. 이유가 없다면 샌드박스를 켜두는 걸 권함
어쨌든 멋진 작업임

--no-sandbox는 Docker에서 필요함. 아마 대부분 Docker에서 실행될 거라고 가정한 것 아닐까?

AI 자동 생성 콘텐츠

본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0