마인드맵 독서 노트를 옵시디언 마크다운으로 변환하기

연결노트

타자기와 책들

마인드맵을 옵시디언 마크다운으로 변경하기

마인드맵 형식으로 정리하던 독서 노트를 옵시디언 마크다운 형식으로 변경하고자 했습니다. 마인드맵은 직관적이고 마음에 들었지만, 책이 많아지면서 원하는 책을 찾는 데 어려움을 겪었습니다. 그래서 이번에 옵시디언 형식으로 변경하면서 마인드맵의 구조를 마크다운으로 변환하기로 결정했습니다.

마인드맵 형식의 JSON 구조

먼저, 마인드맵의 JSON 데이터 구조는 다음과 같습니다:

{
  "name": "독서지도",
  "children": [
    {
      "name": "고전소설",
      "left": true,
      "children": [
        {
          "name": "셰익스피어"
        },
        {
          "name": "알렉상드르 뒤마"
        },
        {
          "name": "헤르만 헤세",
          "children": [
            {
              "name": "데미안",
              "children": [
                {
                  "name": "니체",
                  "children": [
                    {
                      "name": "선악의 저편"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

이 JSON 구조를 바탕으로 마크다운을 생성하려고 합니다.

마크다운 자동 생성

마크다운 파일을 자동으로 생성하기 위해 파이썬 코드를 작성했습니다. 이 코드는 마인드맵에서 JSON을 받아 옵시디언에서 활용할 수 있는 마크다운 파일들을 생성합니다. 아래는 그 코드입니다:

from datetime import datetime
import json
import os


def create_markdown_files(data):
    # 현재 시간 가져오기
    current_time = datetime.now().strftime("%Y-%m-%d %H:%M")

    # 출력 디렉토리 생성
    os.makedirs("output", exist_ok=True)

    def clean_filename(filename):
        # 파일명에서 사용할 수 없는 문자 제거
        invalid_chars = '<>:"/\\|?*'
        for char in invalid_chars:
            filename = filename.replace(char, '')
        return filename

    def create_single_file(node, parent_path=""):
        # 파일명 생성 및 정리
        filename = clean_filename(node["name"].strip())

        # 메타데이터 생성
        metadata = f"""---
created: {current_time}
updated: {current_time}
date: {current_time[:10]}
tags:
 - 유형/독서노트
 - 독서/진도/미시작
aliases:
links:
 - "[[독서]]" 
title: "{node["name"]}"
weight:
description:
labels:
author:
cover:
---
"""
        # 자식 노드들의 링크 추가
        links = ""
        if "children" in node:
            links = "\n## 연결 문서\n\n"
            for child in node["children"]:
                child_name = child["name"].strip()
                links += f"- [[{child_name}]]\n"

        # 전체 콘텐츠 생성
        content = metadata + links

        # 파일 저장
        filepath = os.path.join("output", f"{filename}.md")
        with open(filepath, "w", encoding="utf-8") as f:
            f.write(content)

        # 재귀적으로 자식 노드들의 파일 생성
        if "children" in node:
            for child in node["children"]:
                create_single_file(child)

    # JSON 데이터로부터 마크다운 파일 생성 시작
    create_single_file(data)


# JSON 파일 읽기
with open("input.json", "r", encoding="utf-8") as f:
    data = json.load(f)

# 마크다운 파일 생성
create_markdown_files(data)
print("마크다운 파일이 output 폴더에 생성되었습니다.")

마크다운 예시

이 코드를 실행하면 마크다운 파일이 자동으로 생성됩니다. 예를 들어, 데미안.md 파일은 아래와 같이 생성됩니다:

---
created: 2025-01-19 18:19
updated: 2025-01-19 18:19
date: 2025-01-19
tags:
 - 유형/독서노트
 - 독서/진도/미시작
aliases:
links:
 - "[[독서]]" 
title: "데미안"
weight:
description:
labels:
author:
cover:
---

## 연결 문서

- [[니체]]

마무리

이렇게 기존의 마인드맵을 옵시디언 마크다운 형식으로 변경하여, 책에 대한 정보와 연결을 보다 체계적으로 관리할 수 있게 되었습니다. 마인드맵의 직관적인 구조를 유지하면서도, 옵시디언에서 활용할 수 있는 형태로 변환하여 데이터가 많아져도 쉽게 접근할 수 있게 되었습니다.

참조

댓글 쓰기