§

XML 붙여넣기

§

옵션

모드
들여쓰기
XML 선언
빈 요소 태그 자체 닫기
§

포맷된 출력

xml

국내 백엔드 개발에서 XML 프리티 프린트는 여전히 매일 쓰입니다. 네이버·다음의 RSS 피드 점검, 국세청(NTS) 홈택스 e-Tax 부가가치세·법인세 신고 XML, 행정안전부와 통계청 KOSIS의 통계 XML 표준은 모두 정렬된 들여쓰기가 필요합니다. 삼성카드·KB국민카드·신한은행·우리은행 등 금융권에 남아 있는 레거시 SOAP API, KOFIA(금융투자협회)와 금융감독원 DART 공시 시스템이 요구하는 XBRL 재무보고, KISA의 API 보안 가이드에서 다루는 XML 페이로드, 그리고 카카오엔터·NCSOFT·넷마블 같은 게임·콘텐츠 스튜디오의 SVG 아셋 파이프라인까지 — PIPA 준수 환경에서도 본 도구는 외부 SaaS 없이 브라우저 안에서 모든 작업을 끝냅니다. 정부24와 공공데이터포털이 제공하는 OpenAPI XML 응답을 디버그하거나, 의료기관 EMR HL7 CDA 문서를 검토할 때도 동일한 워크플로가 그대로 적용됩니다.

XML 포매팅이란 무엇인가요?

XML(Extensible Markup Language)은 W3C가 표준화한 구조화 문서·데이터 교환 텍스트 형식입니다. 포매팅 — 프리티 프린트 또는 beautify라고도 합니다 — 은 잘 형성된 XML 소스를 받아, 각 요소·속성·주석·처리 지시·CDATA 섹션이 읽기 쉽도록 재들여쓰기합니다. 파싱된 문서 트리는 그대로 유지되고, 바뀌는 것은 요소 사이의 공백뿐입니다.

XML 포매팅은 어떻게 작동하나요?

입력은 브라우저 내장 DOMParserXMLSerializer API에 자체 재귀 들여쓰기 도구를 더해 전적으로 브라우저 안에서 처리됩니다. 주요 단계는 다음과 같습니다:

  1. 입력은 텍스트 영역에서 그대로 읽어들이며 — 붙여넣은 모든 바이트는 로컬 메모리에만 보관됩니다.
  2. 브라우저는 new DOMParser().parseFromString(text, 'application/xml')으로 이를 파싱합니다. 입력이 잘 형성되지 않았다면 파서가 <parsererror> 노드를 삽입하고, 그 텍스트에는 엔진이 알려주는 행과 열 힌트가 담깁니다 — 이 정보는 오류 띠에 그대로 표시됩니다.
  3. 파싱이 성공하면 자체 들여쓰기 도구가 DOM 트리를 깊이 우선으로 순회하면서, 각 요소·속성 집합·CDATA 섹션·주석·처리 지시를 현재 깊이에 맞춰 각자의 줄에 출력합니다. 옵션이 켜져 있으면 빈 요소는 자체 닫기 형태로 유지됩니다.
  4. 압축 모드는 파이프라인을 뒤집습니다: XMLSerializer().serializeToString(doc)이 한 줄 형태를 내놓고, 그다음에 가드된 정규식이 CDATA 블록이나 비공백 텍스트 노드 내부를 건드리지 않으면서 요소 사이의 공백을 제거합니다.
  5. 결과는 읽기 전용 텍스트 영역에 기록되고, 오류 띠는 비워지며, 다운로드 버튼은 결과를 메일이나 티켓에 첨부할 수 있는 .xml 파일로 패키징합니다.

왜 이 도구로 XML을 프리티 프린트해야 하나요?

  • 프라이버시: 모든 파싱·포맷·압축이 브라우저 안에서 일어납니다. XML이 저희 서버에 도달하지 않습니다 — 업로드 없음, 텔레메트리 없음, 계정 없음.
  • 정확한 오류: 입력이 잘못되면 파서는 브라우저 엔진이 직접 알려주는 행과 열을 그대로 제시합니다 — DevTools에서 보는 것과 같은 숫자입니다.
  • 충실한 왕복: 포맷한 뒤 다시 압축하면 원본과 바이트 등가인 결과를 얻습니다(XML 선언 옵션 제외) — 포매팅은 네임스페이스를 재정규화하거나 속성 순서를 다시 쓰지 않습니다.
  • 빠름: 순수 DOMParser와 약 60줄짜리 들여쓰기 도구만으로 수 MB의 SOAP 봉투와 OOXML 조각을 즉시 처리하며, 다운로드할 외부 라이브러리도 없습니다.

XML 포매팅의 일반적인 활용 사례는 무엇인가요?

XML 프리티 프린트는 웹 출판·엔터프라이즈 통합·데이터 아카이브 전반에 등장합니다:

  • RSS / Atom 피드 점검: 팟캐스트나 뉴스 피드 본문을 붙여넣어 채널 메타데이터·item 순서·네임스페이스 접두어를 게시 전에 확인하기.
  • SOAP 디버깅: Wireshark나 SOAP 클라이언트 로그에서 복사한 봉투를 포맷해 Header·Body·Fault 섹션을 한눈에 보이게 하기.
  • Sitemap 감사: 경쟁사나 자체 스테이징 사이트에서 가져온 sitemap.xml을 재들여쓰기해 항목 수를 세고 URL별 hreflang 대안을 확인하기.

XML 포매팅 예시는 어떻게 생겼나요?

3-요소짜리 <feed><entry><title>Hello</title></entry></feed>을 붙여넣고 2칸 들여쓰기 옵션으로 포맷을 누르면 각 요소가 깊이에 따라 들여쓰기된 네 줄짜리 문서가 됩니다. 같은 입력에 Minify를 적용하면 원래의 바이트 문자열로 되돌아갑니다. 잘 형성된 문서라면 왕복에서 손실이 없습니다.

오프라인에서 동작하나요?

예. 포맷·압축 파이프라인은 순수 DOMParser + XMLSerializer에 작은 재귀 들여쓰기 도구만 더해 모두 브라우저 탭 안에서 실행됩니다. 아무것도 업로드되지 않고, Service Worker가 입력을 프록시하지 않으며, 포맷 단계 자체는 네트워크 요청을 전혀 보내지 않습니다. 외부로 나가는 트래픽은 표준 페이지 로드 자산(CSS·폰트·분석 스크립트)뿐이며 — XML은 Ultim8Soft에 도달하지 않습니다.

포매팅이 문서를 바꾸나요?

의미적 변경은 없습니다. 포매팅은 요소 사이의 공백만 다시 씁니다. 요소 이름, 속성 값, 텍스트 내용, CDATA 페이로드, 주석, 처리 지시는 바이트 단위로 보존됩니다. 네임스페이스 선언과 접두어는 입력 그대로 유지되며 — 포매터는 재정규화하거나 속성을 재정렬하지 않습니다. 선택적인 XML 선언 토글을 제외하면 출력은 입력과 동일한 DOM 트리로 파싱됩니다.

CDATA / 주석 / 처리 지시는 어떻게 처리되나요?

셋 다 현재 들여쓰기 깊이에 맞춰 각자의 줄에 그대로 출력됩니다. CDATA 페이로드는 <![CDATA[…]]>로 감싸며 내부 재들여쓰기는 하지 않습니다 — 명세상 CDATA 내용은 불투명하므로 포매터는 절대 손대지 않습니다. 주석은 <!-- … -->를, 처리 지시는 <?target data?>를 사용합니다. 세 가지 모두 포맷 → 압축 → 포맷의 왕복을 거쳐도 내용이 그대로 유지됩니다.

XML 포매팅과 압축의 차이는 무엇인가요?

포매팅은 사람이 문서 트리를 읽도록 공백을 펼치고, 압축은 전송·저장을 위해 다시 공백을 제거합니다. 둘 다 원시 바이트 문자열이 아닌 파싱된 DOM 위에서 동작하므로, 잘 형성된 문서에 포맷 → 압축을 왕복으로 적용하면 원래 압축 형태와 바이트 등가인 결과가 됩니다. XML을 읽거나 diff할 때는 포매팅을, 종량제 API 게이트웨이로 보내거나 다른 문서에 임베드할 때는 압축을 사용하세요.

이 XML 포매터는 브라우저가 AJAX XHR 응답과 SVG 문서에서 사용하는 것과 동일한 파서로 동작하므로, 잘 형성된 XML — RSS·Atom·SOAP·sitemap·OOXML·SVG — 은 깨끗하게 왕복합니다. 위에 임의의 XML을 붙여넣고, 출력을 복사하거나 .xml로 다운로드하세요.