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

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

노트를 내보내면 링크가 깨지는 이유와 Notion·Apple 메모·Obsidian 내보내기 복구법

노트 내보내기는 폴더 트리와 그 안을 가리키는 텍스트의 묶음입니다. 이름이 바뀌거나 앱 고유의 링크 문법이 밖으로 나오면 모든 포인터를 다시 계산해야 하고, 결과는 몇 가지 숫자로 검증할 수 있습니다.

내보내기에서 링크가 깨지는 세 가지 경로

Notion, Apple 메모, Obsidian 안에서 링크는 데이터베이스 행이나 노트 식별자, 제목을 가리키는 참조이고 앱이 해석해 줍니다. 내보내면 이 참조는 폴더 트리 안의 경로가 되어야 하는데, 순수 Markdown에는 해석기가 없습니다. [이름](경로)는 경로가 그 링크를 담은 노트 기준으로 실제 파일을 가리킬 때만 동작합니다. 깨진 내보내기는 대부분 세 가지 중 하나입니다.

첫째, 링크를 쓴 뒤에 이름이 바뀝니다. Notion은 모든 페이지·폴더·데이터베이스 파일 이름 뒤에 32자리 16진수 ID를 붙이고 링크 경로를 퍼센트 인코딩합니다. 링크 자체는 멀쩡하지만 읽을 수 없고, 정작 없애고 싶은 이름을 가리킵니다. 둘째, 텍스트는 그대로인데 경로만 달라집니다. Apple 메모 내보내기에서는 첨부 링크가 실제 파일이 놓인 곳과 다른 폴더를 가리키는 일이 있습니다. 셋째, 링크 문법 자체가 Markdown이 아닙니다. Obsidian의 [[회의록]]은 제목으로 노트를 찾는 방식이라 다른 뷰어는 해석하지 못합니다.

이 글은 경우마다 작은 샘플로 복구 도구를 실제로 돌려 얻은 변환 전후 값을 보여 주고, 복구가 끝났다고 판단하는 기준으로 마무리합니다.

Notion 내보내기는 이렇게 생겼습니다

Notion의 Markdown & CSV 내보내기는 파일 이름과, 하위 페이지·이미지를 담는 폴더 이름 뒤에 공백과 페이지 ID 32자리를 붙입니다. 페이지 사이 링크는 표준 Markdown 링크이고 경로는 퍼센트 인코딩되어 공백이 %20이 됩니다. 데이터베이스는 CSV로 나오며, 셀에 목록의 페이지 이름이 적힙니다. ID는 이름이 겹치지 않게 하려는 장치인데, 그 때문에 이 폴더를 다른 곳에서 읽거나 재사용하기 어렵습니다.

Workspace Home 11111111111111111111111111111111.md
Workspace Home 11111111111111111111111111111111/Planning Board.png
Projects 22222222222222222222222222222222/Launch Plan 33333333333333333333333333333333.md
Projects 22222222222222222222222222222222/Research 44444444444444444444444444444444.md
Projects 22222222222222222222222222222222/Projects 22222222222222222222222222222222.csv

Workspace Home 1111....md 안의 링크:
[Launch Plan](Projects%2022222222222222222222222222222222/Launch%20Plan%2033333333333333333333333333333333.md)

이름을 정리하는 규칙: 고유성과 안전성

Notion 내보내기 복구기는 폴더를 포함한 모든 경로 구간에서 ID를 지웁니다. 32자리 형태와 8-4-4-4-12 하이픈 형태를 모두 인식합니다. 그다음 어느 파일 시스템에서도 안전하도록 < > : " / \ | ? *와 제어 문자를 공백으로 바꾸고, 연속 공백을 하나로 줄이고, 이름을 120자에서 자릅니다. 정리한 경로가 이미 있으면(대소문자를 구분하지 않고 비교) 다음 파일에 (2), 그다음에 (3)을 붙입니다. 첨부파일은 페이지별 폴더에서 꺼내 하나의 _attachments/ 폴더로 모으며 같은 충돌 규칙을 적용합니다.

아래는 샘플을 도구에 실제로 넣어 얻은 결과입니다. 첫 줄은 특수문자 규칙, 둘째 줄은 충돌 규칙입니다. plan과 Plan은 대소문자만 다른데, Windows와 기본 설정 macOS 볼륨은 둘을 같은 이름으로 보므로 도구도 같은 이름으로 취급합니다.

  • Windows 예약 장치 이름(CON, NUL 등)과 마침표로 끝나는 이름은 이 규칙에서 따로 다루지 않습니다. 제목이 그런 모양일 수 있다면 결과를 직접 확인하세요.
  • 이름을 바꿔도 페이지 본문 속 글자는 바뀌지 않습니다. 본문에서 옛 파일 이름을 문장으로 언급했다면 그대로 남습니다.
Q3: Plan | Budget? aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.md   ->  Q3 Plan Budget.md
Plan bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.md                ->  Plan.md
plan cccccccccccccccccccccccccccccccc.md                ->  plan (2).md
Q3: Plan | Budget? aaaa.../image.png                    ->  _attachments/image.png
Other bbbb.../image.png                                 ->  _attachments/image (2).png

추측하지 않고 링크 대상을 다시 쓰는 방법

이름 변경은 절반입니다. [이름](대상)과 ![설명](대상)마다 도구는 퍼센트 인코딩을 풀고, 그 링크를 담은 노트의 폴더 기준으로 대상을 해석해 아카이브에서 파일을 찾습니다. 그런 다음 새 노트 위치에서 새 파일 위치까지의 상대 경로를 계산해 다시 인코딩합니다. 링크가 가리키는 파일이 다른 폴더에 있으면 ../의 개수도 맞게 들어갑니다. mailto:, data:, #로 시작하는 링크와 일반 웹 링크는 건드리지 않습니다. 내보내기 안에 페이지 ID가 있는 notion.so·notion.site 링크는 로컬 상대 링크로 바뀝니다.

매칭은 엄격한 기준에서 느슨한 기준 순서입니다. 대상에 들어 있는 ID가 먼저, 다음이 해석된 정확한 경로, 마지막이 파일 이름만 비교하는 방식이고, 이름 비교는 아카이브 전체에서 그 이름의 파일이 하나뿐일 때만 받아들입니다. 이름이 같은 파일이 둘이면 하나를 고르지 않고 해결 못 한 링크로 보고합니다. 복구 단계라면 마땅히 그래야 합니다. 아래는 샘플 내보내기에서 실제로 나온 값입니다.

Workspace Home.md 안에서
  Projects%2022222222222222222222222222222222/Launch%20Plan%2033333333333333333333333333333333.md
    ->  Projects/Launch%20Plan.md
  Workspace%20Home%2011111111111111111111111111111111/Planning%20Board.png
    ->  _attachments/Planning%20Board.png
Projects/Research.md 안에서
  Research%2044444444444444444444444444444444/Research%20Chart.png
    ->  ../_attachments/Research%20Chart.png
Archive/Launch Plan.md 안에서
  ..%2FProjects%2022...22%2FLaunch%20Plan%2033...33.md
    ->  ../Projects/Launch%20Plan.md

데이터베이스 CSV와 페이지 이름이 든 셀

Notion 데이터베이스 내보내기의 관계·파일 열에는 파일 이름, 한 셀의 여러 참조, 또는 Title (https://www.notion.so/...-<32hex>) 형태의 페이지 URL이 들어갈 수 있습니다. 복구기는 따옴표로 감싼 CSV 셀을 정확히 파싱하고 .docx와 .zip을 포함해 확장자로 끝나는 참조와 제목·URL 참조를 고쳐 씁니다. 일치하는 내보낸 파일이 없으면 원문을 유지하고 보고합니다.

샘플의 Related pages 셀은 조각마다 복구되고, ZIP에 없는 페이지를 가리키는 값은 원래 모습 그대로 두고 해결 못 한 항목으로 기록합니다.

before   Name,Status,Page,Related pages
         Research,Review,Research 4444....md,"Research 4444....md, Gone 9999....md"

after    Name,Status,Page,Related pages
         Research,Review,Research.md,"Research.md, Gone 9999....md"

Apple 메모: 엉뚱한 폴더를 가리키는 첨부 링크

Apple 메모에는 기본 Markdown 내보내기가 없어서 ZIP은 서드파티 내보내기 도구에서 나오고, 도구마다 첨부파일을 두는 위치가 다릅니다. 흔한 증상은 노트가 자기 폴더 기준으로 attachments/Planning Board.png를 가리키는데 실제 파일은 아카이브 맨 위의 공용 폴더에 있는 경우입니다. Apple 메모 내보내기 복구기는 확장자가 명시된 마크다운 링크·이미지와 ![[file.png|300]], [[file.pdf]] 같은 Obsidian 형식을 인식합니다. 확장자가 없거나 .md인 노트 참조는 건드리지 않습니다. 인식한 대상을 먼저 정확한 경로로, 다음에 파일 이름으로 찾고, 대소문자를 구분하지 않으며 결과가 하나일 때만 받아들여 링크를 _attachments/ 아래 복사본으로 고쳐 씁니다.

Notion 도구와 다른 점이 둘 있습니다. 이 복구기는 첨부 링크만 손대고 다른 노트로 가는 링크는 쓰인 그대로 두며 검사하지도 않으므로, 노트 사이 링크는 직접 확인해야 합니다. 또 일부 내보내기에서 보이는, 바로 앞 문단과 글자 하나까지 같은 문단은 제거하며 코드 블록과 구분선은 건드리지 않습니다. 아래 수치는 내장 샘플에서 나왔습니다.

Personal/Project ideas.md
  ![Planning board](attachments/Planning Board.png)
    ->  ![Planning board](../_attachments/Planning%20Board.png)
Work/Meeting notes.md
  [Quarterly brief](Quarterly Brief.pdf)
    ->  [Quarterly brief](../_attachments/Quarterly%20Brief.pdf)
  [Budget sheet](Budget.xlsx)
    ->  해결 못 함 (ZIP에 해당 파일 없음)

보고서: 복구한 링크 2, 제거한 중복 문단 2, 복사한 첨부 2, 누락 1

Obsidian: 위키링크와 Markdown 링크

Obsidian은 [[김민수]]를 볼트 어디에선가 그 제목의 노트를 찾아 해석하고, ![[diagram.png|300]]은 지정한 너비로 이미지를 삽입합니다. 둘 다 표준 Markdown이 아니어서 GitHub, 정적 사이트 생성기, Notion에서는 대괄호가 그대로 보입니다. Obsidian이 Markdown 링크로 쓰게 설정할 수는 있지만 이미 쓴 노트가 바뀌지는 않습니다.

Obsidian Markdown 내보내기 도구는 지원하는 위키링크와 이미지 삽입을 상대 경로 Markdown 링크로 바꿉니다. 이름만 쓴 링크는 일치하는 노트가 정확히 하나일 때만 해석하고, 추측하지 않는 것은 모두 보고서에 올립니다. 샘플 볼트에서 나온 결과입니다.

  • 볼트를 감싼 폴더가 아니라 볼트의 내용물을 압축하세요. 그래야 Guides/Plan 같은 경로가 올바른 위치에서 시작합니다.
  • Dataview 블록과 Templater 태그는 그대로 둡니다. Obsidian 콜아웃 표시 줄은 목록에 올리지만 인용 본문의 지원 위키링크는 변환합니다.
볼트에 쓴 형태결과이유
[[Guides/Plan|launch plan]][launch plan](Guides/Plan.md)경로와 별칭이 라벨과 상대 경로가 됨
Guides/Plan.md 안의 [[Alex Kim]][Alex Kim](../People/Alex%20Kim.md)이름이 유일하여 노트 폴더 기준 경로를 계산
![[images/diagram.png]]![diagram.png](images/diagram.png)삽입이 이미지 링크가 되고 이미지가 포함됨
![[images/diagram.png|300]]![diagram.png](../images/diagram.png)링크는 유지, 너비는 버리고 보고
[[Notes]]변경 없음모호함: Notes.md와 Archive/Notes.md
[[Reading list#Books]]변경 없음제목 앵커는 열어 보는 도구마다 다름
[[Weekly review]]변경 없음ZIP에 그런 노트가 없음

대소문자, 금지 문자, 유니코드 정규화: 다른 시스템에서 깨지는 이유

만든 컴퓨터에서 잘 되던 폴더가 다른 곳에서 깨지는 일이 있습니다. Windows는 이름에 < > : " / \ | ? *를 허용하지 않고 Plan.md와 plan.md를 한 파일로 봅니다. 기본 설정 macOS 볼륨도 대소문자를 구분하지 않습니다. 반면 Linux 서버와 대부분의 CI 환경의 Git은 구분하므로, Plan.md 파일을 [Plan](plan.md)로 링크하면 노트북에서는 열리고 배포 후에는 404가 납니다. 링크는 파일 이름의 대소문자를 그대로 쓰고, 대소문자만 다른 이름은 만들지 않는 것이 안전합니다.

유니코드는 더 조용한 함정입니다. 한글 음절은 완성형 하나(NFC)로도, 자모로 풀어서(NFD)도 저장할 수 있는데, 겉모습은 같아도 바이트는 다릅니다. macOS는 오랫동안 풀어쓴 이름을 만들어 왔고 대부분의 편집기는 완성형을 입력합니다. Apple 메모 내보내기 복구기는 링크와 ZIP 항목 경로를 모두 NFC로 정규화한 뒤 비교하므로, 완성형 링크가 풀어쓴 파일 이름도 찾아내고 첨부는 NFC 이름으로 저장됩니다. 다른 도구에서 눈으로 보기에 맞는 한글·악센트 이름이 해결되지 않으면 정규화부터 의심하세요.

알아 둘 함정이 하나 더 있습니다. 이름에 ?나 #가 들어 있으면 링크에서는 %3F, %23으로 나타납니다. 먼저 디코딩한 뒤에 쿼리나 프래그먼트를 잘라 내면 이름이 중간에서 잘리므로 순서가 중요합니다. 아직 인코딩된 대상에서 쿼리·프래그먼트를 먼저 떼고 그다음 경로를 디코딩해야 합니다. Notion 내보내기 복구기는 이 순서로 처리해 Budget?, Page #3 같은 이름도 해결합니다. 다만 손으로 쓴 링크에 인코딩하지 않은 #가 있으면 프래그먼트의 시작으로 읽힙니다.

복구한 폴더를 검증하는 방법

아무것도 허공을 가리키지 않고 남는 파일도 없다는 것을 증명할 수 있을 때 복구가 끝난 것입니다. 원본 ZIP이 아니라 복사본에서 아래를 확인하세요.

  • 보고서를 읽습니다. 도구는 해결하지 못한 링크를 모두 나열합니다. 하나씩 원본을 열어 대상이 내보내기에서 빠졌는지, 이름이 모호한지 판단하세요.
  • 깨진 링크를 직접 셉니다. 결과물에서 ](대상)과 [[대상]]을 전부 뽑아, 노트 기준으로 파일이 존재하는지 확인하세요. 개수는 보고서의 수치와 같아야 합니다.
  • _attachments/에서 예상치 못한 파일을 확인합니다. 복구기는 고친 링크가 참조하는 첨부만 복사하므로 도구 출력에는 정상적인 고아 파일이 없어야 합니다. 고아가 있다면 이후 수작업이나 다른 내보내기 단계를 확인하세요.
  • 남은 흔적을 검색합니다. 이름과 본문에서 정규식 [0-9a-f]{32}로 놓친 ID를, [[로 변환되지 않은 위키링크를 찾습니다.
  • 대소문자와 충돌을 확인합니다. (2)로 끝나는 이름과 대소문자만 다른 쌍을 찾아봅니다.
  • 하위 페이지, 이미지, CSV 데이터베이스, 공백이 든 제목, 한글 제목이 모두 들어간 표본을 옮겨 갈 앱에서 열어 직접 클릭해 봅니다.
  • 작업이 끝날 때까지 원본 ZIP을 보관합니다.

직접 해보기