Legacy/Web

[JavaScript] CDATA 선언문

Foo 2015. 7. 11. 14:43
728x90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko">
    <head>
        <title> new document </title>
        <meta http-equiv="content-type" content="text/html;charset=utf-8" />
        <script type="text/javascript">
            //<![CDATA[
                var num=100;
                var str="자바스크립트";
 
                document.write(typeof num, "<br />");
                document.write(typeof str, "<br />");
            //]]>
        </script>
 
    </head>
    <body>
  
    </body>
</html>
cs

위의 예제에 사용된 //<![CDATA[ //]]>는 무엇일까??

이것을 CDATA 선언문이라고 한다. 이 CDATA 선언문은 왜 작성하는 것일까??

이를 이해하려면 <head>태그에 올 수 있는 데이터가 어떤 것들이 있는지 생각해보자.

<head>태그에 올 수 있는 데이터는 <title>이나 <meta> 또는 <script> 같은 HTML 문서의 '본문(body)'에 적혀서 사용자 눈에 보이는 데이터들이 아니다.

그런데 이 <head>태그 안에 <br />태그가 존재하고 있다. 이것은 HTML 문서의 유효성(Validate)를 검사하는 파서(Parser)의 입장에서는 이것이 잘못되었다고

간주하여 사용자에게 경고 메시지를 띄워줄 수 있다. 경우에 따라 이것을 단순 경고가 아닌 오류로 처리하여 없는 라인으로 처리해버리는 경우

역시 발생할 수도 있기 때문에 위와 같은 경우 반드시 CDATA 선언을 해주어야한다.

CDATA 선언을 하면 왜 경고를 띄우지 않을까? CDATA 선언이 경고를 무시하도록 하는 것이 아니라

CDATA 선언을 하면 그 선언 안에 있는 내용들 중 '태그'가 있어도 그것을 '태그'로 작성한 것이 아니라 '문자열'의 일부로 작성한 것이라는 것을 알려주는 것이다.

때문에 JavaScript 안에 태그가 들어갈 경우 반드시 CDATA 선언 안에 넣어줘야한다.