네이버 블로그·카페의 글을 과거→최근 순서로 txt 파일로 백업하는 데스크톱 애플리케이션입니다. 글 1개당 파일 1개로 제목·작성일·본문을 저장하며, 이미지·링크·인용구는 표기로 남겨 원문의 순서와 맥락을 보존합니다. 헤드리스 브라우저 없이 HTTP 요청과 HTML 파싱만으로 동작하도록 설계되었습니다.
최신 릴리스 다운로드 · 작동 방식 · 자주 묻는 질문
- 전체 백업 — 블로그의 모든 글, 또는 카페의 접근 가능한 게시판 글을 과거→최근 순으로 저장합니다.
- 블로그·카페 자동 인식 — 카페 주소(
cafe.naver.com/...)를 입력하면 카페 모드로 전환됩니다. - 앱 내 네이버 로그인 — 로그인이 필요한 카페는 앱의 로그인 창에서 직접 로그인하면 세션이 자동 등록됩니다(브라우저 확장·파일 불필요).
- 증분 재개 — 글의 고유 ID로 식별하여 이미 수집된 글은 건너뛰고 신규 글만 이어받습니다.
- 중단 안전 — 임시 파일에 기록한 뒤 원자적으로 교체하므로, 중단되어도 손상된 파일이 남지 않습니다.
- 실패 자동 재시도 — 본문을 확보하지 못한 글을 자동으로 재시도하고, 끝내 실패하면 기록하여 다음 실행 시 재시도합니다.
- 콘텐츠 충실도 — 이미지·링크 카드·인용구·동영상·구분선을 표기로 보존하여 순서와 맥락을 유지합니다.
- 간편 설치 — Windows·macOS 설치 프로그램으로 바로 쓰는 데스크톱 앱이며, 별도의 개발 환경이 필요하지 않습니다.
- 자동 업데이트 — 새 버전이 나오면 앱 안에서 바뀐 부분만 내려받아 갱신합니다.
Note
현재 Windows 실행 파일을 제공합니다. macOS·Linux는 아래 개발 환경의 소스 빌드를 참고하십시오.
최신 릴리스에서 사용하는 OS의 설치 프로그램을 내려받습니다.
- Windows:
*-Setup.exe - macOS:
*-Setup.pkg
설치하면 이후 새 버전은 앱 안에서 자동으로 받습니다(전체가 아니라 바뀐 부분만 내려받습니다).
v0.1.x 포터블 zip을 쓰고 계셨다면 자동으로 넘어가지 않습니다. 위 설치 프로그램으로 한 번 설치해 주세요. 저장된 로그인 쿠키는 이전되지 않으므로 설치 후 네이버 로그인을 다시 한 번 해 주시면 됩니다. 이미 받아 둔 백업 파일은 그대로 두고 같은 출력 폴더를 다시 지정하면 이어받기가 계속 동작합니다.
Windows는 시작 메뉴에서, macOS는 런치패드나 응용 프로그램 폴더에서 실행합니다.
macOS에서 "확인되지 않은 개발자" 경고가 뜹니다. 이 앱은 Apple 개발자 인증서로 서명·공증되어 있지 않습니다(유료 프로그램이 필요합니다). 설치 프로그램을 열 때 경고가 뜨면 시스템 설정 → 개인정보 보호 및 보안으로 가서 화면 아래쪽의 **"확인 없이 열기"**를 누르면 설치가 진행됩니다.
블로그 백업과 공개 카페 게시판은 별도 준비가 필요하지 않습니다. 다만 로그인·등급 제한이 적용된 카페 게시판은 네이버 로그인 세션(쿠키)을 앱에 등록해야 접근할 수 있습니다. 앱이 자동으로 로그인하지 않으며(약관상 자동 로그인 금지), 사용자가 네이버 공식 로그인 페이지에서 직접 로그인한 뒤 발급된 세션 쿠키만 사용합니다.
방법 A — 앱에서 네이버 로그인 (권장)
- 앱의 고급 옵션을 펼치고 네이버 로그인 버튼을 누릅니다.
- 열리는 로그인 창에서 네이버 계정으로 로그인합니다. 로그인은 네이버 공식 페이지에서 진행되며, 비밀번호는 앱을 거치지 않고 네이버로 직접 전달되어 저장되지 않습니다.
- 로그인이 완료되면 앱이 세션 쿠키를 자동으로 저장하며(
네이버 로그인 완료 — 쿠키를 저장했습니다 ✓), 이후 카페 백업에 자동으로 적용됩니다.
브라우저 확장이나 별도 파일 없이 앱에서 로그인만 하면 되는 가장 간단한 방법입니다.
방법 B — 브라우저 확장으로 쿠키 파일 내보내기
- 크롬 확장 **Get cookies.txt LOCALLY**를 설치합니다. 오픈소스이며 모든 처리가 브라우저 내부에서만 이루어져 쿠키를 외부로 전송하지 않습니다.
- 크롬에서
https://cafe.naver.com에 접속하여 네이버 계정으로 로그인합니다(로그인이 완료되어 계정 정보가 표시되는 상태까지). - 해당 탭에서 확장 아이콘을 클릭하고 **
Export**를 눌러..._cookies.txt파일로 저장합니다. - 앱의 고급 옵션 → 쿠키 업데이트에서 저장한 파일을 선택합니다.
저장된 쿠키: 있음 ✓이 표시되면 이후 카페 백업에 자동으로 적용됩니다.
[!WARNING]
Export All Cookies는 사용하지 마십시오. 모든 사이트의 쿠키가 포함됩니다. 반드시 네이버 탭에서Export(해당 사이트만)로 저장하십시오. 이름이 유사한 구형 "cookies.txt" 확장은 과거 악성코드로 문제가 된 별개의 프로그램이므로 위 링크의 확장만 설치하십시오.
방법 C — 쿠키 문자열 직접 입력
- 로그인한 상태에서 개발자도구(F12) → **Application → Storage → Cookies →
https://cafe.naver.com**을 엽니다. NID_AUT·NID_SES값을 복사하여 앱의 고급 옵션 → 카페 세션 쿠키 칸에NID_AUT=...; NID_SES=...형식으로 붙여넣습니다.
Important
쿠키는 로그인 세션 자체에 해당하므로 외부에 노출하지 마십시오. 앱은 쿠키를 사용자 기기 내부에만 저장하며 로그 파일에는 기록하지 않습니다. 쿠키를 등록하지 않으면 공개 게시판만 수집할 수 있으며, 세션이 만료되면 네이버 로그인을 다시 수행하거나 쿠키 파일을 새로 등록하십시오.
- 주소 칸에 블로그 아이디·URL 또는 카페 주소를 입력합니다(예:
myblog,https://cafe.naver.com/mycafe). - 출력 폴더를 지정합니다. 결과물 txt 파일이 이 폴더에 저장됩니다(기본값은 문서 폴더 아래
naver-post-crawler이며, 한 번 고르면 다음 실행에서 그대로 복원됩니다). - 시작을 누릅니다. 진행 중 중단할 수 있으며, 중단 시점까지 수집된 글은 저장 폴더에 유지됩니다.
- 로그인이 필요한 카페 게시판이라면 고급 옵션 → 네이버 로그인(또는 쿠키 업데이트)으로 세션을 먼저 등록하십시오(3단계 참고).
저장 폴더에 글 1개당 txt 파일 1개가 과거→최근 순으로 번호가 매겨져 생성됩니다. 파일 형식과 폴더 구조는 아래 산출물을 참고하십시오. 재실행 시 이미 수집된 글은 건너뛰고 신규 글만 이어받으므로, 새 글이 게시될 때마다 반복 실행하여 백업을 최신 상태로 유지할 수 있습니다.
블로그와 카페는 동일한 수집·정렬·저장·재개 파이프라인을 공유하며, 소스에 따라 클라이언트와 본문 파서만 교체합니다.
CLI와 GUI는 동일한 코어(Crawler)를 사용합니다.
| 단계 | 내용 |
|---|---|
| 1 | 글 목록 수집 — 모바일 블로그 post-list API 또는 카페 내부 API를 페이지네이션 |
| 2 | 과거→최근 정렬 후 0001부터 순번 부여 (API는 최신→과거 순으로 응답) |
| 3 | 본문 추출 — 스마트에디터 se-main-container 파싱 (헤드리스 브라우저 미사용, 구버전 SE 3.0 폴백) |
| 4 | 빈 글 제외 — "그날의 추억" 자동 노출 글은 의미 신호 두 가지로 판별하여 제외 |
| 5 | txt 저장 — 글 ID 기반 증분 재개, 원자적 교체로 중단 안전, 실패 글 자동 재시도 |
텍스트 외 요소는 순서와 맥락을 보존하기 위해 표기로 대체합니다. 이미지 → [이미지: URL], 링크 카드 →
[링크: 제목 URL], 인용구 → > 들여쓰기, 동영상 → [동영상: URL], 구분선 → ──────────.
카페는 카페 웹이 사용하는 내부 API(cafe-boardlist-api / cafe-articleapi)로 목록과 본문을 조회합니다.
내부 API는 비공식·비문서화이므로 네이버의 변경에 따라 조정이 필요할 수 있습니다.
기능 명세의 단일 진실 원천(SSoT)은 **docs/SPEC.md**를 참고하십시오.
output/
├─ 0001_2023-08-21_맥쿼리 인프라 유상증자 입고_223189475037.txt
├─ 0002_2023-08-22_상반기 연금펀드 수익률 31%_223189644114.txt
└─ ...
파일명은 <순번>_<YYYY-MM-DD>_<제목>_<식별자>.txt 형식입니다. 끝의 식별자는 글의 고유 ID
(블로그는 logNo, 카페는 articleId)로, 증분 재개 시 위치가 아닌 글 ID로 판정하는 기준이 됩니다.
파일 내용:
제목: 맥쿼리 인프라 유상증자 입고
날짜: 2023-08-21
주소: https://m.blog.naver.com/myblog/223189475037
============================================================
8월 21일 주식 이야기
...
네이버 로그인 정보는 파일이 아니라 OS 자격증명 보관소(macOS 키체인 / Windows 자격 증명 관리자)에 들어 있습니다. 앱을 지워도 설정과 로그는 남는데, 이는 두 OS 모두에서 정상 동작입니다(다시 설치하면 설정이 그대로 살아납니다). 아래는 그것까지 남김없이 지우는 방법입니다.
설정 → 앱 → 설치된 앱에서 NaverPostCrawler를 제거합니다.
저장된 네이버 로그인 정보는 이 과정에서 함께 지워집니다.
설정과 로그까지 지우려면 이 폴더를 삭제하십시오.
%APPDATA%\Your Company\Naver Blog Backup
Warning
상위 폴더인 Your Company는 다른 앱도 함께 쓰므로 지우지 마십시오.
응용 프로그램 폴더에서 Naver Blog Backup.app을 휴지통으로 옮깁니다.
macOS에는 제거 프로그램이 끼어들 지점이 없어(.pkg는 언인스톨러를 만들지 않습니다),
다음 세 가지는 자동으로 지워지지 않습니다. 완전히 지우려면 직접 실행하십시오.
# 1. 설정·로그
rm -rf ~/Library/Application\ Support/com.thsvkd.naver-post-crawler
# 2. 저장된 네이버 로그인 정보
security delete-generic-password -s naver-post-crawler -a cafe-cookie
# 3. 설치 기록(영수증). 응용 프로그램 폴더에 설치했다면 sudo가 필요합니다.
pkgutil --volume ~ --forget com.thsvkd.naver-post-crawler2번은 키체인 접근.app에서 naver-post-crawler를 검색해 지워도 됩니다.
Windows가 앱을 차단합니다.
코드 서명이 없는 개인 배포본에서 발생하는 정상적인 경고입니다. "Windows의 PC 보호" 창에서 추가 정보 → 실행을 선택하십시오.
"로그인/권한이 필요합니다" 오류가 발생합니다.
카페 로그인 세션(쿠키)이 없거나 만료된 경우입니다. 시작하기 3단계에 따라 고급 옵션 → 네이버 로그인으로 다시 로그인하거나 쿠키 파일을 새로 등록하십시오. 또한 해당 게시판에 대한 열람 권한이 있는 계정으로 로그인했는지 확인하십시오.
"성인인증이 필요한 카페입니다" 오류가 발생합니다.
네이버가 성인 전용으로 분류한 카페·게시판입니다. 로그인만으로는 열람할 수 없으며, 성인인증을 마친 네이버 계정으로 로그인한 세션이어야 합니다. 해당 계정으로 시작하기 3단계의 쿠키 등록을 다시 수행하십시오. 성인인증은 네이버에서 직접 진행해야 하며 앱이 대신 처리하지 않습니다.
이미 수집한 글을 다시 내려받습니까?
기본적으로 이미 수집된 글은 다시 내려받지 않고 신규 글만 이어받습니다. 전체를 다시 수집하려면 고급 옵션 → 이미 저장된 글도 다시 받기를 활성화한 뒤 실행하십시오.
수집 대상 범위는 어디까지입니까?
열람 권한이 있는 글만 대상으로 합니다. 블로그는 공개 글 전체, 카페는 가입 상태에서 접근 가능한 게시판의 글이 해당합니다. "N년 전 오늘 / 그날의 추억"과 같이 본문이 없는 자동 노출 글은 저장하지 않습니다.
속도가 느리거나 중간에 중단됩니다.
네이버는 요청 속도 제한·봇 차단을 운영하므로, 앱은 서버 부하를 줄이기 위해 요청 사이에 대기 시간을 둡니다 (기본 0.5초). 중단되어도 데이터는 보존되며, 다시 시작을 누르면 수집된 글은 건너뛰고 이어서 진행합니다.
업데이트는 어떻게 수행합니까?
새 버전이 출시되면 앱의 업데이트 확인 버튼으로 감지하며, 앱 내에서 갱신할 수 있습니다.
소스에서 실행 · 빌드 · 테스트
요구사항: Python 3.12+, uv
설치
uv sync셋업 스크립트로 의존성 동기화와 pre-commit hook 설치를 한 번에 처리할 수 있습니다(모든 플랫폼 공통).
python scripts/setup.py실행 (GUI)
uv run naver-post-crawler-gui # CLI와 동일한 코어를 사용하는 flet 데스크톱 앱scripts/run.py는 인자 없이 실행하면 GUI로, 대상을 지정하면 CLI로 동작합니다.
python scripts/run.py # GUI 창
python scripts/run.py <TARGET> [옵션] # CLI 백업실행 (CLI)
<TARGET>은 블로그 아이디·블로그/포스트 URL 또는 카페 주소입니다. 카페 주소이면 카페 모드로 전환됩니다.
uv run naver-post-crawler myblog # 블로그
uv run naver-post-crawler https://blog.naver.com/myblog/223189475037
uv run naver-post-crawler https://cafe.naver.com/mycafe # 카페 (공개 게시판)
uv run naver-post-crawler https://cafe.naver.com/mycafe --menu 5 # 특정 게시판만
uv run naver-post-crawler https://cafe.naver.com/mycafe --cookie-file "cafe_cookies.txt" # 로그인 게시판| 옵션 | 기본값 | 설명 |
|---|---|---|
-o, --out |
output |
txt 파일을 저장할 디렉토리 |
--delay |
0.5 |
요청 사이 대기 시간(초) |
--max-retries |
3 |
요청 실패 시 최대 재시도 횟수 |
--limit |
(전체) | 처리할 글 수 제한(과거부터). 시험용 |
--retry-failed / --no-retry-failed |
(대화형 질문) | 이전에 실패한 글 재시도 여부 강제 |
--force |
off | 이미 저장된 글도 다시 받아 덮어쓰기 |
--cookie |
(없음) | [카페] 세션 쿠키 문자열 NID_AUT=...; NID_SES=... |
--cookie-file |
(없음) | [카페] 브라우저 확장으로 내보낸 쿠키 파일(cookies.txt/JSON) 경로 |
--menu |
(전체글) | [카페] 특정 게시판만 받을 때의 menuId |
--log-dir |
logs |
로그 파일을 저장할 디렉토리 |
--log-level |
INFO |
파일 로그 레벨 (DEBUG/INFO/WARNING/ERROR) |
--check-update |
— | 최신 릴리스가 있는지 확인만 하고 종료 |
쿠키 출처 우선순위는 --cookie(문자열) → --cookie-file(파일) → GUI에서 저장한 쿠키 순입니다.
빌드 (설치기)
실행 OS를 감지하여 flet build로 네이티브 앱을 만들고, 그것을 Velopack 설치기/업데이트 패키지로 포장합니다.
uv run python scripts/build.py- 결과물:
dist/naver-post-crawler-<target>/(앱 번들)과dist/velopack/(Windows는*-Setup.exe·*.nupkg·releases.win.json, macOS는*-Setup.pkg·*.nupkg·releases.osx.json). - 사전 준비: Velopack CLI(
dotnet tool install -g vpk), Windows는 Visual Studio "Desktop development with C++", macOS는 Xcode 명령행 도구. Flutter SDK는flet build가 받아 옵니다. - 빌드 머신은 타깃 OS와 같아야 합니다. Windows 설치기는 Windows에서, macOS 설치기는 macOS에서만 만들 수 있습니다.
- 코드 서명은 기본적으로 하지 않습니다.
NPC_SIGN_*환경변수를 채우면 서명 인자가 붙습니다(scripts/sign.py참고).
배포
uv run python scripts/deploy.py --dry-run # 올릴 에셋 목록만 확인
uv run python scripts/deploy.py # 빌드 + 업로드 (draft로 남습니다)
uv run python scripts/deploy.py --publish # 양쪽 플랫폼이 다 올라간 뒤 공개pyproject.toml의[project].version이 버전 SSoT입니다. 먼저 올려 두지 않으면 배포가 중단됩니다.- 릴리스 노트는 사람이 작성해
dist/velopack/RELEASE_NOTES.md에 두거나--notes로 지정합니다. 첫 플랫폼에서 한 번만 반영되고, 두 번째 플랫폼 실행은 본문을 건드리지 않습니다. - 두 플랫폼 산출물은 같은 태그 하나에 올립니다. 업로드는 기본적으로 draft로 남습니다 — 한쪽만 올라간 상태로 공개하면 다른 OS 사용자는 받을 파일이 없는 릴리스를 보게 되기 때문입니다.
- 배포 순서: (1) 한 OS에서 빌드·업로드 → (2) 다른 OS에서 같은 태그로 업로드 → (3) 마지막에 공개. 릴리스를 만든 커밋이 태그에 담기도록 먼저 main에 머지·푸시한 뒤 배포하십시오.
테스트
uv run pytest # 테스트
uv run ruff check src tests scripts # 린트
uv run ruff format src tests scripts # 포맷주요 문서: 기능 명세 SSoT docs/SPEC.md · 개발 규약 AGENTS.md
- 이 도구는 본인이 접근 가능한 글을 개인적으로 백업하는 용도를 전제로 합니다. 카페의 경우 본인이 가입한, 열람 권한이 있는 글만 대상으로 하십시오.
- 수집한 글의 저작권은 원저작자에게 있습니다. 무단 재배포·상업적 이용에 따른 책임은 사용자에게 있습니다.
- 세션 쿠키(
NID_AUT/NID_SES)는 로그인 자격 증명에 해당하므로 외부에 노출하지 마십시오.
Caution
카페 내부 API 사용과 비공개·등급 제한 영역의 자동 수집은 네이버 이용약관 위반 소지가 있으며, robots.txt 위반이 문제가 된 판례가 있습니다. 과도한 대량 요청은 일시 차단으로 이어질 수 있습니다. 네이버 이용약관과 저작권, 글 작성자의 권리를 존중하여 사용하십시오. 법적 책임은 사용자에게 있습니다.