w3c란?
월드 와이드 웹 컨소시엄World Wide Web Consortium의 축약어다. 월드 와이드 웹을 위한 표준을 개발하고 장려하는 조직으로 팀 버너스 리를 중심으로 1994년 10월에 설립되었다. i18n, w3c처럼 글자가 많은 단어는 생략하고 글자 개수로 쓰는 경우가 종종 있다. www도 마찬가지로 w가 3개 반복되므로 w3이라고 축약한 것. i18n의 경우 internationalization의 축약으로 국제화, 즉 다국어 지원을 나타낸다.
웹의 아버지
팀 버너스 리와 로베르 카이오
팀 버너스 리는 웹의 아버지로 불리우는 인물로 1989년 글로벌 하이퍼텍스트 프로젝트를 제안하고 월드 와이드 웹의 하이퍼 텍스트 시스템을 고안/개발했다. URL, HTTP, HTML 최초 설계와 구현도 CERN 시절에 동료였던 로베르 카이오 등과 함께 그가 주도 하였다.
로베르 카이오는 CERN 재직시절에 1987년 최초의 하이퍼텍스트 시스템을 제안하였고 월드 와이드 웹 이라는 명칭으로 불리우기도 전에 개발에 관하여 팀 버너스 리와 공동작업을 수행했다.
하이퍼 텍스트
사진: 위키피디아
hyper의 어원은 그리스어 Huper로 over, beyond의 의미를 갖는다. hyper 또한 마찬가지의 의미이다. 하이퍼 텍스트를 굳이 번역하자면 텍스트 저너머로 또는 초월 텍스트 정도 되시겠다. 말 그대로 본문을 뛰어넘어 다른 본문으로 이동할 수 있는 시스템을 일컫는다.
하나의 하이퍼 텍스트 문서 안에서 사용자는 하이퍼링크를 통하여 다른 문서로 이동할 수 있다. 그래서 anchor 태그의 다른 페이지를 가리키는 속성명이 Hyper Reference, 즉 href가 된 것이다. 한 가지 재미있는 것은 세계 최초의 웹 사이트가 아직 서비스중이라는 점이다.
마크업 언어
어릴적 받아쓰기 시험에서 띄어쓰기를 틀려 위쪽에 체크표시를 받아본 기억이 있을 것이다. 마크업 언어는 이런 우리가 흔히 사용하는 밑줄쫙, 돼지꼬리 땡땡과 같은 교정부호를 가리키는 언어이다. 문서의 부가적인 정보들로써 전산용어로 찾아보자면 메타데이터라 할 수 있겠다.
당시 하이퍼텍스트는 지금처럼 애니메이션이나 이미지, 동영상이 넘치는 곳이 아니었다. 당시 문서를 공유한다고 하면 매뉴얼이 주 목적이었고, 이것을 쉽게 접근하기 위한 것이 주 목적이었다. 그렇기 때문에 하이퍼 텍스트는 말 그대로 책의 한 쪽페이지을 나타내기 위한 방법으로 고안된 것이다. 이것은 자연스럽게 원고교정과 같이 문서의 구조를 나타낼 수 있는 방법으로 마크업 언어를 채택한 것이라 짐작해볼 수 있다.
마크업 언어는 태그와 속성을 이용하여 문서의 데이터 구조를 기술하는 표현법이다. 사실 태그라고 하는 것은 원래 텍스트와는 별개로 원고의 교정부호와 주석을 표현하기 위한 것이었으나 용도가 점차 확장되어 문서의 구조를 표현하는 역할까지 하게 되었다.
마크다운 언어
### 마크다운 언어
마크업 언어를 통해 화면을 표시한다면 마크다운은 비교적 이해하고 읽기 쉬운 언어를 작성해 마크업 언어(HTML)로 변환하는 것이 목적이다. 서로 다른 목적으로 이용되기 때문에 업, 다운으로 표현된다. 이 글도 마크다운으로 작성되고 HTML로 화면에 표현되고 있다.
마크다운 언어는 마크업 언어에 비하여 비교적 이해하기 쉬운 언어로 작성하여 마크업 언어HTML로 변환하는 것이 목적이다. 서로 다른 목적으로 이용되기 때문에 업, 다운으로 표현된다. 이 글도 마크다운으로 작성되고 HTML로 화면에 표현되고 있다.
GML
:h1 id='recipe'.Chapter 1: 개꿀맛 라면 레시피
:ol.
:li.550ml 물을 끓인다...
Generalized Markup Language의 약어로 IBM에서 1960년대 말에 개발하였다.
SGML
<!doctype recipe system "recipe.dtd">
<recipe>
<title>라면</title>
<comment>개꿀맛 레시피</comment>
<ingredients>
<ingredient quant='550' ml>물
<ingredient quant='1' ea>분말 스프
<ingredient quant='1' ea>건더기 스프
<ingredient quant='1' ea>면
</ingredients>
<method>
<list>
<item>550ml 물을 끓인다.
<item>스프를 먼저 푼다.
<item>물이 끓으면 면과 건더기 스프를 넣는다.
<item>알맞게 익으면 완성
</list>
</method>
<source>봉지 뒷면 조리법</source>
</recipe>
Standard Generalized Markup Language의 약어로 문서용 마크업 언어를 정의하기 위한 메타 언어이다. GML의 후속으로 ISO 표준이다.
XML
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Recipe SYSTEM "recipe.dtd">
<Recipe>
<title>개꿀맛 라면 레시피</title>
<list>
<item>550ml 물을 끓인다.</item>
<item>스프를 먼저 푼다.</item>
<item>물이 끓으면 면과 건더기 스프를 넣는다.</item>
<item>알맞게 익으면 완성</item>
</list>
</Recipe>
eXtensible Markup Language의 약어이다. SGML의 단순화된 부분집합으로 많은 종류의 데이터들을 기술하는 데 사용할 수 있다. XML은 주로 다른 종류의 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받게 하여 HTML의 한계를 극복할 목적으로 만들어졌다.
HTML
Hyper Text Markup Language의 약어다. 제목, 단락, 목록등과 같은 본문을 위한 구조적 의미와 더불어 인용과 그 밖의 문서로 연결할 수 있는 방법을 제공한다. 또한, 이미지와 객체를 내장하여 대화형 양식을 생성하는 데 사용될 수 있으며 외관과 배치를 정의하는 CSS 같은 스크립트를 포함하거나 불러올 수 있다. 팀 버너스 리가 HTML의 원형인 인콰이어를 제안하였고 1990년 말에 HTML을 명시하고 브라우저와 서버 소프트웨어를 작성했다. 이때 SGML의 영향을 강하게 받았다.
XHTML
XHTML은 HTML과 동등한 표현 능력을 지닌 XML 마크업 언어로 HTML보다 엄격한 문법을 가진다. HTML이 SGML의 응용인 것에 반하여 SGML의 제한된 부분집합인 XML의 응용이다. XHTML 문서는 하나의 XML 문서로서 문법적으로 정확해야 하기 때문에, HTML과는 달리 표준 XML 라이브러리를 이용한 자동화된 처리가 가능하다.
많은 사람들이 HTML의 최신버전으로 보고 있지만 두개는 별개의 표준이며 W3C는 지속적으로 웹 출판에서 XHTML 1.1, XHTML 1.0, HTML 4.01을 이용하길 권장한다. HTML에서 전통적인 XHTML으로의 변화는 미미하지만 완전한 XML 문서라는 주된 목적이 이루어질 수 있다.
HTML5
HTML4와의 차이점을 한 번 읽어보는 것을 추천한다. 비디오, 오디오 등 다양한 부가기능과 최신 멀티미디어 콘텐츠를 ActiveX 없이1 브라우저에서 쉽게 볼 수 있게 하는 것을 목적으로 한다. 또한, 장치 독립적으로 구성하여 모바일이나 기타 장치 환경에서 호환이 가능하도록 하기 위한 목적이 있다.
HTML vs XHTML vs HTML5 ?
HTML5를 선택하면 된다. 어차피 의미론적으로는 동일하며 W3C가 다른 표준안을 공표한다면 그때가서 생각해봐도 될 일이다.
ISO?
International Organization for Standardization 국제표준화기구를 말한다. 나라마다 다른 산업, 통상 표준의 문제점을 해결하기 위해 국제적으로 통용되는 표준국제표준을 개발하고 보급한다.
CGI?
Common Gateway Interface를 뜻한다. 본디 웹 서버라 함은 저장되어있는 정적인 페이지를 보여주는 일을 하는 프로그램이다. 웹의 활용도가 점차 증가하면서 사용자와 서버간의 대화형 프로그램을 구현하고 싶은 요구가 있었고 이에 맞춰 나온 기술이 CGI 이다.
CGI는 그저 정적인 페이지를 응답하던 웹 서버와 어플리케이션을 이어주는 중간 인터페이스 역할을 하였다. 그러나 매 요청마다 프로세스를 만들어야 하고 DB 연결을 해야했기 때문에 성능이 많이 느렸다.
이 CGI 기술을 한 요청만 처리하지 않고 여러 요청을 처리할 수 있도록 개량한 것중 하나가 fastCGI 이다. 리눅스에서 Nginx를 PHP로 구동하게되면 이 fastCGI 모듈을 사용하여 어플리케이션과 웹 서버간에 통신을 한다.
그럼 Node Js로 만든 웹 서버는 CGI인가?
NO! 말 그대로 웹 서버를 만든 것이지 CGI를 구현한 것이 아니다. CGI는 다른 인터페이스와 마찬가지로 표준이 있으며 이 표준에 맞추어 구현해야 CGI 프로그램이라고 할 수 있겠다. 비약하자면 Nginx와 PHP 언어로 만든 어플리케이션은 별개이다. 이 두 프로그램이 통신하는 인터페이스가 CGI이고 실제로 통신할 수 있도록 Nginx와 PHP 둘다 CGI를 구현한 부분이 있을 것이다.
Footnotes
-
대한민국에선 어림도 없지. "아아- 이것은 『추가 보안 설치프로그램』이라고 한다." ↩