
개발을 처음 배울 때 “HTML은 프로그래밍 언어가 아니다.” 라는 말을 종종 듣곤 한다.
그런데 막상 HTML 파일을 뜯어보면 뭔가 코드 비슷한것을 적고, 브라우저는 그걸 또 해석해서 화면을 출력한다.
겉보기엔 프로그래밍 언어처럼 생겼는데…
도대체 왜 프로그래밍 언어가 아닐까?
튜링 완전성 관점에서 이 질문을 풀어본다.
1. 튜링 완전성(Turing Completeness)이란?
튜링 완전하다는 건 한 문장으로 요약하면 아래와 같다.
충분한 시간과 메모리가 있다면, 어떤 계산 문제라도 표현할 수 있는 능력.
조건문, 반복문, 상태 변화, 메모리 조작 등을 이용해
일반적인 계산 처리를 할 수 있어야 튜링 완전한 언어다.
C, Java, Python 등 익숙한 언어들이 여기에 해당된다.
즉, 위 언어들은 튜링 완전한 언어이다.
2. HTML은 어떤 언어인가?
HTML은 HyperText Markup Language, 이름 그대로 마크업 언어다.
컴퓨터에게 “계산”을 시키는 언어가 아니라, 구조를 표현하는 언어다.
<h1>제목</h1>
<p>본문 텍스트</p>
이건 “제목을 이렇게 표시해라”, “문단은 이렇게 구성해라”라는 명령일 뿐,
어떤 계산 로직도, 메모리 수정 로직도 없다.
3. HTML이 튜링 완전하지 못한 이유
3-1. 조건문이 없다
HTML에서는 “A이면 B를 보여줘”, “로그인된 사용자면 메뉴를 보여줘” 같은 조건/분기 처리가 불가능하다.
브라우저가 해석하는 시점엔 로직을 분기할 수 있는 기능이 없다.
3-2. 반복문이 없다
HTML 자체로는 “이 div를 10번 반복해서 생성해라” 같은 반복 구조를 만들 수 없다.
3-3. 상태 변화가 없다
HTML은 화면의 구조를 정의할 뿐,
시간이 지나면서 상태가 바뀌는 로직(예: 카운터 증가, 변수 갱신)을 정의할 수 없다.
3-4. 메모리 개념이 없다
프로그래밍 언어이면 값 저장, 연산, 업데이트 같은 기능이 가능한데,
HTML엔 그런 메모리가 존재하지 않는다.
요약하면, HTML은 계산을 할 수 있는 언어가 아니기 때문에 튜링 완전하지 않다.
그리고 “튜링 완전하지 않은 언어”는 “프로그래밍 언어”라고 부르지 않는다.
'Computer Science' 카테고리의 다른 글
| [대규모 시스템 설계] Ch 01. 사용자 수에 따른 규모 확장성 (0) | 2025.10.12 |
|---|---|
| [CS] 지연 로딩 / 즉시 로딩 (0) | 2025.01.28 |
| [CS] Persistence Context (영속성 컨텍스트) (0) | 2025.01.24 |
| [CS] Authentication / Authorization (0) | 2025.01.21 |
| [CS] Singleton Pattern (0) | 2025.01.21 |