마크업 언어

[섬네일|레시피 생성을 위한 XML 기반의 간단한 마크업 언어인 [RecipeML의 예시. 마크업은 HTML, PDF 또는 서식 있는 텍스트 포맷과 같은 디스플레이를 위해 프로그래밍 방식으로 변환될 수 있다.|alt=XML 파일 스크린샷.]]
**마크업 언어**(markup 言語, markup language)는 문서의 구조와 서식, 그리고 잠재적으로 각 부분 간의 관계를 지정하는 텍스트 인코딩 시스템이다. 마크업은 문서의 표시를 제어하거나 자동화된 처리를 용이하게 하기 위해 콘텐츠를 보강할 수 있다.

마크업 언어는 문서에 포함될 수 있는 마크업 정보와 해당 정보가 문서 콘텐츠와 결합되는 방식을 관리하는 규칙 집합으로, 사람과 컴퓨터 프로그램이 쉽게 사용할 수 있도록 한다. 이 아이디어와 전문 용어는 편집자가 수정 지시를 내리며 종이 사본에 마크업하는 방식에서 진화했으며, 전통적으로 작가의 원고에 빨간 펜이나 파란 연필 (편집)로 작성되었다.

일반적으로 조판 및 표시에 중점을 둔 이전 마크업 언어에는 troff, TeX 및 LaTeX가 있다. Scribe와 XML과 같은 대부분의 현대 마크업 언어는 스타일 시트와 같은 기술이 서식이나 기타 처리를 적용하는 데 사용될 것이라는 기대와 함께 문서 구성 요소(예: 머리글, 단락, 표)를 식별한다.

널리 사용되는 HTML과 같은 일부 마크업 언어는 미리 정의된 표시 의미론을 가지며, 이는 해당 시방서가 특정 미디어에서 구조화된 데이터를 표시하는 방식의 일부 측면을 규정함을 의미한다. HTML은 DocBook, Open eBook, JATS 등과 마찬가지로 마크업 메타 언어인 XML과 SGML을 기반으로 한다. 즉, SGML과 XML은 디자이너가 특정 스키마를 지정할 수 있도록 허용하며, 이는 어떤 요소, 속성 및 기타 기능이 허용되고 어디에 허용되는지 결정한다.

대부분의 마크업 언어의 핵심 특징은 마크업을 텍스트 및 그림과 같은 콘텐츠와 결합할 수 있다는 점이다. 예를 들어, 문장의 몇 단어를 강조하거나 고유 명사, 정의된 용어 또는 기타 특수 항목으로 식별해야 하는 경우, 마크업이 문자의 문자 사이에 삽입될 수 있다.

## 어원<span class="anchor" id="Etymology and origin"></span>

마크업이라는 단어는 사본에 마크업하는 전통적인 출판 관행에서 유래했으며, 이는 종이나 인쇄된 사본의 여백과 텍스트에 기존의 상징적인 인쇄공 지시 형태의 수기 말뭉치 주석을 추가하는 것을 포함한다.

수세기 동안 이 작업은 주로 마크업맨 또는 마커로 알려진 숙련된 활판 인쇄공들이 수행했는데, 이들은 각 부분에 적용될 글꼴, 스타일, 크기를 나타내기 위해 텍스트를 마크업한 다음 다른 사람들에게 손이나 기계로 조판하도록 원고를 전달했다.

마크업은 일반적으로 편집자, 교정자, 출판사 및 그래픽 디자이너와 저자 자신에 의해서도 적용되었으며, 이들 모두는 수정 및 변경 사항과 같은 것들을 표시할 수도 있었다.

## 유형
1987년 제임스 쿰스(James Coombs), 앨런 레니어(Allen Renear), 스티븐 데로즈가, 그리고 2003년 팀 브레이가 제시한 세 가지 일반적인 전자 마크업 범주가 있다.

### 표시 마크업
표시 마크업은 전통적인 워드 프로세싱 시스템에서 사용된다. 문서 텍스트에 내장된 이진 코드는 위지위그('보는 것이 얻는 것이다') 효과를 생성한다. 이러한 마크업은 일반적으로 저자와 편집자를 포함한 사람 사용자에게 숨겨진다. 이러한 시스템은 내부적으로 절차적 및 설명적 마크업을 사용하지만, 이를 변환하여 사용자에게 서식 있는 유형의 배열을 제공한다.

### 절차적 마크업
마크업은 컴퓨터 프로그램이 텍스트를 처리하기 위한 명령 코드를 제공하는 텍스트에 포함된다. 잘 알려진 예로는 troff, TeX, 마크다운이 있다. 일반적으로 소프트웨어는 처음부터 끝까지 텍스트를 순차적으로 처리하며, 발견된 지침을 따른다. 이러한 텍스트는 종종 마크업이 보이는 상태로 편집되며 저자에 의해 직접 조작된다. 인기 있는 절차적 마크업 시스템에는 일반적으로 프로그래밍 구성 요소, 특히 매크로가 포함되어 복잡한 지침 세트를 간단한 이름(및 몇 가지 매개변수)으로 호출할 수 있다. 이는 동일하거나 유사한 지침을 여러 곳에서 다시 진술하는 것보다 훨씬 빠르고 오류 발생률이 낮으며 유지 관리가 용이하다.

### 설명적 마크업
설명적 마크업은 문서의 처리 방식보다는 문서의 구성 요소를 설명하는 데 특별히 사용된다. 이러한 많은 레이블을 제공하는 잘 알려진 시스템에는 LaTeX, HTML 및 XML이 있다. 목표는 문서의 구조를 특정 처리나 렌더링과 분리하는 것이다. 이러한 마크업은 종종 의미론적이라고 설명된다. 설명적 마크업의 예로는 참조주를 표시하는 데 사용되는 HTML의 `&lt;cite>` 태그가 있다. 설명적 마크업—때로는 논리적 마크업 또는 개념적 마크업이라고도 함—은 저자가 시각적으로가 아니라 개념적으로 자료를 설명하는 방식으로 글을 쓰도록 장려한다.

마크업 유형 간에는 상당한 중복과 동시 사용이 있다. 현대 워드 프로세싱 시스템에서는 표시 마크업이 종종 XML과 같은 설명적 마크업 지향 시스템에 저장된 다음, 구현에 의해 절차적으로 처리된다. TeX와 같은 절차적 마크업 시스템의 프로그래밍은 LaTeX와 같은 더 설명적인 성격의 고급 마크업 시스템을 만드는 데 사용될 수 있다.

최근 몇 년 동안, 사용 편의성을 주요 목표로 삼고 표준화 기구의 개입 없이 개발된 여러 마크업 언어는 저자들이 웹 브라우저를 통해 위키 및 웹 포럼 등에서 서식 있는 텍스트를 작성할 수 있도록 하는 것을 목표로 한다. 이러한 언어는 때때로 가벼운 마크업 언어라고 불린다. 마크다운, BBCode, 그리고 위키백과에서 사용되는 마크업 언어가 이러한 언어의 예이다.

## 역사<span class="anchor" id="History"></span>
### 젠코드(GenCode)
컴퓨터 텍스트 처리에서 마크업 언어에 대한 최초의 잘 알려진 공개 발표는 윌리엄 W. 터니클리프가 1967년 회의에서 했지만, 그는 이를 일반 코딩이라고 부르는 것을 선호했다. 이는 각각 자체 제어 표기법을 사용하며 종종 대상 조판 장치에 특화된 RUNOFF와 같은 처리 프로그램의 출현에 대한 대응으로 볼 수 있다. 1970년대에 터니클리프는 출판 산업을 위한 GenCode라는 표준 개발을 주도했다. 책 디자인가 스탠리 라이스(Stanley Rice)는 1970년에 유사한 내용의 추측을 발표했다.

브라이언 리드는 1980년 카네기 멜런 대학교 박사 학위 논문에서 실제 사용 중인 설명적 마크업에 대한 이론과 작동 구현을 개발했다. 그러나 IBM 연구원 찰스 골드파브가 마크업 언어의 발명가로 더 일반적으로 간주된다. 골드파브는 1969년 로펌을 위한 원시적인 문서 관리 시스템 작업을 하면서 기본적인 아이디어를 개발했으며, 같은 해 말 IBM의 일반화 마크업 언어(GML) 개발을 도왔다. GML은 1973년에 처음 공개되었다.

1975년, 골드파브는 케임브리지 (매사추세츠주)에서 실리콘 밸리로 옮겨 IBM 알마덴 연구 센터의 제품 기획자가 되었다. 그곳에서 그는 IBM 경영진을 설득하여 1978년 IBM의 문서 구성 시설 제품의 일부로 GML을 상업적으로 배포하도록 했고, 몇 년 안에 기업에서 널리 사용되었다.

최초의 표준 설명 마크업 언어인 SGML은 GML과 GenCode를 모두 기반으로 했다. 이는 터니클리프가 처음 의장을 맡고 골드파브도 1974년부터 참여한 국제 표준화 기구(ISO) 위원회의 결과였다. 골드파브는 결국 위원회 의장이 되었다. SGML은 1986년 10월 ISO 8879 표준으로 ISO에 의해 처음 출시되었다.

### 트로프(troff)와 엔트로프(nroff)

출판 산업 외에서 사용할 수 있는 컴퓨터 마크업 언어의 초기 사례 중 일부는 troff 및 nroff와 같은 유닉스 시스템의 조판 도구에서 찾을 수 있다. 이러한 시스템에서는 서식 명령이 문서 텍스트에 삽입되어 조판 소프트웨어가 편집자의 사양에 따라 텍스트 서식을 지정할 수 있었다. 문서를 올바르게 인쇄하는 것은 시행착오를 겪는 반복적인 과정이었다. WYSIWYG 출판 소프트웨어의 가용성은 일반 사용자들 사이에서 이러한 언어의 많은 사용을 대체했지만, 전문 출판 작업에서는 여전히 마크업을 사용하여 텍스트의 비시각적 구조를 지정하고 WYSIWYG 편집기는 이제 일반적으로 마크업 언어 기반 형식으로 문서를 저장한다.

### 텍스(TeX)

또 다른 주요 출판 표준은 도널드 커누스가 1970년대와 1980년대에 만들고 다듬은 TeX이다. TeX는 수학 서적을 조판하기 위한 텍스트의 세부 레이아웃과 글꼴 설명에 중점을 두었다. 이를 위해 커누스는 조판 기술을 연구하는 데 상당한 시간을 할애해야 했다. TeX는 주로 학계에서 사용되며, 많은 과학 분야에서 사실상 표준이다. TeX 위에 설명적 마크업 시스템을 제공하는 LaTeX라는 TeX 매크로 패키지는 과학계와 출판 산업 모두에서 널리 사용된다.

### 스크라이브(Scribe), GML, 그리고 SGML

구조와 표현을 명확하게 구분한 최초의 언어는 브라이언 리드(Brian Reid)가 개발하고 1980년 박사 논문에서 설명한 Scribe였다. Scribe는 마크업된 문서와 분리된 스타일의 개념과 설명 요소의 사용을 제어하는 문법을 도입하는 등 여러 면에서 혁명적이었다. Scribe는 GML과 이후 SGML의 개발에 영향을 미쳤으며, HTML과 LaTeX의 직접적인 조상이다.

1980년대 초, 마크업이 문서의 구조적 측면에 초점을 맞추고 그 구조의 시각적 표현을 해석자에게 맡겨야 한다는 아이디어는 SGML의 탄생으로 이어졌다. 이 언어는 골드파브가 의장을 맡은 위원회에서 개발되었다. 여기에는 터니클리프의 프로젝트인 GenCode를 포함하여 다양한 출처의 아이디어가 통합되었다. 샤론 애들러(Sharon Adler), 앤더스 베르글룬드(Anders Berglund), 제임스 A. 마크(James A. Marke)도 SGML 위원회의 핵심 멤버였다.

SGML은 문서에 마크업을 포함하기 위한 구문뿐만 아니라, 어떤 태그가 허용되고 어디에 허용되는지(나중에 스키마로 알려진 문서 형식 정의)를 별도로 설명하기 위한 구문을 지정한다. 이를 통해 저자는 자신에게 가장 적합하고 자신의 자연어로 명명된 태그를 선택하여 원하는 마크업을 생성하고 사용할 수 있으며, 자동화된 검증도 가능하다. 따라서 SGML은 엄밀히 말하면 메타 언어이며, 많은 마크업 언어가 SGML에서 파생되었다. 1980년대 후반부터 대부분의 실질적인 새로운 마크업 언어는 텍스트 인코딩 이니셔티브 (TEI) 가이드라인 및 DocBook을 포함하여 SGML을 기반으로 했다. SGML은 1986년에 ISO 8879 표준으로 공표되었다.

SGML은 대규모 문서화 요구 사항이 있는 분야에서 널리 수용되고 사용되었다. 그러나 많은 사람들은 SGML이 너무 많은 것을 하려고 하고 너무 유연하게 설계된 부작용으로 번거롭고 배우기 어렵다고 생각했다. 예를 들어, SGML은 개발자들이 과로한 지원 인력이 수동으로 마크업 작업을 하여 키 입력 수를 줄이는 것을 감사하게 생각할 것이라고 여겼기 때문에 특정 컨텍스트에서 종료 태그(또는 시작 태그, 또는 둘 다)를 선택 사항으로 만들었다.

#### HTML

1989년에 컴퓨터 과학자 팀 버너스리는 인터넷 기반 하이퍼텍스트 시스템을 제안하는 메모를 작성했고, 이후 1990년 말에 HTML을 명시하고 브라우저 및 서버 소프트웨어를 작성했다. HTML에 대한 첫 번째 공개 설명은 버너스리가 1991년 말에 인터넷에서 처음 언급한 "HTML Tags"라는 문서였다. 이 문서는 HTML의 초기, 비교적 단순한 디자인을 구성하는 18가지 요소를 설명한다. 하이퍼링크 태그를 제외하고, 이들은 CERN의 내부 SGML 기반 문서 형식인 SGMLguid의 강한 영향을 받았으며, SGML 표준의 샘플 스키마와 매우 유사했다. 이 요소 중 11개는 HTML 4에 여전히 존재한다.

버너스리는 HTML을 SGML 응용 프로그램으로 간주했다. 국제 인터넷 표준화 기구(IETF)는 1993년 중반 버너스리와 댄 코놀리가 작성한 HTML 시방서에 대한 첫 번째 제안서인 "Hypertext Markup Language (HTML)"를 출판하면서 이를 공식적으로 정의했다. 이 제안서에는 문법을 정의하는 SGML DTD가 포함되어 있었다. 많은 HTML 텍스트 요소는 1988년 ISO 기술 보고서 TR 9537 SGML 사용 기술에서 발견되며, 이는 1960년대 초 호환 시분할 시스템 운영 체제를 위해 개발된 RUNOFF 명령이 사용하는 것과 같은 초기 텍스트 서식 언어의 기능을 다룬다. 이러한 서식 명령은 조판공이 수동으로 문서를 서식 지정하는 데 사용하던 명령에서 파생되었다. 스티븐 드로즈(Steven DeRose)는 HTML의 설명적 마크업 사용(특히 SGML의 영향)이 웹 성공의 주요 요인이었다고 주장한다. 이는 그것이 가능하게 한 유연성과 확장 가능성 때문이었다. HTML은 웹 페이지 및 웹 브라우저에 표시될 수 있는 기타 정보를 생성하는 주요 마크업 언어가 되었으며, 21세기 세계에서 가장 많이 사용되는 마크업 언어일 것이다.

### XML

XML (Extensible Markup Language)은 널리 사용되는 메타 마크업 언어이다. 존 보삭이 만들고 의장을 맡은 위원회에서 월드 와이드 웹 컨소시엄(W3C)에 의해 개발되었다. XML의 주요 목적은 인터넷상의 문서를 특정 사용 사례에 집중하여 SGML을 단순화하는 것이었다. XML은 SGML과 마찬가지로 메타 언어로 남아 있어 사용자가 필요한 태그를 생성하고(따라서 확장 가능) 해당 태그와 허용되는 사용법을 설명할 수 있다.

XML 채택은 모든 XML 문서가 SGML 문서가 되도록 작성될 수 있다는 사실 덕분에 가속화되었으며, 기존 SGML 사용자와 소프트웨어가 XML로 비교적 쉽게 전환할 수 있게 했다. 동시에 XML은 SGML의 많은 복잡한 기능을 제거하여 문서 및 출판과 같은 구현 환경을 단순화한다. 이는 단순성과 유연성의 균형을 맞추는 것처럼 보이며, 매우 강력한 스키마 정의 및 유효성 검사 도구를 지원하여 다양한 용도로 빠르게 채택되었다. XML은 이제 응용 프로그램 간의 데이터 통신, 프로그램 데이터 직렬화, 하드웨어 통신 프로토콜, 벡터 그래픽스 및 문서 외의 다른 용도로 널리 사용된다.

#### XHTML

2000년 1월부터 HTML 5가 출시될 때까지, HTML에 대한 모든 W3C 권고는 XHTML (Extensible HyperText Markup Language)을 사용하여 XML을 기반으로 했다. 언어 사양은 XHTML 문서가 잘 구성된 XML 문서여야 한다고 요구한다. 이는 역사적으로 원치 않는 브라우저 동작으로 이어진 많은 구문 오류를 피하면서 HTML 사용자에게 친숙한 문서 구성 요소를 계속 사용함으로써 더 엄격하고 견고한 문서를 가능하게 한다.

HTML과 XHTML의 가장 눈에 띄는 차이점 중 하나는 후자의 모든 태그가 닫혀야 한다는 규칙이다. ``와 같은 빈 HTML 태그는 일반 종료 태그로 닫거나 특수 형식인 ``로 대체해야 한다(종료 태그 앞의 공백은 선택 사항이지만, 일부 XML 이전 웹 브라우저와 SGML 파서가 태그를 허용하도록 하므로 자주 사용된다). 또 다른 차이점은 태그의 모든 속성 값은 따옴표로 묶어야 한다는 것이다. 이 두 가지 차이점은 일반적으로 장황하다고 비판받지만, 오류를 감지하고, 위치를 파악하고, 수정하는 것을 훨씬 쉽게 만들기 때문에 칭찬받기도 한다. 마지막으로, XHTML 네임스페이스 내의 모든 태그 및 속성 이름은 유효하려면 소문자여야 한다. 반면 HTML은 대소문자를 구분하지 않았다.

#### 기타 XML 기반 애플리케이션
자원 기술 프레임워크인 RDF/XML, XForms, DocBook, SOAP, 웹 온톨로지 언어(OWL)를 포함한 많은 XML 기반 애플리케이션이 존재한다. 이러한 목록의 일부는 XML 마크업 언어 목록을 참조하라.

## 특징
많은 마크업 언어의 공통 특징은 문서의 텍스트와 마크업 지시를 동일한 데이터 스트림 또는 파일에 혼합한다는 것이다. 이는 필수적인 것은 아니며, 포인터, 오프셋, ID 또는 기타 방법을 사용하여 마크업을 텍스트 콘텐츠와 분리하여 둘을 조율할 수 있다. 이러한 독립형 마크업은 프로그램이 마크업된 문서와 작업하는 데 사용하는 내부 표현의 일반적인 형태이다. 그러나 임베디드 또는 인라인 마크업이 다른 곳에서는 훨씬 더 일반적이다. 예를 들어, 다음은 HTML로 마크업된 텍스트의 작은 섹션이다.


```html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>My test page</title>
  </head>
  <body>
    <h1>Mozilla is cool</h1>
    <img src="images/firefox-icon.png" alt="The Firefox logo: a flaming fox surrounding the Earth.">

    <p>At Mozilla, we’re a global community of</p>

    <ul> 
      <li>technologists</li>
      <li>thinkers</li>
      <li>builders</li>
    </ul>

    <p>working together to keep the Internet alive and accessible, so people worldwide can be informed contributors and creators of the Web. We believe this act of human collaboration across an open platform is essential to individual growth and our collective future.</p>

    <p>Read the <a href="https://www.mozilla.org/en-US/about/manifesto/">Mozilla Manifesto</a> to learn even more about the values and principles that guide the pursuit of our mission.</p>
  </body>
</html>
```


각괄호 `&lt;이렇게>` 안에 묶인 코드는 마크업 지시(태그)이고, 이 지시 사이의 텍스트는 문서의 실제 텍스트이다. 코드 `h1`, `p`, `em`은 포함된 텍스트의 의도된 목적이나 의미를 설명한다는 점에서 의미론적 마크업의 예시이다. 특히, `h1`은 묶인 텍스트가 1단계 제목임을 의미하고, `p`는 단락을, `em`은 강조된 단어나 구를 의미한다. 이러한 구조적 마크업을 해석하는 프로그램은 원하는 대로 다른 글꼴, 굵기, 글꼴 크기, 들여쓰기, 색상 또는 기타 스타일을 사용하여 다양한 텍스트 조각을 표현하기 위한 자체 규칙이나 스타일을 적용할 수 있다. 예를 들어, `h1`과 같은 태그는 기사에서 크고 굵은 산세리프 글꼴로 표시될 수 있거나, 고정 폭 글꼴 문서에서 밑줄이 그어질 수 있거나, 표시를 전혀 변경하지 않을 수도 있다.

이와 대조적으로 HTML 4의 `i` 태그는 일반적으로 해당 모양의 이유를 지정하지 않고 텍스트의 특성을 지정하는 데 사용되는 표시 마크업의 예이다. 이 경우 `i` 요소는 이탤릭체 사용을 지시한다. 그러나 HTML 5에서는 이 요소가 "대체 음성 또는 분위기의 텍스트 범위, 또는 다른 텍스트 품질을 나타내는 방식으로 일반 산문에서 벗어난 텍스트"를 나타내는 더 의미론적인 용도로 재사용되었다. 예를 들어, `i` 요소를 사용하여 분류학적 지정이나 다른 언어의 구문을 나타내는 것이 적절하다. 이 변경은 HTML 4에서 5로 가능한 한 원활하게 전환하기 위해 이루어졌으며, 사용 중단된 표시 요소가 가장 의도된 의미를 보존하도록 했다.

TEI는 인문학 및 사회과학 분야에서 흥미로운 텍스트를 인코딩하는 방법에 대한 광범위한 지침을 발표했으며, 이는 수년간의 국제 협력 작업을 통해 개발되었다. 이 지침은 역사적 문서, 특정 학자, 시대 및 장르의 작품을 인코딩하는 데 사용된다.

## 더 넓은 사용
마크업 언어의 개념은 텍스트 문서에서 유래했지만, 재생 목록, 벡터 그래픽스, 웹 서비스, 콘텐츠 신디케이션 및 사용자 인터페이스를 포함한 다른 유형의 정보 표현에 점차 더 많이 사용되고 있다. 이들 대부분은 XML 애플리케이션이다. XML은 잘 정의되고 확장 가능한 언어이기 때문이다.

XML의 사용은 XHTML+SMIL 및 XHTML+MathML+SVG와 같이 여러 마크업 언어를 단일 프로필로 결합할 가능성도 가져왔다.

## 같이 보기
* CSS
* 가벼운 마크업 언어
* 사용자 인터페이스 마크업 언어
* 벡터 그래픽스 마크업 언어
* 코드퓨전 마크업 언어
* 페이지 기술 언어
* 프로그래밍 언어 (대조적)

## 각주

; 내용주


## 외부 링크
* 


분류:형식 언어
분류:미국의 발명품