[[컴퓨터공학|컴퓨터 과학 & 공학
Computer Science & Engineering
]]- [ 펼치기 · 접기 ]
- ||<tablebgcolor=#fff,#1c1d1f><tablecolor=#373a3c,#ddd><colbgcolor=#0066DC><colcolor=white> 기반 학문 ||수학(해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학(환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학(형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학 ||
하드웨어 구성 SoC · CPU · GPU(그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품 기술 기계어 · 어셈블리어 · C/C++ · C# · Java · Python · BIOS · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시(SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속 연구
및
기타논리 회로(보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영 체제 · 데이터베이스 · 프로그래밍 언어{컴파일러(어셈블러 · JIT) · 인터프리터 · 유형 이론 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩(유니코드 · MBCS) · 네트워크 · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도(최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리(기계 번역 · 음성인식) · 버전 (버전 관리 시스템 · Git · GitHub)
1. 개요
Markup Language문서가 화면에 표시되는 형식을 나타내거나 데이터의 논리적인 구조를 명시하기 위한 규칙들을 정의한 언어의 일종이다. 데이터를 기술한 언어라는 점에서 프로그래밍 언어와는 분명한 차이가 있다.
본래는 교정 부호 등을 표기하는데에 사용했지만, 점차 용도가 확장되어 문서의 구조를 표현하도록 발전하였다. 최초의 마크업 언어로 부를 수 있을 정도로 발전한 언어는 최초로 태그 사용이 가능하였던 IBM의 GML.
2. 프로그래밍 언어와의 차이
2.1. 전공자를 위한 설명
마크업 언어는 절차성을 가지는 일반적인 프로그래밍 언어와 달리 느슨한 튜링 완전이 아니다. 튜링 머신에서 튜링 완전하기 위해서는 조건 분기문을 가지고 있고 메모리의 임의의 값을 수정할 수 있어야 한다. 하지만 마크업 언어는 이러한 과정을 하지 못하기 때문에 튜링 완전이 아니며 프로그래밍 언어의 정의에 부합하지 않는다.2.2. 비전공자를 위한 설명
실제 책을 하나의 프로그램이라고 생각해보자. 사람이 책에 볼펜으로 밑줄을 긋거나 볼펜으로 필기를 하는 행위는 마크업의 일종이라고 할 수 있다. 또는 그래픽 디자이너들한테 '책 표지는 배경을 무지개 그라데이션으로 넣어주시고 제목은 중앙에 검은색 굴림체로 크게 박아주세요' 라고 말하는 것 또한 자연언어 기반 마크업 언어라고 할 수 있다.만약 책에 프로그래밍 언어를 적용할 수 있다면 책을 펴는 날짜에 따라 내용이 달라지거나, 편 사람이 누군지에 따라서 다른 내용을 보여줄 수 있어야 한다. 하지만 현실에선 당연히 그게 불가능하다. 쉽게 말하면 마크업 언어는 현실의 아날로그적인 기록매체와 유사한 역할을 한다고 볼 수 있다. 일단 한번 작성하면 누가 언제 보든 동일한 모습을 보여준다는 점이 같다.
우리가 흔히 웹사이트에서 볼 수 있는 상호작용적인 요소는 대부분 프로그래밍 언어(JavaScript, ActiveX 같은)가 조합된 웹사이트다. 일반적인 마크업 언어만으로는 이러한 기능을 구현하는 것이 불가능하다.[1]
보다 컴퓨터 상의 실제 사례를 보자면, 우선 한컴오피스 한글에서 수식 입력기를 들 수 있다. 한글의 수식입력기에서는 마우스로 기호를 하나하나 찾아 골라서 클릭을 하는 식으로도 수식 입력을 할 수 있지만, 수식이 나타나는 화면의 아래창에 몇가지 명령어들을 규칙에 맞춰 직접 타이핑하며 마우스를 사용하지 않고도 여러가지 수식들을 입력할 수도 있다. 이때 사용되는 명령어들도 한컴오피스 한글 문서에서 수식 문자가 화면에 표시되는 모양과 형식을 결정하는 마크업 언어에 해당된다.[2]
위키를 작성하는 것 또한 마크업 언어를 활용하는 대표적인 사례다. 위키를 작성하기 위해선 하이퍼링크를 넣거나, 표를 그리기 위해 여러 기호들을 사용하고 이를 통해 문서를 깔끔하게 작성할 수 있다. 위키 내에 통용되는 문법을 기초로 마크업을 한 것이다. 물론 위키에서 일부 매크로 문법을 지원하기 때문에 보는 시점에 따라 다른 내용을 보여주는 경우도 있지만 이러한 일부 예외를 제외하면 프로그래밍적 요소는 없다.
3. 종류
3.1. 표현적 마크업
문서의 형태를 표현하기 위한 마크업.대표적인 예로 HTML의 style 태그를 들 수 있다. 메모장이나 워드프로세서에서 제목 앞에 몇 칸의 공백을 넣는 등의 행위도 표현적 마크업의 일종이라고 할 수 있다.
3.2. 절차적 마크업
프로그램이 문서를 처리하는 방법을 서술한 마크업.LaTeX이 이 분류에 속한다. 단, LaTeX에서 확장형 프로그래밍 언어인 Lua를 사용할 수 있게 하는 LuaTeX과 같은 컴파일러도 존재한다.
3.3. 기술적 마크업
가장 많이 사용되는 마크업 언어의 종류.문서가 표현하는 내용을 기술하는 데에 사용한다. 표현적 마크업과 절차적 마크업의 요소를 어느 정도는 포함하고 있어 범용적 마크업이라고도 한다.
대표적인 예로는 HTML, 마크다운이 있으며, 물론 나무위키의 문법도 마크업 언어의 일종이다. 나무위키를 포함한 대부분의 위키 문법은 HTML과 마크다운의 중간 정도로 복잡하다. 다시 말해 HTML만큼은 아니지만 마크다운보단 표현적 마크업과 절차적 마크업의 요소를 더 많이 포함하고 있다는 뜻이다.
4. 목록
마크업 언어/목록 문서 참조.[1] 대부분인 이유는 클라이언트 사이드가 아닌 서버 사이드에 해당 기능을 구현하는 프로그래밍 언어가 있는 경우도 많기 때문이다. 예를 들어 계정명을 표시하는 기능을 만든다면 클라이언트의 자바스크립트가 계정명을 불러와서 표시하도록(DOM) 할 수도 있겠지만 서버 측에서 미리 계정명이 들어간 마크업 언어를 생성하고 클라이언트에게 전송해 주어도 되기 때문이다.[2] 참고로 한컴오피스의 수식 입력 마크업 언어는 독자적으로 개발된것이 아니라 TeX으로부터 따온 것이다.