ToolDeck

XML 포매터

구문 강조와 함께 XML을 형식화하고 보기 좋게 출력

예시 시도

XML 입력

형식화된 XML

로컬에서 실행 · 시크릿 붙여넣기 안전
형식화된 XML이 여기에 표시됩니다…

XML 형식화란?

XML 형식화(XML 보기 좋게 출력 또는 XML 뷰티파이케이션이라고도 함)는 XML 문서에 일관된 들여쓰기와 줄바꿈을 추가하여 계층 구조를 시각적으로 표현하는 과정입니다. API, 설정 생성기, 직렬화 도구에서 나온 원시 XML은 태그 사이에 공백 없이 한 줄로 전달되는 경우가 많습니다. XML 포매터는 해당 문서를 트리로 파싱한 뒤 예측 가능한 간격으로 재직렬화합니다. 결과물은 시각적으로 명확하고 이해하기 훨씬 쉬우며, 문서의 논리적 내용은 전혀 변경되지 않습니다.

XML 1.0 사양(W3C 권고안, 5판)은 모든 여는 태그에 대응하는 닫는 태그가 있거나 자체 닫는 태그여야 하고, 속성은 따옴표로 묶어야 하며, 다섯 가지 문자(<, >, &, ", ')는 엔티티 이스케이프가 필요한 엄격한 문법을 정의합니다. 포매터는 이러한 규칙을 준수하면서 문서의 정보 집합(infoset)을 변경하지 않는 불필요한 공백만 삽입해야 합니다.

형식화된 XML은 코드 리뷰 시 읽기 쉽고, 버전 관리에서 diff하기 쉬우며, 서비스가 예상치 못한 데이터를 반환할 때 디버깅하기 쉽습니다. 형식화 작업 자체는 무손실입니다. 문서의 논리적 내용은 동일하게 유지되고 표현 방식만 변경됩니다. git diff나 풀 리퀘스트 리뷰 플랫폼 같은 도구는 수정된 줄만 보여줍니다 — 일관되게 들여쓰기된 XML은 그 diff가 서식 변경이 아닌 실제 변경 사항을 반영하도록 보장합니다.

Before · xml
After · xml
<catalog><book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title><genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date></book><book id="bk102"><author>Ralls, Kim</author><title>Midnight Rain</title><genre>Fantasy</genre><price>5.95</price><publish_date>2000-12-16</publish_date></book></catalog>
<catalog>
  <book id="bk101">
    <author>Gambardella, Matthew</author>
    <title>XML Developer's Guide</title>
    <genre>Computer</genre>
    <price>44.95</price>
    <publish_date>2000-10-01</publish_date>
  </book>
  <book id="bk102">
    <author>Ralls, Kim</author>
    <title>Midnight Rain</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2000-12-16</publish_date>
  </book>
</catalog>

온라인 XML 포매터를 사용하는 이유

XML을 손으로 형식화하는 것은 특히 깊은 중첩이나 혼합 네임스페이스가 있는 문서의 경우 오류가 발생하기 쉽고 느립니다. 브라우저 기반 포매터는 파일 크기에 관계없이 1초 안에 형식화된 결과를 제공합니다. 데스크톱 도구나 CLI 유틸리티와 달리 설치나 구성이 필요 없으며 — 페이지를 열고 바로 작업을 시작할 수 있습니다.

즉각적인 보기 좋은 출력
XML을 붙여넣거나 입력하면 즉시 들여쓰기된 결과를 얻습니다. CLI 도구 설치나 빌드 단계 실행을 기다릴 필요가 없습니다.
🔒
개인정보 우선 처리
모든 파싱과 형식화는 DOMParser API를 사용하여 브라우저에서 수행됩니다. XML이 기기를 벗어나지 않으며 어떤 서버에도 전송되지 않습니다.
🎨
설정 가능한 들여쓰기
설정 파일을 편집하지 않고도 프로젝트 코딩 표준에 맞게 2칸, 4칸, 탭 들여쓰기 중에서 선택할 수 있습니다.
📋
계정 또는 설치 불필요
페이지를 열고, XML을 붙여넣고, 결과를 복사하세요. 회원가입 양식도, 데스크톱 소프트웨어도, 브라우저 확장 프로그램도 필요하지 않습니다.

XML 포매터 활용 사례

프론트엔드 개발
CMS에서 반환된 SVG 마크업이나 XHTML 조각을 검사합니다. 원시 출력을 형식화하면 특정 속성과 중첩된 그룹을 빠르게 찾을 수 있습니다.
백엔드 엔지니어링
서드파티 서비스의 SOAP 응답, RSS 피드, XML-RPC 페이로드를 디버깅합니다. 보기 좋게 출력된 결과로 누락된 요소나 잘못된 네임스페이스를 추적할 수 있습니다.
DevOps 및 CI/CD
들여쓰기 없이 기계로 생성된 Maven pom.xml, Ant 빌드 스크립트, .csproj 프로젝트 파일을 읽습니다. 커밋 전에 형식화하여 diff를 깔끔하게 유지하세요.
QA 및 테스트
통합 테스트에서 예상 XML 페이로드와 실제 XML 페이로드를 비교합니다. 양쪽을 동일한 들여쓰기 스타일로 형식화하면 공백 차이로 인한 오탐을 방지합니다.
데이터 엔지니어링
데이터베이스, ETL 파이프라인, 정부 공개 데이터 포털의 XML 내보내기를 검사합니다. 형식화된 XML은 XSLT 변환이나 XPath 쿼리를 작성하기 전에 레코드 구조를 파악하게 해줍니다.
XML 학습
W3C XML 튜토리얼을 공부하는 학생들이 연습 파일을 포매터에 붙여넣어 중첩과 속성 문법이 올바른지 확인할 수 있습니다.

XML 미리 정의된 엔티티 참조

XML은 자체 문법을 위해 다섯 가지 문자를 예약합니다. 이 문자들이 리터럴 텍스트 내용 또는 속성 값으로 나타날 때는 미리 정의된 엔티티 참조로 대체해야 합니다. 올바른 포매터는 보기 좋게 출력하는 동안 이러한 엔티티를 보존합니다.

문자XML에서의 역할엔티티
<Start of tag&lt;
>End of tag&gt;
&Start of entity&amp;
"Attribute delimiter&quot;
'Attribute delimiter&apos;

XML 들여쓰기 스타일 비교

XML 들여쓰기에 대한 단일 표준은 없습니다. 선택은 팀의 관례와 파이프라인의 도구에 따라 달라집니다. 다음은 세 가지 가장 일반적인 스타일입니다.

2칸 공백 (권장)
SVG, XHTML, SOAP, Spring 설정 등 웹 관련 XML에서 가장 일반적인 선택입니다. 깊이 중첩된 문서를 컴팩트하게 유지합니다. 대부분의 온라인 포매터와 IDE에서 기본값으로 사용됩니다.
4칸 공백
파일이 3~4단계 중첩을 거의 초과하지 않는 Java 생태계(Maven, Ant, Android 매니페스트)에서 선호됩니다. Java 및 C# 코드의 기본 들여쓰기와 일치합니다.
탭 문자
각 개발자가 편집기에서 자신만의 시각적 너비를 설정할 수 있습니다. 레거시 프로젝트와 일부 Microsoft 도구(.csproj, .nuspec)에서 일반적입니다. 공백보다 파일 크기가 작아집니다.

코드 예시: 프로그래밍 방식으로 XML 형식화

스크립트나 빌드 프로세스 내에서 XML을 형식화해야 할 때, 모든 주요 언어에는 내장 또는 표준 라이브러리 옵션이 있습니다. 아래는 직접 복사하여 사용할 수 있는 실제 예시입니다.

JavaScript (DOM API)
const raw = '<root><item>hello</item></root>'
const parser = new DOMParser()
const doc = parser.parseFromString(raw, 'application/xml')
const serializer = new XMLSerializer()
const xml = serializer.serializeToString(doc)

// Indent with XSLT (browser-native approach)
const xslt = new DOMParser().parseFromString(`
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="node()|@*">
      <xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
    </xsl:template>
  </xsl:stylesheet>`, 'application/xml')

const proc = new XSLTProcessor()
proc.importStylesheet(xslt)
const formatted = proc.transformToDocument(doc)
console.log(new XMLSerializer().serializeToString(formatted))
// → <root>\n  <item>hello</item>\n</root>
Python
import xml.dom.minidom

raw = '<root><item>hello</item><item>world</item></root>'
dom = xml.dom.minidom.parseString(raw)
print(dom.toprettyxml(indent='  '))
# → <?xml version="1.0" ?>
# → <root>
# →   <item>hello</item>
# →   <item>world</item>
# → </root>

# With lxml (handles namespaces, XSD, large files)
from lxml import etree
tree = etree.fromstring(raw.encode())
print(etree.tostring(tree, pretty_print=True).decode())
Go
package main

import (
    "encoding/xml"
    "fmt"
    "strings"
)

func formatXML(raw string) (string, error) {
    decoder := xml.NewDecoder(strings.NewReader(raw))
    var out strings.Builder
    encoder := xml.NewEncoder(&out)
    encoder.Indent("", "  ")
    for {
        tok, err := decoder.Token()
        if err != nil {
            break
        }
        encoder.EncodeToken(tok)
    }
    encoder.Flush()
    return out.String(), nil
}
// formatXML("<a><b>1</b></a>") → "<a>\n  <b>1</b>\n</a>"
CLI (xmllint)
# Format XML file with xmllint (part of libxml2, pre-installed on macOS/Linux)
xmllint --format input.xml > formatted.xml

# Format from stdin
echo '<a><b>1</b></a>' | xmllint --format -
# → <?xml version="1.0"?>
# → <a>
# →   <b>1</b>
# → </a>

# Validate and format at the same time
xmllint --format --schema schema.xsd input.xml

자주 묻는 질문

XML 형식화가 문서의 의미를 변경하나요?
아니요. XML 형식화는 태그 사이에 불필요한 공백만 추가하거나 제거합니다. XML 정보 집합(infoset)은 동일하게 유지됩니다. 한 가지 예외: 스키마가 특정 요소에 xml:space="preserve"를 사용하는 경우, 포매터는 해당 요소를 그대로 두어야 하며, 이 도구는 이를 준수합니다.
XML 형식화와 XML 유효성 검사의 차이점은 무엇인가요?
형식화는 XML을 읽기 쉽게 만들기 위해 들여쓰기와 줄바꿈을 추가합니다. 유효성 검사는 문서가 스키마(XSD, DTD, RelaxNG)에 부합하는지 확인합니다. 문서가 올바른 형식(well-formed)이더라도 스키마에 대해 유효하지 않을 수 있습니다. 가독성을 위해서는 이 포매터를, 스키마 준수를 위해서는 XML 유효성 검사 도구를 사용하세요.
네임스페이스가 있는 XML을 형식화할 수 있나요?
네. 브라우저의 DOMParser는 XML 네임스페이스를 기본으로 처리합니다. 네임스페이스 접두사, 기본 네임스페이스 선언(xmlns), 정규화된 속성 이름은 형식화 중에 모두 보존됩니다. 포매터는 어떤 네임스페이스 바인딩도 추가, 제거, 이름 변경하지 않습니다.
브라우저에서 얼마나 큰 XML 파일을 형식화할 수 있나요?
브라우저 기반 형식화는 약 10MB까지의 문서에서 잘 작동합니다. 그 이상에서는 DOM 트리가 상당한 메모리를 소모하고 UI가 응답하지 않을 수 있습니다. 매우 큰 파일의 경우 XML을 스트림으로 처리하는 xmllint --format 같은 CLI 도구를 사용하세요.
형식화된 XML에 XML 선언이 추가되는 이유는 무엇인가요?
일부 포매터는 DOM 트리를 직렬화할 때 <?xml version="1.0"?>를 앞에 추가합니다. 이 선언은 인코딩이 UTF-8인 경우 XML 1.0에서 선택 사항입니다. 원하지 않으면 출력의 첫 번째 줄을 제거하세요. 이 선언은 규격을 준수하는 어떤 XML 프로세서의 파싱에도 영향을 주지 않습니다.
XML 형식화가 XML 축소와 같은 것인가요?
두 작업은 반대 방향입니다. 형식화는 가독성을 높이기 위해 공백을 추가합니다. 축소는 파일 크기를 줄이기 위해 불필요한 공백을 모두 제거합니다. 두 작업 모두 XML infoset에 대해 무손실입니다. XML을 축소해야 한다면 XML 축소 도구를 사용하세요.
XML 형식화와 HTML 형식화의 차이점은 무엇인가요?
XML은 엄격합니다. 모든 태그는 닫혀야 하고, 속성 값은 따옴표로 묶어야 하며, 문서에는 정확히 하나의 루트 요소가 있어야 합니다. HTML(특히 HTML5)은 관대합니다. 선택적 닫는 태그, 따옴표 없는 속성, &lt;br&gt; 같은 빈 요소가 모두 유효합니다. XML 포매터는 잘못된 XML을 거부하지만, HTML 포매터는 XML이 허용하지 않는 문법도 허용합니다.