Feed on
Posts
Comments

웹표준이 웹종사자들에게 알려진지 벌써 수개월이 흘렀다.
(수개월 뿐이겠는가.. 그동안 비슷한 세미나,컨퍼런스,워크샵 등등 생각해보면 참 많았다.)
하지만 아직까지 웹표준에 준수한 사이트는 많이 늘어나지 않았고, 그 문제중 하나로 가장 근본적인 문서선언부 부분부터 제대로 선언하지 않는 사이트가 많은 것 같다.
웹페이지를 제작하면서 확장자만 .html 로 제작하면 모두 웹페이지라는 생각을 오늘부터는 버렸으면 하는 바램으로 DOCTYPE의 바른 선언과 올바른 문서정의에 대해 알아보기로 하겠다.
사전적인 용어와 해설을 포함하는 글이다보니 다소 딱딱한 내용일 수도 있지만 문서를 제작함에 있어 기본인 부분을 잘 알고 넘어가야 된다는 생각에 반드시 제대로 알고 넘어가기를 바란다.

DOCTYPE 이란?

DOCTYPE은 “문서의 종류를 선언할 때 필요한 마크업 이다.” 라고 정의 내릴 수 있는 Tag 이다.
하지만, 그나마 IE에서는 quirks mode로 인식하는(http://hsivonen.iki.fi/doctype/ - 참조) “<!doctype HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>” 라도 선언이 되어있는 사이트면 그나마 양호한 사이트라고 말 할 수 있지만, 국내 사이트중 DOCTYPE을 아에 선언하지 않는 페이지를 찾기가 더 쉬울것이다.
이렇게 DOCTYPE 선언하지 않는다면 브라우저는 현재 페이지가 어떠한 HTML 버전을 사용하고 있는지 모르게 때문에 호환모드(quirks mode)로 변환을 해서 rendering(화면묘사)하게 된다.
이렇게 브라우저가 알아서 호환모드로 변환하여 rendering 된다는건 어찌보면 브라우저가 똑똑하다고 생각할 수 있지만 실제론 그 반대이다.
마크업과 스타일시트의 조합으로 멋진 사이트를 제작하였다 하더라도 호환모드로 rendering한 브라우저는 매번 똑같은 화면묘사를 보여준다는 보장을 할 수 없기때문에 사용자에게 큰 혼란을 가져다 줄 수도 있기때문이다.
DOCTYPE이 이렇게 중요한 것인 만큼 이제는 올바르게 알고 사용해야 하지 않을까 생각한다.
하지만 DOCTYPE을 선언 해서 문서의 유형을 올바르게 정의내리는것이 맞다는걸 알고 있지만 기존에 진행되던 방식을 하루아침에 바꿀 수는 없을 것이기 때문에 쉽게 바꾸지 않은 곳도 있을 것이다. 그렇다고 계속 선언을 하지 않고 페이지를 제작한다면 과거의 좋지않은 작업방식을 그대로 사용하는 것이니 시간을 가지고 조금씩 개선을 해야 할 필요가 있겠고, 그러기위해 사용해야 할 DOCTYPE의 종류중 대표적인 몇가지에 대해 살펴보면,
DOCTYPE은 문서의 목적이나 구조에 따라 필요한 DOCTYPE을 선언할 수 있다고 되어 있다.
그 종류에는 엄격한 문법과 구조를 요구하는 strict 버전과 구버전의 속성이나 Tag를 허용하는 transitional 버전 그리고 frame 을 이용해 페이지를 제작하려면 frameset 버전이 있다.
일반적으로는 브라우저가 이전 버전을 수용해야할 상황이 있을 수 있으므로 transitional 을 많이 사용한다.
하지만 transitional버전을 사용한다고해서 과거 표현만을 위한 Tag를 허용한다고 해서 계속 사용한다면 문법상으로는 이상이 없으나 웹페이지의 효율성과 접근성은 저해될 것 이니 이런 부분들 까지도 신중하게 판단해서 사용해야 할 것이다.

올바른 문서정의

문서를 정의할때 필요한 몇가지중 위에서 언급한 문서유형 선언이 있고 다음으로 언급할 내용이 언어선언이다.
언어선언은 기본적으로 html 태그에 lang속성을 이용해서 설정하고, 만약 xhtml1.0 이상의 DOCTYPE을 선언했다면 HTTP의 헤더 또는 html 태그에는 xml:lang 속성으로 문서의 주 언어를 선언해서 설정한다.
사실 이 언어선언은 반드시 필요한 사항은 아니지만 접근성을 위해서는 고려해야할 사항이다. 그리고 문서에 주 언어를 선언한 후에도 Tag에 별도로 재 선언을 할 수 있으니 필요한 곳에 필요한 언어선언을 한다면 조금은 접근성이 더 높아진 사이트라 할 수 있다.
컨텐츠유형 정의 또한 올바른 문서 정의를 위해 꼭 필요한 요소이다.
컨텐츠유형 정의에는 미디어 유형(예:Content-Type:text/html)과 HTML 문서의 문자설정(예:charset=”utf-8″)을 선언하며 반드시 명시되어야 한다.
먼저 Content-Type은 MiME(Mulitipurpose Internet Mail Extension) type 이라 부르며 어떠한 미디어 형식인지를 브라우저에게 알려주는 역활을 한다.
모든 파일은 이 MIME type 을 가지고 있는데 예를들면 JPEG 파일은 image/jpeg, CSS파일은 text/css 등이 있고 일반적인 HTML 페이지라면 text/html 을 사용하면 된다.
Character set은 문서의 문자 형식을 설정 하기위해 선언하는데, 이는 문서에 작성된 혹은 작성되는 문자를 고려해서 설정해야한다.
예를들면 서양언어와 라틴계열 언어를 지원하는 “ISO-8859-1″, 그리고 아시아어(일본어,’UTF-8′ 포함)를 지원하는 “SHIFT_JIS”가 있고, 특수문자와 같은 광범위한 문자를 지원하는 Unicode 포멧 등이 있는데, 별도로 선언이 되지 않는다면 기본적으로 ‘ISO-8859-1′이 선언된다. 하지만 대부분의 문자를 표현 할 수 있고 사용하기 안전한 코드이며 대부분의 컴퓨터에서 무리없이 작동이 가능한 ‘UTF-8′을 사용하는 것이 바람직 할 것이다.
위 내용의 컨텐츠유형을 선언하기 위해서는 몇가지 방법이 있는데 Client Side 선언방식인 ‘<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />’ Tag를 이용하는 방식이 있고 Server Side 에서 선언하는 방식이 있다. 상황에 맞는 방식을 선언해서 컨텐츠의 유형을 설정해야 할 것이다.

끝으로
HTML 문서는 HTTP 헤더 영역을 올바르게 선언했을때 비로소 HTML 문서로서의 효력을 가진다고 볼 수 있다. 그와 더불어 의미에 맞는 적법한 마크업과 표현을 분리해서 제작한다면 접근성마저 높은 가장 이상적인 페이지가 아닐까 생각해본다.

이 글은 StandardMagazine 에서 다양한 의견과 함께 보실 수 있습니다.

Comments are closed.