MYMONDAY.ai
서비스스튜디오도구데이터·포맷73CSS 생성기19색상·이미지10인코딩·보안10웹·SEO11개발·데브옵스10파일·내보내기18계산기6가이드

8분 읽기 · 마지막 업데이트

Google Keep 메모를 Markdown으로 옮기는 법 (Takeout, 체크리스트, 라벨, 첨부파일)

Keep에는 Markdown 내보내기가 없지만 Google Takeout은 모든 메모를 JSON으로 내줍니다. 그 데이터에 무엇이 들어 있고 각 필드가 Markdown 어디로 가는지, 빠진 것은 없는지 확인하는 방법을 설명합니다.

Keep 메모에 변환 단계가 필요한 이유

Google Keep은 제목, 일반 텍스트 또는 체크리스트, 색깔 카드, 라벨, 고정·보관 상태, 이미지와 음성 녹음을 자체 모델로 저장합니다. Markdown으로 내보내는 메뉴는 없고, 완전한 데이터를 꺼낼 수 있는 방법은 Keep 데이터를 ZIP으로 묶어 주는 Google Takeout뿐입니다. Obsidian이나 Logseq 같은 보관함형 노트 앱으로 옮기거나, 계정에 의존하지 않는 텍스트 사본을 갖고 싶을 때 이 방법을 씁니다.

문제는 Takeout 결과를 그런 앱이 바로 열 수 없다는 점입니다. 메모 하나당 JSON 파일 하나, 같은 내용의 HTML 파일, 그리고 따로 떨어진 첨부 파일이 나옵니다. Markdown으로 옮긴다는 것은 JSON 필드를 읽고, 각 필드를 텍스트 파일의 어디에 둘지 정하고, 메모와 이미지 사이의 링크를 유지하는 일입니다.

올바른 Takeout 내보내기 받기

Google Takeout에서 모든 선택을 해제하고 Keep만 체크한 뒤 ZIP 형식으로 내보내기를 만드세요. 제품 하나만 내보내야 아카이브가 작아집니다. 브라우저에서 도는 변환기는 파일을 메모리에 올려야 하기 때문에 중요합니다. 여기서 설명하는 변환기는 압축 파일 25MiB 이하, 항목 5,000개 이하, 풀었을 때 합계 100MiB 이하의 ZIP 하나를 받고, 처리가 60초를 넘으면 중단합니다. 압축폭탄을 막기 위한 안전 한도이며 특정 기기에서의 동작을 보장하는 수치가 아닙니다.

기록이 이보다 크다면 Takeout에서 파일 크기를 작게 골라 여러 조각으로 나눠 받아 하나씩 변환하거나, 오래된 메모를 다른 계정으로 잠시 옮기세요. 원본 ZIP은 그대로 보관합니다. 아래 작업은 모두 이 원본에서 다시 실행할 수 있습니다.

Takeout 폴더에는 무엇이 들어 있나

Keep 폴더 안에는 메모마다 구조화된 데이터가 든 .json 파일과 같은 메모를 읽기 좋게 보여 주는 .html 파일이 나란히 있습니다. 이미지와 오디오 같은 첨부는 그 옆에 일반 파일로 놓이고, 메모의 JSON이 파일 이름으로 가리킵니다. 기준이 되는 원본은 JSON이며, 변환기는 JSON이 있는 메모의 HTML을 중복 표현으로 취급합니다. JSON 짝이 없는 HTML은 변환할 수 없고 미지원으로 보고됩니다. HTML을 긁어서 변환하면 손실이 크기 때문입니다.

아래는 변환기가 메모 JSON에서 읽는 필드입니다. 이름은 대소문자를 구분하고, 두 타임스탬프는 초나 밀리초가 아니라 마이크로초 단위의 Unix 시간입니다.

JSON 필드의미Markdown에서의 위치
title메모 제목front matter의 title과 # 제목
textContent일반 텍스트 본문제목 아래 문단
listContenttext와 isChecked를 가진 체크리스트 항목작업 목록 줄
labelsname을 가진 객체의 목록front matter의 labels 또는 tags
attachmentsfilePath와 mimetype을 가진 객체상대 링크, 파일은 assets 폴더로 복사
createdTimestampUsec, userEditedTimestampUsec1970-01-01 UTC 이후 마이크로초원본 값과 created·updated ISO 날짜
isPinned, isArchived, isTrashed불리언front matter 플래그
colorYELLOW 같은 카드 색 이름front matter의 color

변환 결과는 정확히 이렇게 나옵니다

추측하지 않도록 작은 메모 하나의 실제 출력을 보여 드립니다. 입력은 제목이 Groceries이고 체크리스트 항목 둘, 라벨 둘이 있고, 고정됐으며 노란색이고 2025-03-02 08:15:30 UTC에 만든 Keep 메모입니다. 변환기의 실제 코드를 테스트 ZIP에 돌려 얻은 결과입니다.

세 가지를 눈여겨보세요. 첫째, 타임스탬프는 두 번 남습니다. 반올림 없는 정확한 마이크로초 원본 값이 따옴표 붙은 문자열로, 그리고 소수점 6자리까지 쓴 읽기 쉬운 ISO 날짜로 들어갑니다. 둘째, 체크리스트는 Markdown 작업 목록이 되고 체크된 항목은 [x]로 표시됩니다. 셋째, 라벨은 단순한 목록이라 그 키를 모르는 노트 앱도 속성으로 보여 줍니다.

---
title: Groceries
labels:
  - Home
  - Errands & misc
isPinned: true
isArchived: false
isTrashed: false
color: YELLOW
createdTimestampUsec: "1740903330000000"
created: 2025-03-02T08:15:30.000000Z
userEditedTimestampUsec: "1741107672000000"
updated: 2025-03-04T17:01:12.000000Z
---

# Groceries

- [x] Oat milk
- [ ] Coffee beans

체크리스트, 본문, 이스케이프

Keep 체크리스트는 Markdown 작업 목록에 자연스럽게 대응합니다. 열린 항목은 - [ ], 체크된 항목은 - [x]입니다. 변환기는 이를 평탄화로 보고합니다. Keep의 하위 구조(들여쓴 자식 항목, 체크한 항목이 카드 아래로 내려가는 동작)는 유지되지 않기 때문입니다. 항목은 JSON에 들어 있는 순서 그대로입니다.

Keep의 본문은 일반 텍스트일 뿐인데 Markdown에서는 일부 문자에 의미가 있습니다. 메모에 # Agenda, 1. Budget, - keep the *launch* date로 시작하는 줄이 있으면 단순한 변환기는 이를 제목, 번호 목록, 글머리표, 기울임으로 바꿔 버립니다. 이 변환기는 의미가 바뀌는 문자만 골라 이스케이프하고 snake_case_names 같은 이름은 그대로 둡니다. 위의 세 줄은 \# Agenda, 1\. Budget, \- keep the \*launch\* date로 나오고 렌더링하면 입력한 글자 그대로 보입니다.

가장 큰 한계는 서식 있는 텍스트입니다. 일반 textContent 없이 HTML 형태의 내용만 가진 메모는 추측하지 않습니다. 그 메모는 Markdown을 만들지 않고 서식이 보존되지 않는다는 사유와 함께 미지원으로 보고서에 기록하며, 원래 값은 복구할 수 있도록 보고서에 보관합니다.

라벨: front matter, 태그, 폴더

Keep 라벨은 단순한 평면 태그입니다. 옮기는 방법은 세 가지가 합리적이고, 어떤 것이 맞는지는 나중에 어떻게 검색하느냐에 달렸습니다. labels 목록으로 두면 원래 의미가 유지되고 front matter를 읽는 모든 도구에서 동작합니다. tags 목록으로 바꾸면 Obsidian과 Logseq가 실제 태그로 취급해 태그 패널과 쿼리를 바로 쓸 수 있습니다. 라벨마다 폴더를 만드는 세 번째 방법은 라벨이 여러 개인 메모에서 정보가 사라지므로, 변환 중보다 나중에 스크립트나 플러그인으로 하는 편이 낫습니다.

라벨을 태그로 바꿀 때 변환기는 앞의 #을 지우고, 공백이나 &, ., , 같은 문장 부호처럼 Obsidian 태그에 쓸 수 없는 문자가 이어진 부분을 하이픈 하나로 바꾼 뒤 양 끝의 하이픈을 지웁니다. 모든 문자의 글자, 숫자, _, -, /는 그대로 남으므로 Errands & misc는 Errands-misc, 회의 메모는 회의-메모가 됩니다. 문장 부호만 다른 두 라벨이 같은 태그로 합쳐질 수 있으니, 그런 구분에 기대고 있었다면 변환 뒤에 확인하세요. Work/Clients 같은 라벨은 슬래시가 유지되고 Obsidian은 이를 중첩 태그로 읽습니다.

  • 충실한 기록이 목적이고 나중에 재구성할 계획이면 labels로 두세요.
  • 보관함의 태그 검색을 바로 쓸 거라면 tags를 고르세요.
  • 내보내기 전에 Keep에서 라벨을 짧은 한 단어로 정리하면 예상 밖의 결과 없이 변환됩니다.

파일명: 충돌과 허용되지 않는 문자

Keep에서는 같은 제목의 메모를 얼마든지 만들 수 있고, 제목에는 파일 시스템이 금지하는 문자도 들어갈 수 있습니다. 그래서 변환기는 제목을 안전하고 유일한 파일명으로 바꿔야 합니다. 이 변환기는 < > : " / \ | ? *와 제어 문자를 밑줄로 바꾸고, 끝의 점과 공백을 지우고, CON·NUL 같은 Windows 예약어 앞에 밑줄을 붙이고, 길이를 제한합니다. Windows와 macOS 파일 시스템은 Todo와 todo를 같은 파일로 보므로 이름 비교는 대소문자와 유니코드 정규화를 무시하고 합니다.

그래서 Plan: A/B? 같은 제목은 Plan_ A_B_.md가 되지만, 실제 제목은 front matter와 제목 줄에 그대로 남습니다. 두 메모의 이름이 충돌하면 할당 순서가 늦은 쪽이 --2 접미사를 받습니다. 주의할 점은 이 순서가 생성일이 아니라 정렬된 원본 경로를 따른다는 것입니다. Todo라는 이름의 메모 두 개를 Todo(1).json과 Todo.json으로 넣은 테스트에서 Todo(1).json이 먼저 처리되어 Todo.md를 받았고 Todo.json은 Todo--2.md가 되었습니다. 이름이 바뀐 항목은 보고서에 FILENAME_CHANGED로 표시되므로 무엇이 바뀌었는지 볼 수 있습니다.

안정적이고 정렬 가능한 이름을 원한다면 날짜+제목 옵션을 고르세요. UTC 기준 생성일이 앞에 붙어 두 Todo 메모가 2024-02-05 Todo.md와 2024-03-05 Todo.md가 되고, 날짜와 제목이 모두 같은 메모가 아니면 접미사가 필요 없습니다.

첨부파일 링크 유지하기

메모의 attachments 목록의 각 항목에는 filePath가 있습니다. 변환기는 같은 Keep 폴더 또는 정확히 그 경로에서 파일을 찾고, 대소문자까지 정확히 맞아야 합니다. 일치하는 파일이 정확히 하나면 assets 폴더로 복사하고, 경로 요소마다 URL 인코딩을 거친 [wb.png](../assets/wb.png) 같은 상대 링크를 메모에 씁니다. 하나도 없거나 여럿이거나 경로가 안전하지 않으면(절대 경로, .. 포함, 역슬래시 사용) 추측하지 않습니다. 메모에는 파일 이름이 일반 텍스트로 남고, 보고서에 MISSING_ATTACHMENT, AMBIGUOUS_ATTACHMENT, UNSAFE_ATTACHMENT 중 하나가 기록됩니다.

이 링크는 이미지 임베드가 아니라 일반 Markdown 링크라서 파일은 열리지만 본문에 이미지가 바로 보이지는 않습니다. Obsidian에서 이미지를 본문에 표시하고 싶다면 가져온 뒤 [이름](../assets/를 찾아 바꾸기로 임베드로 고치면 됩니다. 어떤 메모도 참조하지 않는 첨부 파일은 제외되어 미참조 자산으로 표시됩니다. 이름이 같은 첨부가 둘일 때처럼 이름이 바뀐 사본은 --2 같은 접미사와 같은 FILENAME_CHANGED 표시가 붙습니다.

가져온 뒤 검증하기

짧은 검수까지 마쳐야 변환이 끝났다고 볼 수 있습니다. 도구는 ZIP의 모든 파일에 항목 하나씩 담은 preservation-report.json을 씁니다. 항목에는 결과(변환, 복사, 중복 표현, 제외, 미지원, 실패), 사유 코드, 그리고 각 필드가 보존·변환·생략·미지원 중 무엇이었는지 알려 주는 필드별 포인터가 들어 있습니다. 이해하지 못한 필드의 값도 보관하므로 조용히 버려지는 것은 없습니다. 위 표에 없는 필드, 예컨대 링크 주석 같은 것은 UNSUPPORTED_FIELD로 나타납니다.

경고가 없고 실패나 미지원도 없을 때만 전체 상태가 complete입니다. 그렇지 않으면 partial이고, 흔한 일이며 실패가 아닙니다. Keep에서 무엇이든 지우기 전에 아래 목록을 확인하세요.

  • 변환된 메모 수를 기대한 개수와 비교하세요. 보관·삭제된 메모도 변환되어 front matter에 플래그로 남습니다.
  • 체크리스트, 특수문자가 든 메모, 라벨이 있는 메모, 이미지가 있는 메모를 하나씩 열어 Keep과 비교하세요.
  • 보관함에서 isTrashed: true를 필터링해 그 메모를 지울지 정하세요. Keep은 휴지통을 정해진 주기로 비웠을 것입니다.
  • 보고서의 모든 경고 코드를 읽고, 미지원이나 실패로 표시된 파일은 Keep의 원본 메모를 남겨 두세요.
  • 첨부 링크 서너 개를 눌러 올바른 파일이 열리는지 확인하세요. 이름이 바뀐 경우는 특히 중요합니다.
  • 원본 Takeout ZIP과 보고서를 백업에 함께 두세요. 보고서에도 메모 텍스트가 들어 있으니 비공개로 다루세요.

직접 해보기