fibonacci (218.♡.203.211)
2026년 2월 17일 AM 01:14
에버노트에 10년치 노트가 쌓여있었습니다.
노트 수가 1,640개쯤 되더라고요.
계속 돈을 내고 있던 이유가 검색이었는데, 구글 드라이브에 제미나이가 붙으면서 상황이 바뀌었습니다.
드라이브 폴더에 문서 몇 개 모아놓고 "이거 기반으로 새 계약서 만들어줘" 하면, 관계자 정보까지 다 채워서 문서를 뽑아주거든요.
이걸 보고 에버노트 탈출을 결심했는데, 데이터를 옮기는 게 문제였습니다.
에버노트 공식 내보내기(ENEX)가 있긴 한데 함정이 많습니다.
PC 앱에서만 가능하고, 한 번에 100개까지만 선택됩니다.
1,640개면 17번 반복인데, 진짜 문제는 내보내기 완료라고 떠도 실제로 빠지는 노트가 있다는 겁니다.
어떤 노트가 빠졌는지도 안 알려줍니다.

대안으로 HTML 내보내기가 있습니다.
메뉴에 좀 숨어있어서 모르는 분이 많은데, 노트 하나당 폴더 하나로 나오고, 1,640개 전부 깨짐 없이 됩니다.
문제는 이 HTML을 구글 드라이브에 올리면 HTML 파일 그대로 올라간다는 겁니다.
구글 독스로 안 바뀌니까 편집도 안 되고 제미나이가 내용을 못 읽습니다.
기존 서비스(cloudHQ, MultCloud)도 전부 월 구독이고, 구글 독스 변환은 미지원이었습니다.
그래서 바이브 코딩으로 직접 만들기로 했습니다.
Claude한테 요구사항을 던지고 코드를 뽑아내는 식으로 시작했는데, 만들면서 예상 못한 문제가 줄줄이 나왔습니다.
오디오 확장자가 사라지는 문제
에버노트가 HTML 내보내기 할 때 오디오 파일 확장자를 날려버립니다.
`.m4a` 파일이 확장자 없이 나와서 드라이브에 올려도 재생이 안 됩니다.
파일 앞부분의 매직바이트를 읽어서 포맷을 판별하는 로직을 넣었습니다.
ftyp → .m4a
ID3 / 0xff 0xfb → .mp3
RIFF → .wav
OggS → .ogg
단순한 패턴 매칭인데, 안 하면 오디오 노트가 전부 먹통입니다.
HTML → 구글 독스 변환
Drive API에 변환 플래그를 달아서 올리면 구글 독스로 되긴 하는데, 에버노트 HTML 안에 오디오 태그 같은 게 섞여 있어서 그 부분을 확인하고 처리해야 했습니다.
인라인 이미지도 따로 업로드 후 문서에 삽입하는 파이프라인을 만들었고요.
이게 전체 작업량의 절반 이상이었습니다.
중단/재개
1,640개 올리는 데 Drive API 할당량 때문에 4~5 시간 걸립니다.
맥이 잠들면 처음부터 다시는 말이 안 돼서, `progress.json`에 노트별 업로드 상태를 기록하고 재실행 시 이어서 올라가게 했습니다.
스택은 Python + PyObjC(macOS 네이티브 UI) + lxml + google-api-python-client 입니다.
바이브 코딩 소감을 좀 적자면, 구조 잡고 기본 로직 뽑는 데는 정말 빠릅니다.
근데 에지 케이스 잡는 건 결국 사람이 해야 하더라고요.
오디오 태그 처리 같은 건 직접 확인해보면서 하나씩 잡아갔습니다.
체감상 전체 코드의 70%는 AI가 짜고, 나머지 30%는 제가 디버깅하면서 수정하는 패턴이었습니다.
결과물입니다.


1,640개 노트가 `날짜_제목` 폴더로 정리됐고, 구글 독스에서 바로 편집됩니다.
원래 목적이었던 제미나이 연동도 잘 됩니다.
옮긴 문서들을 기반으로 새 문서를 생성하는 것도 가능해졌습니다.
아쉬운 점도 있습니다.
macOS에서만 돌아갑니다. PyObjC 기반이라 윈도우는 안 됩니다.
복잡한 표가 들어간 노트는 구글 독스 변환 시 레이아웃이 좀 무너집니다.
AMR 포맷 오디오는 확장자를 복원해도 구글 드라이브에서 재생이 안 됩니다. 구글이 AMR을 지원하지 않거든요.
원래 제 노트 옮기려고 만든 건데, Gumroad에 올려서 판매도 해보고 있습니다.
에버노트 탈출 고민하시는 분이나, 바이브코딩 관련 궁금한 점 있으시면 댓글 남겨주세요.
댓글 (0)
- 아직 댓글이 없습니다. 첫 댓글을 작성해보세요!
댓글을 작성하려면 이 필요합니다.