Juwan Park :: XML에서 CDATA란 무엇인가?

XML에서 CDATA란 무엇인가?

★프로그래밍/HTML, CSS, JS, XML :: 2016.08.19 17:41

XML 문서를 보면 가끔 <![CDATA[ ... ]]> 이런 처리가 되어 있는 것을 볼 수 있습니다.

그럼 이 CDATA라는 게 과연 무엇인가 하는 궁금증이 드실 분도 계실 텐데요...

일단 CDATA가 무슨 뜻이냐 하면, 그것은 바로 'Character Data'. 즉, '문자 데이터'를 말하는 것입니다. 그런데 이 용어를 좀 더 정확하게 말하면 '(Unparsed) Character Data'. 즉, '파싱하지 않는 문자 데이터'라는 뜻입니다. 반대로, 파싱하는 문자 데이터는 'PCDATA'라고 부릅니다.

이게 왜 있는지 궁금하다면, 일단 다음 XML 문서를 봅시다.

<?xml version="1.0" encoding="UTF-8"?>
<dictionary>
  <term>
    <entry>볼드</entry>
    <description>글씨를 굵은 글씨로 강조한다. <b>...</b> 태그를 사용한다. <b> 대신 <strong>을 사용해도 된다.</description>
  </term>
</dictionary>

이 XML 파일에 무슨 문제가 있는 것일까요? 그래서 XML 파싱 프로그램을 써서 이 XML 파일대로 텍스트를 출력하게 해 보면,

볼드
글씨를 굵은 글씨로 강조한다. ... 태그를 사용한다.  대신 을 사용해도 된다.

이렇게 출력될 것입니다. 그런데 뭔가 이상합니다. 마땅히 들어가야 할 부분이 몇 군데 빠져 있습니다.

<b>, </b>, <strong> 이 세 개가 온데간데없습니다. 왜 그런 것일까요?

이유는 간단합니다. XML 파서가 <description>...</description> 내용도 어김없이 파싱할 대상으로 인식하기 때문입니다. 즉, 안에 있는 <b>와 <string>도 태그로 인식해 버려서 제대로 출력이 되지 않습니다.

그러면, 이를 막으려면 어떻게 하면 될까요? HTML 태그라면 < 대신 &lt;, > 대신 &gt;를 쓰면 되겠지만 XML에서는 더 좋은 방법이 있습니다. 당연히 <description> 안의 내용은 파싱할 수 없게 만들면 됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<dictionary>
  <term>
    <entry>볼드</entry>
    <description><![CDATA[글씨를 굵은 글씨로 강조한다. <b>...</b> 태그를 사용한다. <b> 대신 <strong>을 사용해도 된다.]]></description>
  </term>
</dictionary>

이렇게 고치고 다시 한 번 파싱해 봅시다.

볼드
글씨를 굵은 글씨로 강조한다. <b>...</b> 태그를 사용한다. <b> 대신 <strong>을 사용해도 된다.

이제서야 제대로 나오네요.

이렇듯 <![CDATA[ ... ]]>는 안에 들어가는 텍스트가 파싱되지 않게 하는 기능을 합니다. 이는 파서가 잘못 파싱할 수 있는 텍스트를 다룰 때, 파서의 잘못된 파싱을 방지할 수 있게 하는 것입니다. 예를 들자면 HTML 태그를 텍스트 데이터로 쓴다거나 할 때 등을 들 수 있겠습니다.


많은 도움 되셨나요?

유용한 정보로 활용하시기 바랍니다.

TAG ,
Today 6    Yday 29    Tot 67,005
Juwan Park
Juwan Park's blog is powered by Daum and TISTORY.
Contemporary Blue for TISTORY.
Designed by Juwan Park. Creative Commons License
▲ TOP