ToolDeck

XML Validator

XML 구문을 검증하고 형식 오류 확인

예시 시도

XML 입력

로컬에서 실행 · 시크릿 붙여넣기 안전

XML 유효성 검사란?

XML 유효성 검사기는 XML 문서가 XML 1.0 사양(W3C 권고안, 5판)에 정의된 구조 규칙을 따르는지 확인합니다. 최소한 이 XML 유효성 검사기는 문서가 올바른 형식(well-formed)인지 확인합니다. 즉, 단일 루트 요소가 있고, 모든 태그가 올바르게 중첩되고 닫혀 있으며, 속성 값이 따옴표로 묶여 있고, 예약 문자가 사전 정의된 엔티티를 사용하는지 검사합니다. 이러한 검사 중 하나라도 실패하면 XML 파서는 잘못된 출력을 조용히 생성하는 대신 오류를 발생시킵니다.

올바른 형식(well-formedness)과 유효성(validity)의 구분은 중요합니다. 올바른 형식의 XML 문서는 XML 사양 자체의 문법 규칙을 만족합니다. 유효한 XML 문서는 한 단계 더 나아가 DTD(Document Type Definition), XSD(XML Schema Definition), Relax NG 스키마 같은 외부 스키마에 정의된 제약 조건도 준수합니다. 이 도구는 첫 번째이자 가장 일반적인 유효성 검사 단계인 올바른 형식을 확인합니다. 이 단계 없이는 이후의 어떤 처리도 진행할 수 없습니다.

XML 유효성 검사는 오류가 운영 환경에 도달하기 전에 잡아냅니다. 닫히지 않은 태그, 일치하지 않는 요소 이름, 이스케이프되지 않은 앰퍼샌드, 중복 속성은 수동으로 편집한 XML에서 가장 흔히 발생하는 실수입니다. 언어마다 파서가 이러한 오류를 다르게 처리합니다. 어떤 파서는 조용히 실패하고, 어떤 파서는 부분적인 결과를 반환하며, 어떤 파서는 예외를 발생시킵니다. 먼저 유효성 검사기를 통해 XML을 실행하면 이러한 모호함이 사라지고 오류 위치 정보와 함께 명확한 합격/불합격 결과를 얻을 수 있습니다.

온라인 XML 유효성 검사기를 사용하는 이유

XML 구문 오류를 초기에 잡아내면 XML 데이터를 사용하는 애플리케이션에서 연쇄적인 장애를 방지할 수 있습니다. 브라우저 기반 유효성 검사기는 커맨드라인 도구를 설치하거나 IDE 플러그인을 구성하지 않고도 즉각적인 피드백을 제공합니다.

즉각적인 오류 감지
XML을 붙여넣으면 1초 안에 정확한 오류 위치와 함께 합격/불합격 결과를 확인할 수 있습니다. 빌드 파이프라인이나 CLI 도구 설정을 기다릴 필요가 없습니다.
🔒
개인정보 우선 처리
모든 파싱과 유효성 검사는 DOMParser API를 사용하여 브라우저에서 수행됩니다. XML이 기기를 벗어나지 않으며 어떤 서버에도 전송되지 않습니다.
🎯
정확한 오류 보고
유효성 검사가 실패하는 정확한 줄과 열, 그리고 오류 설명을 확인할 수 있습니다. 애플리케이션 코드의 파서 스택 트레이스를 읽는 것보다 훨씬 빠릅니다.
📋
계정 또는 설치 불필요
페이지를 열고, XML을 붙여넣고, 결과를 확인하세요. 회원가입 양식도, 데스크톱 소프트웨어도, 브라우저 확장 프로그램도 필요하지 않습니다.

XML 유효성 검사기 활용 사례

프론트엔드 개발
SVG 파일과 XHTML 조각을 React나 Vue 컴포넌트에 임베드하기 전에 유효성을 검사합니다. SVG에서 닫히지 않은 태그 하나가 전체 컴포넌트 트리를 깨뜨릴 수 있습니다.
백엔드 엔지니어링
서드파티 API의 SOAP 응답, XML-RPC 페이로드, RSS/Atom 피드를 확인합니다. 역직렬화 로직을 작성하기 전에 원시 응답의 유효성을 검사하면 런타임에서 파서 예외를 디버깅하는 수고를 덜 수 있습니다.
DevOps 및 CI/CD
자동화된 편집 후 Maven pom.xml, .csproj, Ant 빌드 파일이 올바른 형식인지 확인합니다. 빌드 설정의 구문 오류는 파이프라인 전체를 불명확한 오류 메시지와 함께 실패하게 만들 수 있습니다.
QA 및 테스트
통합 테스트를 실행하기 전에 XML 테스트 픽스처와 예상 출력 파일의 유효성을 검사합니다. 잘못된 형식의 픽스처는 디버깅 시간을 낭비하게 만드는 거짓 음성(false negative)을 유발합니다.
데이터 엔지니어링
데이터베이스, 정부 공개 데이터 포털, ETL 파이프라인에서 나온 XML 내보내기를 확인합니다. XPath 쿼리나 XSLT 변환을 작성하기 전에 구조를 검증하면 깨진 소스 데이터에 낭비되는 노력을 방지합니다.
XML 학습
W3C XML 또는 XSLT 튜토리얼을 따라가는 학습자가 연습 파일을 유효성 검사기에 붙여넣어 구문을 확인할 수 있습니다. 오류 메시지가 정확한 문제 위치를 가리켜 학습 사이클을 단축시킵니다.

XML 올바른 형식 규칙

XML 1.0 사양은 엄격한 문법 규칙 집합을 정의합니다. 문서가 올바른 형식으로 간주되려면 모든 규칙을 만족해야 합니다. 아래 표는 각 규칙, 요구 사항, 올바른 예시를 나열합니다. 대부분의 유효성 검사 오류는 이 규칙 중 하나로 거슬러 올라갑니다.

규칙요구 사항올바른 예시
Single root elementDocument must have exactly one root<root>...</root>
Matched tagsEvery opening tag needs a closing tag<p>text</p>
Proper nestingTags must close in reverse order of opening<a><b>...</b></a>
Quoted attributesAttribute values must be in single or double quotes<el attr="val"/>
Entity escapingReserved characters must use predefined entities&lt; &gt; &amp; &quot; &apos;
Case sensitivityTag names are case-sensitive: <A> is not </a><Book>...</Book>
No duplicate attributesEach attribute name must appear once per element<el a="1" b="2"/>
Valid XML declarationIf present, must be the very first line<?xml version="1.0"?>

올바른 형식 vs. DTD 유효성 vs. 스키마 유효성

XML 유효성 검사에는 세 가지 단계가 있습니다. 이 도구는 첫 번째 단계(올바른 형식)를 확인하며, 이는 나머지 두 단계의 전제 조건입니다.

올바른 형식(Well-formed)
XML 1.0 문법 규칙을 만족합니다. 단일 루트, 태그 쌍 일치, 속성 따옴표 처리, 올바른 중첩이 요구됩니다. 모든 XML 파서는 이를 먼저 확인합니다. 문서가 올바른 형식이 아니라면 XML이 아닙니다.
DTD 유효(DTD-valid)
허용되는 요소와 속성, 순서, 개수를 지정하는 Document Type Definition을 준수합니다. DTD는 인라인으로 선언하거나 DOCTYPE 참조를 통해 지정합니다. DTD 유효성 검사는 레거시 시스템과 XHTML에서 일반적입니다.
스키마 유효(XSD / Relax NG)
XML Schema Definition(XSD) 또는 Relax NG 스키마를 준수합니다. 이러한 스키마는 데이터 타입(integer, date, URI), 네임스페이스, 복잡한 콘텐츠 모델을 지원합니다. XSD 유효성 검사는 SOAP 웹 서비스, HL7 의료 데이터, 엔터프라이즈 통합에서 표준입니다.

코드 예시

다양한 언어에서 프로그래밍 방식으로 XML 유효성을 검사합니다. 각 예시는 올바른 형식을 확인하고 문서가 잘못된 형식인 경우 오류 메시지를 반환합니다.

JavaScript (DOMParser)
function validateXML(xmlString) {
  const parser = new DOMParser()
  const doc = parser.parseFromString(xmlString, 'application/xml')
  const error = doc.querySelector('parsererror')
  if (error) {
    return { valid: false, message: error.textContent }
  }
  return { valid: true, message: 'Well-formed XML' }
}

validateXML('<root><item>hello</item></root>')
// → { valid: true, message: "Well-formed XML" }

validateXML('<root><item>hello</root>')
// → { valid: false, message: "Opening and ending tag mismatch..." }
Python
import xml.etree.ElementTree as ET

def validate_xml(xml_string):
    try:
        ET.fromstring(xml_string)
        return True, "Well-formed XML"
    except ET.ParseError as e:
        return False, str(e)

valid, msg = validate_xml('<root><item>hello</item></root>')
# → (True, "Well-formed XML")

valid, msg = validate_xml('<root><item>hello</root>')
# → (False, "mismatched tag: line 1, column 27")

# With lxml — also supports XSD schema validation
from lxml import etree
schema = etree.XMLSchema(etree.parse('schema.xsd'))
doc = etree.fromstring(b'<root><item>hello</item></root>')
schema.validate(doc)  # → True or False
Go
package main

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

func validateXML(raw string) error {
    decoder := xml.NewDecoder(strings.NewReader(raw))
    for {
        _, err := decoder.Token()
        if err != nil {
            if err.Error() == "EOF" {
                return nil
            }
            return err
        }
    }
}

func main() {
    err := validateXML("<root><item>hello</item></root>")
    fmt.Println(err) // → <nil>

    err = validateXML("<root><item>hello</root>")
    fmt.Println(err) // → XML syntax error: unexpected end element </root>
}
CLI (xmllint)
# Check well-formedness (part of libxml2, pre-installed on macOS/Linux)
xmllint --noout document.xml
# Exit code 0 = valid, non-zero = errors printed to stderr

# Validate against an XSD schema
xmllint --noout --schema schema.xsd document.xml

# Validate against a DTD
xmllint --noout --dtdvalid schema.dtd document.xml

# Validate from stdin
echo '<root><unclosed>' | xmllint --noout -
# → :1: parser error : Premature end of data in tag unclosed line 1

자주 묻는 질문

올바른 형식(well-formed)과 유효한(valid) XML의 차이점은 무엇인가요?
올바른 형식의 XML은 XML 1.0 사양의 문법 규칙을 따릅니다. 하나의 루트 요소, 올바르게 중첩되고 쌍이 맞는 태그, 따옴표로 묶인 속성이 필요합니다. 유효한 XML은 한 단계 더 나아가 허용되는 요소, 속성, 데이터 타입을 정의하는 DTD 또는 XSD 스키마도 준수합니다. 문서는 올바른 구문을 가지고 있지만 스키마 제약 조건을 위반하면 올바른 형식이지만 유효하지 않을 수 있습니다.
XML 문서가 유효하지만 올바른 형식이 아닐 수 있나요?
아니요. 올바른 형식은 유효성의 전제 조건입니다. 문서가 XML 구문 규칙을 위반하면(닫히지 않은 태그, 따옴표 없는 속성 등) 파서가 문서에서 트리를 구성할 수 없으므로 스키마 유효성 검사 자체가 시작될 수 없습니다. 올바른 형식 오류를 먼저 수정한 후 스키마 검증을 진행하세요.
가장 흔한 XML 유효성 검사 오류는 무엇인가요?
가장 자주 발생하는 다섯 가지 오류는 닫히지 않거나 일치하지 않는 태그, 텍스트 내용의 이스케이프되지 않은 앰퍼샌드, 따옴표 없는 속성 값, 루트 요소 누락, 태그 이름의 대소문자 오류(XML은 대소문자를 구분함)입니다. 이러한 오류의 대부분은 XML을 직접 편집하거나, 적절한 XML 직렬화기 대신 코드에서 문자열 연결을 사용하는 경우에 발생합니다.
XML 유효성 검사와 XML 린팅은 같은 것인가요?
겹치는 부분이 있지만 동일하지는 않습니다. 유효성 검사는 문서가 XML 사양(올바른 형식) 또는 스키마(DTD/XSD)를 준수하는지 확인합니다. 린팅은 일반적으로 여기서 더 나아가 일관되지 않은 들여쓰기, 사용하지 않는 네임스페이스 선언, 중복된 기본 속성 값 같은 스타일 문제도 지적합니다. libxml2의 xmllint는 두 가지를 모두 결합합니다. --noout은 올바른 형식을 확인하고, --schema는 XSD 유효성 검사를 추가합니다.
XML 유효성 검사는 JSON 유효성 검사와 어떻게 다른가요?
XML은 JSON보다 문법이 더 엄격하고 복잡합니다. XML은 여는/닫는 태그 쌍, 속성, 네임스페이스, 혼합 콘텐츠(텍스트와 요소의 혼합)를 지원하며 여러 스키마 언어(DTD, XSD, Relax NG, Schematron)를 갖추고 있습니다. JSON 유효성 검사는 중괄호/대괄호 쌍 일치, 따옴표로 묶인 키, 쉼표 위치를 확인합니다. JSON Schema가 존재하지만 XSD보다 단순합니다. XML 문서는 동일한 데이터에 대해 JSON보다 일반적으로 2~3배 더 큽니다.
이 도구는 XSD 또는 DTD 스키마에 대해 유효성을 검사하나요?
이 도구는 올바른 형식만 확인합니다. XML이 XML 1.0 사양의 문법 규칙을 따르는지 확인하며, 외부 DTD 또는 XSD 스키마에 대해서는 유효성을 검사하지 않습니다. 스키마 유효성 검사를 위해서는 커맨드라인에서 xmllint --schema를 사용하거나 XSD와 Relax NG를 모두 지원하는 Python의 lxml을 사용하세요.
XML이 올바르게 보이는데 유효성 검사에 실패하는 이유는 무엇인가요?
가장 흔한 보이지 않는 원인은 XML 선언 이전의 BOM(바이트 순서 표시), 닫는 루트 태그 뒤의 불필요한 문자, 텍스트 내용의 이스케이프되지 않은 앰퍼샌드(&amp; 사용 필요), 또는 선언되지 않은 네임스페이스 접두사입니다. XML을 16진수 뷰어에 복사하거나 xmllint --noout으로 실행하면 오류의 정확한 바이트 오프셋을 확인할 수 있습니다.