여기에 옮긴 글은 웹 개발 시에 항상 주의해야 할 비교적 긴 몇 가지의 항목들을 열거해 놓았다. 여기에 나열된 실수들을 모두 피할 수만 있다면 그것은 무난한 웹 개발이 잘 진행되고 있다는 뜻일 것이다. 고백하자면, 과거에는 나 자신도 이들 중 적어도 몇 가지는 같은 실수를 범했을 수 있으나, 이 항목들을 참고로 앞으로는 적어도 같은 실수를 피하는 데 도움이 되었으면 한다. 웹 개발시 저지르는 실수들(이)란 제목의 글 마저 읽기 →

웹 표준 – 단지 ‘테이블 없는 사이트’ 그 이상

웹 표준이란 말은 사람마다 다른 뜻을 지닐 수도 있다. 어떤 이들에게 이것은 ‘테이블을 안 쓰는 사이트’일 수도 있고, 또 다른 이들에게는 ‘표준에 맞는 코드를 사용하는 것’일 수도 있다. 하지만, 웹 표준이란 이런 것들보단 훨씬 더 광범위한 뜻을 내포하고 있다. 웹 표준에 맞게 제작된 사이트는 표준(HTML, XHTML, XML, CSS, XSLT, DOM, MathML, SVG 등)을 준수해야 하며 그에 따른 올바른 용례들(표준을 준수하는 코드, 접근이 쉬운 코드, 의미 구조론적으로 올바른 코드, 알아보기 쉬운 URLs 등)이 적용되어야 한다.

한 마디로, 웹 표준에 맞게 제작된 사이트란 군더더기 없고, 깨끗하며, CSS 기반에, 접근이 쉽고, 사용하기 쉬우며, 검색 엔진들이 색인하기에도 쉬운 사이트를 말한다. 웹 표준 검사 항목(이)란 제목의 글 마저 읽기 →

공공기관 사이트들을 포함한 한국 웹 사이트들의 심각한 웹 표준 규약 파괴현상을 몸소 체험하면서, (X)HTML 페이지의 첫 줄에 선언되는 DOCTYPE의 중요성을 다시 한 번 여기에도 기록해 두고자 한다.

World Wide Web Consortium (W3C)이 DOCTYPE의 중요성에 대해 강조하고 있는 것을 인용하면,

doctype을 추가해 주는 것을 잊지 마십시오.
뭘 추가해?
HTML에는 한 가지 형식만 있는 것이 아니고, 실제로는 여러 형식이 있는데, 여기에는 HTML 4.01 Strict, HTML 4.01 Transitional, XHTML 1.0 Strict 등 그 수는 여럿이랍니다. 이 모든 HTML 형식들은 각각의 W3C 규약에 정의되어 있으며, 기기가 읽을 수 있는 언어로서 HTML 형식의 적법한 구조와 구성 요소들 그리고 이러한 요소들의 해당 속성들로 정의되어 있습니다.
이러한 정의는 “Document Type Definition” 혹은 짧게 DTD라고도 불립니다.
HTML 문서들을 읽어들이는 웹 브라우저와 같은 도구들은 (X)HTML이 실제로 어떠한 DTD를 사용하고 있는지를 알아야 하고, 이것이 왜 (X)HTML 문서들의 맨 처음에 다음과 같은 DTD 선언문을 포함해야 하는지를 잘 설명해 줍니다:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

위에서 사용된 문법에서 보이다시피, DTD 선언문은 그냥 짧게 “Doctype”이라고도 불립니다.
그럼, 왜?
왜 DOCTYPE을 써야 하냐고요? 왜냐하면, 이것이 당신의 웹 문서가 어떤 버전의 (X)HTML로 쓰였는지를 정의해주고 웹 브라우저와 같은 도구들이 이 문서를 올바르게 읽어 드릴 수 있게 하기 위해서는 꼭 필요한 아주 중요한 정보이기 때문입니다.
예를 들어, 문서에 doctype을 지정해 두면, (X)HTML의 문법을 검사할 때 사용될 수 있는 Markup Validator와 같은 도구를 사용할 수가 있고, 그래서 기타 브라우저들에서도 올바르게 당신의 문서가 보일지를 확인해서 잘 못 된 오류들을 수정할 수가 있게 됩니다.
하지만, 무엇보다도 가장 중요한 것은 대부분의 웹 브라우저들이 doctype 선언문이 있음으로써, 불필요한 추측을 하게 만들지 않는다는 것입니다. 이것은, “표준” 분석 방식을 사용하게 하면서 문서가 화면에 표시되는 속도가 더 빨라질 뿐만 아니라, doctype이 없어서 생길 수도 있는 예기치 못한 문제들로부터 자유로워질 수 있습니다.

일반적으로, 웹 브라우저가 DOCTYPE이 선언되어 있지 않은 html 문서를 읽어들일 때는, 대충 짐작해서 읽어들이는 방식(“Quirks” mode)을 선택한다. (어쩌면 요새 개발/배포되는 웹 브라우저들이 너무 관대(?)해서 이런 상황이 고쳐지지 않고 있는지도…) 이렇게 되면, 브라우저는 옛날 90년대 말에 사용되었던 방식으로 웹 페이지를 해석하게 되며, 그야말로 대충 짐작해서 읽어들이게 되면서, 원래의 의도한 구조와는 다르게 페이지를 보여주게 되고 또한 브라우저마다 제각기 다른 결과물들을 표시해 줄 수밖에 없게 된다.

결국, 지금의 21세기에 와서도 그들의 HTML 문서에 DOCTYPE이 선언되어 있지 않았다면, 웹 표준을 깡그리 무시하겠다는 선언과도 같으며, 그 내용은 제쳐놓고서라도, 전달 방법은 20세기 과거의 것으로 남을 수 밖에 없다.

빨리 고쳐주세요! 😐

– 권장하는 추가 참고 글들

요새 폭설 피해 기사들을 보면서, 별 도움은 안 되겠지만, 뜬구름 widget에도 기상 특보 상황을 표시해 주는 기능을 추가해 놓으면 알맞겠다는 생각에 기상청 홈페이지를 살펴보았다. 물론 기상 특보 상황은 대문에서 바로 살펴볼 수 있으니, 문제는 이놈을 XMLHttpRequest Object로 끌어오기만 하면 되는 샘.
생각보다 쉬우리라는 기분으로 기능을 추가하고 뜬구름을 실행시켜 보았으나…감감무소식이다.
결국, 이런저런 궁리 끝에 console.log를 살펴보니, 다음과 같은 자국이 찍혀 있다.

[526] http://www.kma.go.kr/index.jsp:Error - DOM Exception 3

DOM Exception 3? 뭐지? Document Object Model Exception 3???

문제의 원인은, 기상청 홈페이지의 html 소스를 보면 금방 알아차리게 된다.

맙소사. !DOCTYPE은 물론이고 <html> 시작 꼬리표까지 없단다. (그렇다면, 맨 밑의 </html> 꼬리표는 실수로 붙었단 말이냐?)
정부 사이트들이 웹 표준 나 몰라라 하는 상황은 이미 알고 있었지만, 이 정도일 줄이야…
이것은 사이트 제작자의 실수 이전에, 기본을 지킬 수도 없는 무지에서 나온 결과랄 수 밖에 설명할 도리가 없다.

앞니가 빠진 꼬리표 덕분에, html 문서도 일반 글자 문서(plain text)도 아닌 어처구니 없는 상황인지라 XMLHttpRequest로는 원하는 정보를 끌어올 방법이 없다. (물론, 다른 꼼수는 있겠지만, 힘 빠지는 것은 마찬가지.)

그나마 아쉬운 마음에 대문에 쓰여 있는 국민으로부터 사랑받는 열린 기상청이라는 문구 때문에라도, 소귀에 경 읽기 심경으로, 문의 게시판에 정정 요구를 해봤지만, Safari와 Firefox에서는 글도 올라가지 않는다. 참으로 징하다. 🙁

전자 정부 부르짖는 그들은 실로 대~충 그까짓 거 뚝딱 정부로세. 👿

또 다른 탄생을 준비하고 있는 대~충 그까짓 거 뚝딱 현장 방문하기 << 말이 디지털이지 그 속 내는 그까짓 거 대~충하는 섬세하지도 못한 아날로그이다.

아시다시피, iChatAIM(AOL Instant Messenger) 계정을 등록해서 사용할 수 있으므로, 기타 다른 AIM 호환 메신저 클라이언트(messenger client) 사용자들 간의 대화가 가능합니다.

그렇다면, iChat의 활성 상태를 자신의 웹 페이지에 실시간으로 보여주게 된다면 이것 또한 멋지고 한편으론 아주 유용할 것입니다.

방법은 비교적 간단합니다. 아래와 같이 자기 AIM 게정의 활성 상태(online/offline status)를 AOL 서버에서 가져와서 활성/비활성에 따른 해당 그림을 표시해 주기만 하면 됩니다. (물론 활성/비활성 그림들은 따로 마련해 두셔야 겠지요.)

<a href=”aim:goim?screenname=당신의 AIM 계정 사용자 이름&amp;message=활성 표시 그림을 눌렀을 경우 대화 창에 자동으로 입력되는 말”><img src=”http://big.oscar.aol.com/당신의 AIM 계정 사용자 이름?on_url=http://활성 상태를 표시할 그림의 주소\&off_url=http://비활성 상태를 표시할 그림의 주소” alt=”iChat Status” width=”그림의 넓이” height=”그림의 높이” border=”0″ /></a>

이 곳 표딱지의 iChat 그림 옆에 초록색 불이 들어오면, 언제든지 환영입니다. 😉