오픈 소스 마이그레이션 도구
요약
본 글은 기존 마이그레이션 도구의 한계를 지적하며, 오픈 소스 AI 지원 CMS 마이그레이션 툴킷 'migrateme.tech'를 소개합니다. 이 툴킷은 특정 플랫폼을 떠나는 것이 아니라, 어떤 두 플랫폼 사이의 경로 자체에 초점을 맞춥니다. 표준화된 매니페스트(canonical manifest)를 중심으로 커넥터-매퍼-렌더링 구조로 작동하여 다양한 CMS 간 이동을 지원합니다.
핵심 포인트
- 'migrateme.tech'는 특정 플랫폼 이탈이 아닌, 두 시스템 사이의 경로 자체에 집중합니다.
- 표준 매니페스트(canonical manifest)를 중심으로 커넥터와 목적지 렌더링 엔진으로 구성됩니다.
- 드라이 런 및 제로-쓰기 기능을 통해 실제 데이터 쓰기 없이 위험 보고서를 제공하여 안전성을 높였습니다.
이 글은 Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle에 제출하는 글입니다.
제가 만든 것

제가 아는 모든 WordPress 프리랜서들은 마이그레이션 경험담을 가지고 있으며, 그 누구도 만족하지 못합니다. 클라이언트가 기존 호스팅 업체에서 떠나고 싶어 하거나, 아니면 WordPress 자체를 완전히 벗어나고 싶어 합니다. 그리고 누군가는 10년간의 포스트, 페이지, 분류(taxonomies), 댓글, 미디어 등을 아무것도 잃지 않고 새로운 시스템으로 옮겨야 합니다. 기존 도구들은 내보내기 버튼과 가져오기 플러그인, 그리고 희망에 의존합니다. 이 작업은 청구 가능한 일이며, 고통스럽고, 한 번의 잘못된 실행만으로도 매우 긴 주말을 보낼 수 있게 만듭니다.
그래서 저는 호스팅 업계에서 10년 동안 사람들이 필요하다고 지켜본 도구를 만들었습니다: migrateme.tech입니다. 이것은 오픈 소스 AI 지원 CMS 마이그레이션 툴킷이며, 그 정의적인 특징은 '절제'에 있습니다. 이것은 WordPress를 떠나는 도구가 아닙니다. 그것은 어떤 두 플랫폼 사이의 경로이며, 어느 방향으로든 가능합니다. 그리고 WordPress에서 Markdown으로 가는 것은 단순히 처음 출시된 경로일 뿐입니다. 이는 WXR이 공개되고 문서화된 내보내기 형식이고, 그 고통을 제가 가장 잘 알고 있기 때문에 선택한 것입니다. 이 엔진은 표준화된 매니페스트(canonical manifest)를 중심으로 구축되었습니다: 커넥터가 소스를 매니페스트로 변환하고, 매퍼가 매니페스트에 대해 작업하며, 목적지 시스템이 이를 렌더링합니다. 커넥터와 목적지를 추가하면 경로는 존재하게 됩니다 — Lovable에서 WordPress로, Joomla에서 WordPress로, WordPress에서 Drupal로, 폐쇄형 SaaS를 오픈 소스로. 이 예시들에서 WordPress가 양쪽에 나타나는 것은 의도적입니다: 이곳에서는 소스이고 로드맵 상의 목적지이기 때문입니다. 왜냐하면 목표는 결코 플랫폼을 떠나는 것이 아니었기 때문입니다. 목표는 '이동' 그 자체였습니다.
첫 번째 경로는 WordPress를 (표준 WXR 내보내기를 통해) Markdown/MDX로 마이그레이션합니다. 하지만 단 하나의 파일을 작성하기 전에, 대부분의 마이그레이션 도구들이 건너뛰는 세 가지 일을 수행합니다:
작동 과정을 보여줍니다. 드라이 런(dry run)은 내보낸 데이터를 읽고 그 안에 있는 모든 것의 표준 매니페스트를 구축하며, 모든 필드를 매핑하고, 메모리상에서 출력을 렌더링한 후, 아무것도 쓰지 않습니다. 대신 위험 보고서가 제공됩니다: 해결되지 않은 필드 매핑, 지원되지 않는 필드, 누락된 에셋, 유효성 검사 우려 사항 등입니다. 제로-쓰기(zero-writes) 속성은 약속이 아니라 테스트를 통해 보장됩니다.
허가를 요청합니다. 모든 표면은 닫힌 방식으로 실패합니다(fails closed). CLI의 migrate 명령어는 --approve 없이 실행을 거부합니다. MCP 서버의 execute_migration 도구는 호출자가 approved: true를 전달하지 않으면 작동을 거부합니다. 웹 흐름은 승인 제어(approval control) 없이 POST 요청이 오면 HTTP 400을 반환합니다. 승인되지 않은 실행은 아무것도 쓰지 않고 상태를 영속시키지 않습니다. 이 역시 세 가지 표면 모두에서 테스트되었습니다.
충돌에 대비합니다. 승인된 실행은 디스크 상의 상태로 체크포인트됩니다. 중간에 하나가 종료되더라도 다시 시작하면 멈춘 지점부터 재개되며, 중단되지 않은 실행과 동일한 출력을 생성합니다. 재실행 시 완료된 항목은 건너뜁니다. 이후, 유효성 검사 엔진이 소스와 대상 간의 카운트, 필드, 에셋, 체크섬을 조정하고, 조정할 수 없는 모든 것은 어깨를 으쓱하는 대신 명시적인 예외 대기열에 들어갑니다.
필드 매핑은 AI보다 결정론적(deterministic)이 우선입니다. 규칙 기반의 매퍼가 증명할 수 있는 모든 것을 처리합니다. 남은 것들만 AI 매퍼로 넘어가며, 이 매퍼는 Ollama를 통해 로컬 오픈-웨이트 모델을 실행하고 대상의 실제 필드 목록에서 목표만을 제안할 수 있습니다—그 출력은 승인되기 전에 엄격한 스키마에 대해 검증됩니다. 형식이 잘못된 출력, 발명된 필드, 게시물 콘텐츠에 숨겨진 프롬프트 주입(prompt-injection) 시도, 또는 모델 자체가 다운되는 경우: 이 모든 것이 수동 검토 대기열로 폴백합니다. AI는 제안할 수는 있지만, 발명하거나 쓸 수는 없습니다.
하나의 엔진으로 모든 경로를 운행하고, 이를 구동하는 세 가지 방식이 있습니다: CLI(plan, dry-run, migrate, validate, job), 동일한 승인 규칙 하에 다른 에이전트들이 마이그레이션을 실행할 수 있도록 돕는 여섯 개의 도구를 갖춘 MCP 서버, 그리고 자체적인 비즈니스 로직을 포함하지 않는 웹 흐름(업로드 → 인벤토리 → 매핑 검토 → 드라이-런 미리보기 → 승인 → 마이그레이션 → 유효성 보고서)입니다.
누가 비용을 지불하나요? 아무도 낼 필요가 없습니다. 이것이 비즈니스 모델입니다. 이 도구 키트는 문자 그대로 프리미엄(freemium) 방식입니다: 무료이며, MIT 라이선스를 따르고, AI 단계가 마진 비용이 0인 로컬 모델이기 때문에 운영 비용이 저렴합니다. 가장 먼저 이 도구를 사용하게 될 사람들은 이미 사이트 마이그레이션으로 돈을 받는 사람들일 것입니다 — 프리랜서, 소규모 에이전시, 양방향으로 고객을 플랫폼 간에 옮기는 컨설턴트들입니다. 왜냐하면 마이그레이션의 위험은 정확히 이 도구가 가시화하는 단계들에 집중되어 있기 때문입니다: 무엇이 깨질지, 무엇이 매핑되지 않을지, 무엇이 누락되었는지 말입니다. 위험 보고서가 포함된 드라이-런은 견적서에 첨부할 수 있는 것이고, 유효성 보고서는 고객에게 제출할 수 있는 작업 증명(proof of work)입니다.
수익 모델 아이디어는 기부 묶음(donation bundle) 방식입니다. 마치 Humble Bundle처럼요. 마이그레이션이 성공하면, 이 도구는 자신이 건드린 오픈 소스 기술들 — 사이트가 왔던 플랫폼, 갈 곳인 플랫폼, 그리고 도구 자체가 기반을 두고 있는 오픈 소스 스택 — 을 인벤토리화하고, 프로젝트에 오픈 소스 기반이 있다면 세 방향 모두에 걸쳐 제안 기부를 구성합니다. 슬라이더 세트를 통해 사용자는 총액과 분할 비율을 선택할 수 있습니다: 이 도구를 얼마나 지원할지, 그리고 원래 사이트, 변환 과정, 새 사이트를 가능하게 만든 재단 및 라이브러리에는 얼마나 흐르게 할지를 말입니다. 오픈 소스 플랫폼 간 사람들을 이동시키는 도구는 자신이 의존하는 공공재(commons)에 기여해야 합니다. 이 묶음은 아직 연결되지는 않았지만 설계되었으며 — 랜딩 페이지에는 슬라이더의 작동 개념 데모가 실려 있습니다.

데모 (Demo)

- 실제 사이트 (Live site): migrateme.tech — 프로젝트의 홈이며, 리포지토리(repo)에서 서비스됩니다.
- 웹 흐름 (Web flow): 현재 리포지토리(
apps/web)에서 실행되며, 클론 후pnpm install을 진행하고 업로드 → 승인 → 검증 단계를 거쳐 샘플 내보내기(export)를 수행할 수 있습니다. - 테스트 베드 및 실제 환경 (Test beds, live): 이 툴킷은 장난감 데이터가 아닌 목적에 맞게 구축된 사이트를 대상으로 테스트됩니다. 먼저 주소를 읽어보세요. 이 주소들은 프로젝트의 명명 규칙을 따르기 때문에, 클릭하기 전에 플랫폼, 거쳐 온 경로(route), 그리고 결과물이 저장되는 위치를 모두 선언합니다.
- lovable.sandbox.migrateme.tech와 lovable.cloud.sandbox.migrateme.tech — 22개의 콘텐츠 모델(content models)과 23개의 경로 패턴(route patterns)을 가진 CMS 테스트 베드로, 클라우드 및 Supabase 변형 버전이 있습니다.
- wp.sandbox.migrateme.tech — 복잡하고 솔직한 WXR 내보내기(export)를 생성하도록 특별히 시딩된 실제 WordPress.com 사이트입니다 (자세한 내용은 아래 참조).
- wp.spacefast.sandbox.migrateme.tech — 동일한 WordPress 테스트 베드이지만, SpaceFast CLI를 통해 정적 미러(static mirror)로 SpaceFast에 게시되었습니다. 공식 WordPress 플러그인의 발행 기능이 WordPress.com에서 세 번 실패했기 때문에, 이 버전은 우회 경로(side door)를 이용했습니다 (버그는 SpaceFast에 보고됨). 이 툴킷의 드라이-런 우선(dry-run-first) 출력을 비교할 수 있는 상업용 플랫폼 기준선입니다.
- from.wp.sandbox.migrateme.tech — 이 툴킷이 해당 WordPress 사이트를 대상으로 자체 실행한 결과물로, 정적 사이트로 게시되었습니다: 모든 마이그레이션된 항목을 렌더링하고, 그 옆에 원본 엔진 출력과 전체 매니페스트를 함께 제공합니다.
GitHub logo Mike-Demo / migrateme-from-wp-sandbox
migrateme.tech 툴킷의 첫 실제 환경 실행 결과물 — wp.sandbox.migrateme.tech (WXR)에서 Markdown으로, 2026년 10월 14일.
from.wp.sandbox.migrateme.tech
migrateme.tech 툴킷의 첫 실제 환경 실행 결과물입니다.
출처: wp.sandbox.migrateme.tech의 라이브 WordPress 테스트베드 (DXS — Digital Experience Showcase). 이 사이트의 WXR 내보내기(44개 항목)는 2026년 10월에 마이그레이션되었으며, 계획 → 드라이런 → 승인된 마이그레이션 → 검증(44/44, 예외 큐 비어 있음) 단계를 거쳤습니다.
index.html+items/— 정적 사이트로 렌더링된 실행 결과물 (generate.py에 의해 생성)raw/— 엔진이 바이트 단위로 작성한 정확한 Markdown 파일들manifest.json— 전체 실행 매니페스트: 420개 필드 매핑, 출처(provenance), 체크섬
MIT 라이선스. Mike "Demo" Demopoulos가 제작했습니다.
주소들은 데모의 일부입니다.
도메인은 레이블이 아니라 라우팅 테이블입니다. MVP 이후의 비전(issue #17)은 지원되는 모든 마이그레이션 쌍에 source.to.destination 형태의 고유 주소를 부여합니다. lovable.to.wordpress.migrateme.tech는 서비스하는 경로를 나타내며, wordpress.to.static.migrateme.tech는 아래 SpaceFast 에디션이 이미 수동으로 증명하는 WordPress-to-static 경로의 이름을 붙입니다. 샌드박스 네임스페이스는 이미 도메인에서 활성화되어 있습니다 (lovable.sandbox, lovable.cloud.sandbox, wp.sandbox, 그리고 SpaceFast 호스팅 에디션의 경우 wp.spacefast.sandbox). 이는 문장의 단어처럼 쌓인 레이블들로, 각 주소가 무엇인지 선언합니다. 커넥터 로드맵(issue #32)이 양방향으로 소스 및 목적지(Ghost, Contentful, Sanity, Drupal, WordPress를 _destination_으로 포함)를 추가함에 따라, 새로운 경로는 그 자체로 이름이자 주소를 갖게 됩니다. 이 로드맵은 이미 화살표의 양쪽에서 이름을 지정하고 있습니다: Lovable, Joomla, Drupal, 그리고 Ghost가 소스이면서 동시에 목적지이며, 오늘날 사람들을 가두는 폐쇄형 SaaS 빌더 및 호스팅 CMS, 그리고 WordPress를 단순한 탈출구가 아닌 하나의 목적지로 간주합니다. 한 가지 고지할 점이 있습니다. 상품 부문(prize category) 때문에 완전히 놓쳤는데, 저는 이 챌린지 기간 동안 기존 레지스트라를 통해 migrateme.tech를 구매하여 무료 도메인 프로모션을 이용하지 않았습니다.
빠른 시작:
corepack enable
pnpm install --frozen-lockfile
pnpm build && pnpm typecheck && pnpm test # 41 tests
코드

GitHub logo Mike-Demo / migrateme.tech
오픈 소스 AI 지원 CMS 마이그레이션 툴킷. CLI, MCP, 웹 및 에이전트를 통한 Dry-run-first, local-first WordPress → Markdown 마이그레이션.
migrateme.tech
오픈 소스 AI 지원 CMS 마이그레이션 툴킷. Dry-run 우선, 로컬 우선의 WordPress → Markdown 마이그레이션을 CLI, MCP, 웹 및 에이전트를 통해 수행합니다.
설정 (Setup)
Node.js 24.21.0 (.nvmrc에 명시된 버전)과 pnpm 10.22.0 (package.json 루트의 packageManager에 고정됨)을 사용합니다. Corepack을 활성화하고 저장소 루트에서 설치합니다:
corepack enable
pnpm install --frozen-lockfile
다음 명령어로 빌드, 타입 체크 및 테스트 스위트를 실행합니다:
pnpm build
pnpm typecheck
pnpm test
테스트 베드 — DXS (Digital Experience Showcase)
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기