CHALLENGE
클라이언트는 기존 홈페이지의 페이지·공지·자료실·갤러리를 새 콘텐츠 관리 시스템으로 옮기면서, 첨부 파일과 기존 URL까지 보존해야 했습니다. 하지만 인벤토리, 필드 매핑, 실패 재처리, 301 리디렉션 확인이 개별 스크립트와 스프레드시트에 흩어져 있어 전체 진행률과 남은 위험을 판단하기 어려웠습니다.
클라이언트가 필요로 한 이유
이관 준비 단계에서 클라이언트가 확인한 핵심 위험은 “몇 건 옮겼는가”만으로 품질을 판단할 수 없다는 점이었습니다. 본문은 옮겨졌지만 첨부가 빠질 수 있고, 새 페이지는 열리지만 기존 검색 유입 URL이 끊길 수 있습니다. 성공 건수 하나로는 누락된 필드와 리디렉션 위험을 설명할 수 없었습니다.
전체 실행 뒤에 오류를 발견하면 되돌리기와 재처리 범위도 지나치게 커졌습니다. 그래서 원본 인벤토리를 먼저 확정하고, 필드 매핑과 전송 결과 미리보기로 누락을 확인한 뒤, 품질 게이트를 통과한 범위만 실행하도록 설계했습니다. 실패한 항목만 다시 처리하고 마지막에 301 연결을 검증하게 한 이유도 성공 건수보다 누락 없는 전환을 보장하기 위해서였습니다.
인벤토리 → 매핑 → 사전 검증 → 실행 → 실패 재시도 → 301 확인을 하나의 운영 흐름으로 구성했습니다.
| 이관 과제 | 시스템에서 다룬 방식 |
|---|---|
| 원본 범위 불명확 | 유형·상태·첨부·URL을 포함한 전체 인벤토리 생성 |
| 필드 누락 | 매핑 커버리지와 영향 건수, 대상 구조 미리보기 제공 |
| 일괄 실행 위험 | 실행 전 성공 예상·차단·첨부·301 품질 게이트 표시 |
| 실패 재처리 반복 | 오류 코드별 군집과 개별·선택 재시도 구성 |
클라이언트 요청사항과 기획 방향
이관 실행 버튼부터 만드는 대신, 옮겨야 할 범위를 확정하고 누락을 차단한 뒤 실패한 단위만 복구하는 순서로 전체 운영 흐름을 설계했습니다.
| 클라이언트 요청 | 이렇게 기획한 이유 | 해결 방식 |
|---|---|---|
| 기존 콘텐츠와 첨부를 빠짐없이 옮기고 싶다 | 원본 목록이 불완전하면 높은 성공률도 실제 누락을 가릴 수 있음 | 콘텐츠 유형·첨부·기존 URL을 포함한 인벤토리를 먼저 확정 |
| 실행 전에 새 사이트의 결과를 확인하고 싶다 | 전체 이관 뒤 필드 오류를 발견하면 되돌리기와 재작업 범위가 커짐 | 필드 매핑·대상 구조 미리보기·차단 조건을 사전 검증 단계에 배치 |
| 검색 유입과 기존 주소를 유지하고 싶다 | 본문이 옮겨져도 이전 URL이 끊기면 사용자와 검색엔진이 새 페이지를 찾지 못함 | 이전·새 URL 매핑과 301 상태를 콘텐츠 이관 결과와 함께 검증 |
SOLUTION
클라이언트가 한 화면에서 이관 범위와 위험을 판단할 수 있도록 원본 인벤토리·필드 매핑·실행 결과·리디렉션을 하나의 운영 저장소에 두고, 대상 콘텐츠 관리 시스템(CMS)과의 연결은 분리했습니다. 운영자는 원본 상세를 고치고 변환 결과를 미리 본 뒤 선택 범위만 실행할 수 있습니다.
콘텐츠 한 건이 새 사이트로 옮겨지는 과정
먼저 기존 사이트의 페이지·공지·자료실·갤러리와 첨부 파일, 이전 URL을 전부 목록으로 만듭니다. 운영자는 제목과 원본 ID, 콘텐츠 유형, 첨부 여부, 이전 주소를 검색해 이관 범위가 빠지지 않았는지 확인합니다. 이 단계가 없으면 성공 건수는 높아도 애초에 목록에 들어오지 않은 콘텐츠를 발견하기 어렵습니다.
다음으로 기존 필드를 새 CMS의 제목·본문·분류·첨부 필드에 연결합니다. 시스템은 실제 전송 전에 변환 결과를 미리 만들고 필수값, 첨부 파일, 주소 충돌을 검사합니다. 예시 배치가 94점이어도 첨부 누락이 차단 등급이면 실행 버튼을 열지 않습니다. 담당자는 누락 파일이나 매핑을 고친 뒤 해당 항목만 다시 검사합니다.
검사를 통과한 콘텐츠만 단건·선택·조건별로 이관합니다. 실패 항목은 원본 오류, 변환 오류, 대상 오류, 첨부 오류로 나눠 보여주며 성공한 항목은 다시 보내지 않습니다. 마지막에는 이전 URL 2,400개가 새 주소로 연결되는지 확인해 검색 유입과 기존 즐겨찾기가 끊기지 않도록 마무리합니다.
시스템 흐름
대상 CMS 연결부는 콘텐츠 생성·수정·오류 응답 형식을 통일했습니다. 연결 방식이 REST API나 관리 명령으로 달라져도 인벤토리, 사전 검증, 재시도, 301 확인의 운영 순서는 유지됩니다.
이관 준비 점수
실행 가능 여부를 진행률이 아닌 네 개의 품질 항목으로 계산합니다. 점수는 위험을 요약하는 용도이며, 차단 항목이 하나라도 있으면 높은 점수여도 실행하지 않습니다.
| 판단 항목 | 반영 비중 | 확인 내용 |
|---|---|---|
| 필드 매핑 | 30% | 필수 필드 연결과 변환 규칙 커버리지 |
| 첨부 유효성 | 25% | 파일 존재, MIME, 참조 관계 |
| URL 연속성 | 25% | slug 충돌과 301 목적지 완성도 |
| 사전 검증 | 20% | 대상 payload 규칙과 차단 오류 |
예시 배치는 94점이지만 첨부 누락이 차단 등급이면 실행 버튼을 비활성화합니다. 실제 실행 조건은 준비 점수 90점 이상, 차단 오류 0건, 선택 범위 확정, 복원 지점 기록을 모두 만족하는 것입니다.
배치 실행과 재시도 규칙
각 원본에는 안정적인 외부 키를 부여해 같은 콘텐츠를 다시 실행해도 중복 생성되지 않게 했습니다. 실패는 원본 오류, 변환 오류, 대상 오류, 첨부 오류로 나누고, 수정으로 해결 가능한 항목만 선택 재시도합니다. 성공한 항목은 재시도 배치에 포함하지 않습니다.
운영 화면
- 페이지·공지·자료실·갤러리 전체 검색과 25·50건 페이지 이동
- 2페이지 이후 원본 상세 조회·수정
- 필드 매핑 저장, 커버리지·영향 건수, 대상 payload 미리보기
- 단건·선택·조건별 이관과 실패 군집·재시도
- 301 URL 검색·수정·상태 변경과 CSV 내보내기
- WXR 1.2 형식 콘텐츠 내보내기
BUILD
마스터 용어, 원본 콘텐츠, 첨부 메타데이터, 필드 매핑, 이관 실행, 시도 이력, URL 리디렉션, 사건, 감사 로그를 관계형 운영 데이터로 분리했습니다. 정상, 차단, 변환 실패, 대상 오류, 복구 상태가 실행 이력에 지속되며 재시도는 실패한 레코드만 대상으로 삼습니다.
데이터를 이관 단위로 푸는 방식
원본 유형별 필드를 공통 인벤토리 형식으로 정규화하고, 매핑 규칙이 대상 payload를 생성합니다. 사전 검증기는 payload와 첨부·URL 관계를 검사해 통과·경고·차단을 구분합니다. 운영 화면은 요약 집계를 먼저 보여주고, 각 건의 원본·변환값·시도 타임라인까지 내려갈 수 있게 구성했습니다.
검증한 데이터 규모
| 데이터 | 규모 |
|---|---|
| 원본 콘텐츠 | 2,400 |
| 첨부 메타데이터 | 1,800 |
| URL 리디렉션 | 2,400 |
| 이관 사건 | 12,000 |
| 이관 시도 이력 | 533 |
| 일별 시계열 | 365일 |
VALIDATION
- 자동 테스트 12건 통과
- 프로덕션 빌드와 정적 산출물 확인
- 2페이지 이후 원본 상세·수정과 전체 검색 확인
- 차단 오류가 있는 고득점 배치의 실행 방지 확인
- 정상·실패·재시도·복구와 새로고침 지속성 확인
- WXR·리디렉션 CSV 응답 확인
- 데스크톱·태블릿·모바일에서 콘솔 오류와 가로 넘침 없음
RESULT
| 이관 장면 | 기존에 생기던 문제 | 구축 후 처리 방식 |
|---|---|---|
| 범위 확정 | 목록에 들어오지 않은 콘텐츠와 첨부 누락을 발견하기 어려움 | 콘텐츠·첨부·이전 URL을 먼저 전체 인벤토리로 구성 |
| 실행 전 확인 | 전체 이관 뒤에 필드·첨부 오류를 발견 | 대상 구조 미리보기와 차단 오류를 확인한 범위만 실행 |
| 실패와 전환 | 성공 항목까지 다시 보내거나 이전 URL이 끊김 | 실패 항목만 선택 재시도하고 301 목적지를 별도로 검증 |
원본 콘텐츠 2,400건, 첨부 1,800건, 리디렉션 2,400건을 사용해 첫 화면의 일부가 아니라 전체 범위에서 매핑·누락·재시도·주소 연속성을 확인했습니다.
비슷한 업무에 적용할 수 있는 부분
대상은 WordPress 이관에 한정되지 않습니다. CMS 교체, ERP·CRM 데이터 이전, 파일 저장소 재구성처럼 원본과 대상의 구조가 다르고 누락 방지, 실행 전 검증, 되돌릴 범위가 중요한 프로젝트에도 이어집니다.
본 프로젝트는 고객사 실제 업무 요건을 바탕으로 설계한 결과물이며, 보안 정책에 따라 일부 화면만 공개했습니다.



