온라인 XML 포맷터
XML을 브라우저에서 정리·최소화·유효성 검사. 들여쓰기와 줄/열 오류 정보 제공. 업로드 없음, 개인 정보 보호, 무료.
XML 포맷터란 무엇이며 왜 사용하나요?
XML(Extensible Markup Language)은 웹 서비스와 설정 파일부터 RSS 피드, SOAP API, 오피스 문서(DOCX, XLSX), SVG 그래픽, Android 레이아웃 파일까지 어디서나 사용되는 구조화된 데이터를 위한 텍스트 기반 형식입니다. JSON과 달리 XML은 주석, 네임스페이스, 혼합 내용(텍스트와 요소가 혼합된), 문서 타입 선언을 지원합니다 — 이로 인해 기업 통합, 문서 교환, 구조화된 데이터와 사람이 읽을 수 있는 마크업이 공존해야 하는 모든 곳에서 선호되는 형식입니다.
실제로 XML은 형편없이 들여쓰기되어 있거나 완전히 최소화된 경우가 많습니다 — API 응답이 한 줄로 도착하고, 설정 파일에 일관성 없는 들여쓰기가 누적되며, 직렬화 도구에서 생성된 XML에는 공백이 전혀 없습니다. XML 포맷터는 지저분한 입력을 받아 모든 중첩 수준이 시각적으로 명확한 깔끔한 계층 구조로 재들여쓰기합니다. 이는 코드 검토, 디버깅, 문서화, 낯선 XML 스키마 이해에 필수적입니다.
**이 도구가 일반 텍스트 편집기와 다른 점:**
**1. 정확한 오류 위치와 함께 형식 일치성 유효성 검사.** 포맷터는 브라우저의 DOMParser(HTML과 SVG를 파싱하는 동일한 엔진)를 사용하여 XML을 파싱합니다. 문서가 올바른 형식이 아닌 경우 — 태그 불일치, 닫히지 않은 요소, 이스케이프되지 않은 문자, 여러 루트 요소 — 파서가 실패한 정확한 줄 번호와 열 번호를 보고합니다. 이는 태그가 실수로 열린 채로 남아 있는 위치를 찾기 위해 원시 XML을 읽는 것보다 훨씬 빠릅니다.
**2. 무손실 포맷팅.** 포맷터는 주석, 처리 명령어, CDATA 섹션, 네임스페이스 선언, 속성 순서, 모든 텍스트 내용을 정확히 보존합니다. 요소 태그 사이의 공백만 조정합니다. 중요한 XML은 안전하게 포맷팅할 수 있습니다 — 의미 있는 것은 변경되지 않습니다.
**3. 프로덕션 사용을 위한 최소화.** 최소화 기능은 모든 중요하지 않은 요소 간 공백을 제거하여 가장 작은 유효한 XML 표현을 생성합니다. 이는 데이터베이스 열에 XML을 저장하거나 JSON에 문자열로 삽입하거나 바이트가 중요한 채널을 통해 전송하기 전의 올바른 전처리 단계입니다.
**4. 100% 브라우저 기반 개인 정보 보호.** 의료 XML(HL7, FHIR), 재무 데이터, 자격 증명이 있는 SOAP 페이로드, 내부 설정 파일은 모두 민감한 데이터를 포함하는 일반적인 XML 페이로드입니다. 이 도구는 아무것도 업로드하지 않습니다 — 모든 처리가 브라우저의 JavaScript 엔진에서 실행됩니다. 변환이 아닌 포맷팅이 필요하다면 동반 도구를 참조하세요: XML을 JSON으로 변환하려면 XML to JSON 변환기, 반대 방향이면 JSON to XML 변환기를 사용하세요.
<!-- Minified XML input -->
<?xml version="1.0" encoding="UTF-8"?><catalog><product id="p01"><name>Wireless Headphones</name><price currency="USD">79.99</price></product></catalog>
<!-- After formatting with 2-space indent -->
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<product id="p01">
<name>Wireless Headphones</name>
<price currency="USD">79.99</price>
</product>
</catalog> 주요 기능
2칸 또는 4칸 들여쓰기로 정리
XML을 깔끔하고 읽기 쉬운 계층 구조로 재들여쓰기합니다. 포맷팅 전에 2칸(웹 서비스, RSS, 설정 파일에 가장 일반적) 또는 4칸(기업용 XML 스키마에 일반적) 들여쓰기를 선택하세요.
최소화 — 중요하지 않은 공백 제거
텍스트 내용에 영향을 주지 않고 요소 태그 사이의 모든 공백을 제거하여 가장 작은 유효한 XML을 생성합니다. 저장, 전송 또는 JSON이나 다른 형식 내부에 문자열로 포함시키기에 이상적입니다.
줄/열 오류와 함께 형식 일치성 유효성 검사
브라우저의 내장 DOMParser를 사용하여 XML 구조를 유효성 검사합니다. 첫 번째 형식 오류의 정확한 줄 번호와 열 번호를 보고합니다 — 태그 불일치, 닫히지 않은 요소, 이스케이프되지 않은 문자 — 빠른 디버깅을 위해.
무손실: 주석, 네임스페이스, 속성 보존
주석, 처리 명령어, CDATA 섹션, 네임스페이스 선언, 속성 순서가 모두 정확히 보존됩니다. 태그 사이의 중요하지 않은 공백만 수정됩니다 — 내용은 절대 변경되지 않습니다.
100% 브라우저 기반 — 업로드 없음, 서버 없음
모든 처리가 브라우저에서 로컬로 실행됩니다. 자격 증명, 의료 데이터, 재무 기록, 내부 설정을 포함하는 XML 페이로드는 어떤 서버로도 전송되지 않고 기록되지 않습니다.
SOAP, RSS, SVG, XHTML, Android XML과 호환
모든 올바른 형식의 XML 응용 프로그램을 처리합니다: WS-Security 헤더가 있는 SOAP 엔벨로프, RSS/Atom 피드, SVG 파일, XHTML 문서, Android 레이아웃 XML, Maven POM, Maven/Ant 빌드 파일.
예시
지저분한 / 최소화된 XML
<?xml version="1.0" encoding="UTF-8"?><catalog><product id="p01" category="electronics"><name>Wireless Headphones</name><price currency="USD">79.99</price><stock>142</stock><tags><tag>audio</tag><tag>bluetooth</tag></tags></product><product id="p02" category="books"><name>Learning XML</name><price currency="USD">29.99</price><stock>55</stock></product></catalog>
한 줄로 압축된 XML 제품 카탈로그입니다. 포맷 버튼을 클릭하면 2칸 들여쓰기로 읽기 쉬운 트리 구조로 변환됩니다. 요소 계층, 속성, 텍스트 내용은 모두 정확히 유지되며 포맷팅은 순전히 시각적입니다.
RSS 피드 스니펫
<rss version="2.0"><channel><title>Go Tools Blog</title><link>https://go-tools.org/blog</link><description>Developer tools, tips and tutorials</description><item><title>Understanding XML Namespaces</title><link>https://go-tools.org/blog/xml-namespaces-guide</link><pubDate>Thu, 29 May 2026 00:00:00 GMT</pubDate><description>A deep dive into XML namespace declarations, prefixes, and scope rules with practical examples.</description></item><item><title>XML vs JSON: When to Use Each</title><link>https://go-tools.org/blog/xml-vs-json</link><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate></item></channel></rss>
두 개의 항목을 가진 RSS 2.0 피드가 한 줄로 압축되어 있습니다. 포맷팅 후 채널 메타데이터와 각 item 요소가 명확하게 들여쓰기되어 피드 구조 검사, 새 항목 추가 또는 피드 검사 도구 요구 사항과의 비교가 쉬워집니다.
SOAP 엔벨로프
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsse:UsernameToken><wsse:Username>api-client</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-ext-1.0.xsd#PasswordText">s3cr3t</wsse:Password></wsse:UsernameToken></wsse:Security></soap:Header><soap:Body><GetOrderRequest xmlns="http://example.com/orders"><OrderId>ORD-20260529-001</OrderId><IncludeLineItems>true</IncludeLineItems></GetOrderRequest></soap:Body></soap:Envelope>
WS-Security 헤더와 GetOrder 본문을 포함하는 SOAP 1.1 엔벨로프로 세 개의 네임스페이스 접두사(soap:, wsse:, 기본)를 사용합니다. 포맷팅 후 헤더/본문 분리와 네임스페이스 선언이 즉시 명확해집니다 — SOAP 통합 디버깅과 WSDL 생성 페이로드 읽기에 필수적입니다.
사용 방법
- 1
XML 붙여넣기
위 입력 필드에 XML을 입력하거나 붙여넣으세요. '예시 불러오기'를 클릭하여 샘플(포맷팅이 잘 적용되는 최소화된 제품 카탈로그 XML)을 사용해 볼 수도 있습니다.
- 2
작업 선택
포맷 버튼을 클릭하여 들여쓰기로 정리하거나, 최소화로 공백을 제거하거나, 유효성 검사로 형식 일치성을 확인하세요. 포맷팅 전에 들여쓰기 크기로 2칸 또는 4칸을 선택하세요.
- 3
출력 복사
처리된 XML이 출력 패널에 표시됩니다. 복사 버튼을 클릭하여 클립보드에 저장하세요. 유효성 검사에서 오류가 발견되면 오류 배너에 정확한 줄 번호와 열 번호가 표시됩니다.
일반적인 XML 오류
태그 불일치
XML 태그 이름은 대소문자를 구분하며 정확히 일치해야 합니다.
<products>
<Item>
<name>Widget</name>
</item>
</products> <products>
<item>
<name>Widget</name>
</item>
</products> 이스케이프되지 않은 앰퍼샌드 또는 부등호
& 및 < 문자는 XML에서 예약되어 있으며 CDATA 섹션 외부에서는 이스케이프되어야 합니다. 속성 값에서도 &를 그대로 쓰면 파서 오류가 발생합니다. &에는 &를, <에는 <를 사용하세요. >는 파서가 더 관대하지만 텍스트 내용에서 >로 이스케이프해야 합니다.
<query>price > 10 & stock > 0</query>
<query>price > 10 & stock > 0</query>
인용되지 않거나 잘못 인용된 속성
모든 XML 속성 값은 단따옴표나 큰따옴표로 묶여야 합니다. 인용되지 않은 속성 값은 HTML5에서는 유효하지만 XML에서는 형식 오류입니다. 또한 큰따옴표를 포함하는 값은 단따옴표를 구분자로 사용하거나(또는 따옴표를 "로 이스케이프해야 합니다).
<product id=p01 label="It's a "widget"">
<product id="p01" label="It's a "widget"">
여러 루트 요소
XML 문서는 다른 모든 요소를 포함하는 정확히 하나의 루트 요소를 가져야 합니다. XML 조각을 연결할 때 두 개 이상의 최상위 요소가 나란히 있는 일반적인 실수가 발생하는데, 이는 유효한 XML이 아닙니다(HTML에서는 일반적). 모든 형제 요소를 단일 루트 컨테이너로 감싸세요.
<user><name>Alice</name></user> <user><name>Bob</name></user>
<users> <user><name>Alice</name></user> <user><name>Bob</name></user> </users>
XML 선언 인코딩 불일치
XML 파일이 UTF-16이나 다른 비-UTF-8 인코딩으로 저장되었지만 선언에 encoding="UTF-8"이 있으면(또는 기본값인 UTF-8로 설정된 선언이 없으면) 일부 파서가 이를 거부하거나 잘못된 결과를 생성합니다. 브라우저 기반 도구에 붙여넣을 때 브라우저가 인코딩을 자동으로 처리합니다. 디스크의 파일의 경우 인코딩 속성이 실제 파일 인코딩과 일치하는지 확인하세요.
<?xml version="1.0" encoding="UTF-8"?> <!-- File is actually saved as UTF-16 -->
<?xml version="1.0" encoding="UTF-16"?> <!-- File saved as UTF-16, declaration matches -->
CDATA 섹션이 올바르게 닫히지 않음
CDATA 섹션은 로 끝납니다. ]]> 닫기 시퀀스가 누락되거나 잘못 입력된 경우 파서는 다른 ]]>를 찾거나 문서 끝에 도달할 때까지 그 이후의 모든 것을 CDATA 섹션의 일부로 처리합니다. 이는 일반적으로 '예기치 않은 문서 끝' 오류로 나타납니다.
<script><![CDATA[
if (a < b && b > c) { return true; }
<!-- ]]> is missing --> <script><![CDATA[
if (a < b && b > c) { return true; }
]]></script> 주요 사용 사례
- SOAP / 웹 서비스 페이로드 디버깅
- 기업 API와 레거시 웹 서비스의 SOAP 응답은 한 줄 XML 문자열로 도착합니다. 원시 페이로드를 포맷터에 붙여넣어 엔벨로프 구조, 헤더, 본문을 즉시 확인하세요 — 필요한 필드를 찾거나 네임스페이스 불일치를 발견하기 쉽습니다. JavaScript에서 페이로드를 추가로 처리해야 한다면 XML to JSON 변환기를 참조하세요.
- 설정 파일 및 배포 설명자 유효성 검사
- Maven POM 파일, Spring XML 애플리케이션 컨텍스트, Tomcat server.xml, Android 매니페스트 파일 등 많은 Java/기업 설정 파일은 XML입니다. 빌드 또는 배포 시에만 나타나는 태그 불일치나 인코딩 문제를 미리 잡아내기 위해 커밋 전에 유효성 검사를 실행하세요.
- RSS 및 Atom 피드 출력 포맷팅
- RSS 2.0과 Atom 1.0 피드는 XML입니다. 피드 생성기를 개발하거나 피드 리더 호환성 문제를 디버깅할 때 원시 피드 XML을 포맷팅하여 채널 메타데이터, 항목 구조, 필요한 네임스페이스 선언을 나란히 검사하세요.
- SVG 파일 읽기 및 편집
- Figma, Illustrator, Sketch에서 내보낸 SVG 파일은 유효한 XML이지만 종종 최소화되거나 내보내기 도구의 과도한 들여쓰기가 포함되어 있습니다. 경로, 그룹 또는 스타일 속성을 수동으로 편집하기 전에 SVG를 포맷팅하여 탐색 가능한 요소 트리를 얻으세요.
- 저장 또는 전송을 위한 XML 준비
- 데이터베이스 열에 XML을 저장하거나 API 요청의 JSON 문자열 필드로 전송하거나 메시지 큐에 삽입할 때 먼저 최소화를 사용하여 불필요한 공백을 제거하세요. 이렇게 하면 페이로드 크기가 줄어들고 대용량 들여쓰기 XML 문자열의 이스케이프되지 않은 제어 문자로 인한 JSON 파서 문제를 방지할 수 있습니다.
- XML을 JSON으로 변환
- 포맷팅된 XML을 JavaScript 애플리케이션이나 REST API에서 사용하기 위해 JSON으로 변환해야 한다면 XML to JSON 변환기를 사용하세요. 반대로 JSON 구조에서 XML을 만들려면 JSON to XML 변환기를 사용하세요.
기술 세부 정보
- XML 파싱을 위한 브라우저 DOMParser
- XML 파싱은 브라우저의 네이티브 DOMParser에 'text/xml' MIME 타입을 사용합니다. 이는 브라우저에서 SVG와 XHTML 렌더링을 구동하는 동일한 엔진으로 — 완전히 XML 1.0 규격을 준수하며 줄 및 열 정보와 함께 형식 오류를 보고합니다. 문서가 올바른 형식이 아닌 경우 DOMParser는 오류 메시지와 위치를 포함하는 parsererror 문서를 반환하며, 이 도구가 이를 추출하여 표시합니다.
- 포맷팅을 위한 DOM 트리 직렬화
- 포맷팅은 XML을 DOM 트리로 파싱한 다음 들여쓰기된 출력을 생성하기 위해 트리를 재귀적으로 탐색하는 방식으로 작동합니다. 이 접근 방식은 문서의 의미 구조를 보존합니다: 요소 중첩, 텍스트 내용, 속성, CDATA 섹션, 처리 명령어, 주석이 모두 파싱된 그대로 직렬화됩니다. 공백만 포함하는 요소 간 텍스트 노드만 버려집니다 — 공백이 아닌 문자를 포함하는 텍스트 노드는 항상 보존됩니다.
- 공백만 포함하는 텍스트 노드 제거를 통한 최소화
- 최소화는 동일한 DOM 트리를 탐색하면서 내용이 완전히 공백(스페이스, 탭, 줄 바꿈)인 텍스트 노드를 제거합니다. 혼합되거나 공백이 아닌 내용이 있는 텍스트 노드 — 태그 사이의 실제 데이터 — 는 절대 제거되지 않습니다. 속성과 값은 추가 공백 없이 직렬화됩니다. 결과는 원본 문서의 가장 압축된 올바른 형식의 XML 표현입니다.
- 100% 브라우저 기반 — 업로드 없음, 서버 없음
- 모든 처리가 브라우저의 JavaScript 런타임에서 실행됩니다. 어떤 시점에서도 서버로 데이터가 전송되지 않습니다. 이는 민감한 내용을 자주 포함하는 XML 페이로드에 특히 중요합니다: SOAP WS-Security 토큰, HL7 환자 데이터, 내부 서비스 설정, 재무 메시지 형식(FIX, SWIFT ISO 20022). 이 도구는 공개 서비스에 붙여넣고 싶지 않은 모든 XML에 안전하게 사용할 수 있습니다.
모범 사례
- 포맷 전 유효성 검사, 커밋 전 포맷
- 재포맷하기 전에 먼저 XML 유효성 검사를 수행하여 올바른 형식인지 확인하세요 — 입력이 유효한 XML이 아닌 경우 포맷터가 자동으로 잘못된 출력을 생성할 수 있습니다. 유효성 검사 후 들여쓰기 출력을 포맷팅하여 검토한 다음 설정 파일, 피드 템플릿, WSDL 정의를 버전 관리에 커밋하세요.
- 웹 형식에는 2칸, 기업용 XML에는 4칸 들여쓰기 사용
- 2칸 들여쓰기는 RSS/Atom 피드, SVG, XHTML, Android XML, 웹 기반 XML의 관례입니다. 4칸 들여쓰기는 Java 기업 환경(Maven POM, Spring 컨텍스트 파일, JBoss 배포 설명자)에서 일반적입니다. 기존 파일과 도구체인의 관례와 일치시키세요.
- JSON에 포함시키기 전에 XML 최소화
- XML 문자열을 JSON 필드 값으로 포함시켜야 한다면 항상 먼저 최소화하세요. 들여쓰기된 XML에는 JSON 이스케이프가 필요한 줄 바꿈과 여러 공백(\n, 여러 \u0020)이 포함되어 있어 페이로드 크기가 크게 증가합니다. 최소화된 XML은 중간 프록시나 로깅 시스템의 줄 길이 제한을 트리거할 가능성도 훨씬 적습니다.
- 텍스트 내용의 특수 문자 이스케이프, CDATA는 드물게 사용
- & 또는 <가 포함된 짧은 텍스트 값에는 엔티티 참조(&, <)를 사용하세요 — 이는 CDATA 섹션보다 더 이식성이 높고 속성 값에서도 작동합니다. CDATA 섹션()은 모든 특수 문자를 이스케이프하면 내용을 읽기 어렵게 만드는 큰 코드 블록, SQL 쿼리, HTML 조각을 포함하는 경우에만 사용하세요.
- 가능한 빨리 네임스페이스 선언
- XML 네임스페이스(xmlns:prefix="URI")를 루트 요소 또는 접두사를 사용하는 최상위 요소에 선언하세요. 문서 트리 깊이에 네임스페이스를 선언하면 XML을 읽기 어렵고 네임스페이스를 점진적으로 처리하는 스트림 기반 XML 파서(SAX, StAX)에서 문제가 발생할 수 있습니다. 위의 SOAP 엔벨로프 예시는 권장 패턴을 보여줍니다: 루트 Envelope 요소에 모든 네임스페이스 선언을 배치합니다.
자주 묻는 질문
이 도구 사용 시 XML 데이터가 서버로 전송되나요?
유효성 검사 버튼은 무엇을 확인하나요?
유효성 검사가 XML 스키마(XSD)나 DTD를 검사하나요?
포맷(정리)과 최소화의 차이점은 무엇인가요?
포맷팅은 XML 주석과 속성을 보존하나요?
2칸 대신 4칸 들여쓰기로 XML을 포맷하려면 어떻게 하나요?
이 도구는 어떤 XML 버전과 인코딩을 지원하나요?
'형식 오류' 오류의 원인과 수정 방법은 무엇인가요?
XHTML 또는 SVG 파일을 포맷하는 데 이 도구를 사용할 수 있나요?
이 도구는 XML 네임스페이스를 어떻게 처리하나요?
XML 입력에 파일 크기 제한이 있나요?
XML을 JSON으로 또는 JSON을 XML로 변환하려면 어떻게 하나요?
관련 도구
모든 도구 보기 →Base64 디코더 · 인코더 (Base64 Decoder & Encoder)
인코딩 & 포매팅
Base64를 온라인에서 무료로 인코딩하고 디코딩합니다. UTF-8과 이모지를 완벽 지원하는 실시간 변환으로, 100% 브라우저에서 처리되어 회원 가입이 필요 없습니다.
CSV to JSON 변환기 (CSV to JSON Converter)
인코딩 & 포매팅
브라우저에서 CSV를 JSON으로 변환합니다. RFC 4180, 타입 추론, 헤더 행, 큰 정수 안전 처리. 100% 비공개, 업로드 없음.
JSON Diff 비교
인코딩 & 포매팅
두 JSON 파일을 브라우저에서 즉시 Diff 비교하세요. 나란히 보기 하이라이팅, RFC 6902 JSON Patch 출력, 타임스탬프·ID 같은 노이즈 필드 무시. 비공개, 업로드 없음.
JSON 포맷터 (JSON Formatter)
인코딩 & 포매팅
브라우저에서 JSON을 즉시 포매팅하고 유효성 검사를 수행합니다. 온라인 도구로 구문 검사, 오류 감지, 최소화, 복사를 지원하며 데이터는 서버로 전송되지 않습니다.
JSON Schema 검증기
인코딩 & 포매팅
JSON Schema 온라인 검증기. Draft 2020-12, 2019-09, Draft-07 지원에 JSON Pointer 경로 단위 오류 메시지. 100% 브라우저 처리, 업로드 없음, 무료.
JSON to CSV 변환기 (JSON to CSV Converter)
인코딩 & 포매팅
브라우저에서 JSON을 CSV로 변환합니다. RFC 4180, Excel-EU, TSV, Pipe 프리셋 지원. 중첩 평탄화 또는 문자열화. 100% 비공개, 업로드 없음.