- 여러 페이지에서 같은 header를 반복하지 않으려는 요구는 기본적이지만, HTML에는 이를 직접 처리하는 네이티브 include 태그가 없음
- 개발자들은 JavaScript
fetch, 서버 지시문, 정적 사이트 생성기, 템플릿 언어, 백엔드 언어, Web Components 같은 우회 수단으로 같은 문제를 해결해 왔음 <iframe>은 순수 HTML에 가까운 방법이지만, 성능·접근성·사용성 측면에서 이 용도에 맞지 않고 전반적으로 어색함- CSS는 CSS를 import하고 JavaScript는 JavaScript를 import할 수 있는데, HTML은 HTML을 import하지 못해 웹 플랫폼의 일관성이 흔들려 보임
- preload scanner 영향, 비동기 로딩에 따른 레이아웃 흔들림, 중첩·순환 include, 요청 증가, 도메인 제한, 수요 부족 등이 표준화 장벽으로 남아 있음
반복되는 HTML 조각을 재사용하려는 기본 요구
index.html,about.html,contact.html세 페이지에 같은 header를 넣어야 하는 상황에서 문제가 드러남- 같은 코드를 세 번 복사하기보다 header를 한 번 만들고 여러 페이지에서 include하고 싶어지는 것이 자연스러움
- 페이지가 수천 개로 늘어나면 이는 단순 편의가 아니라 코드 중복 방지 문제가 됨
이미 존재하는 다양한 해결책
- HTML 조각을 가져와 삽입하는 방식은 이미 여러 도구와 계층에서 가능함
- JavaScript는
fetch로 HTML을 가져오고insertAdjacentElement로 삽입할 수 있음 - 오래된 웹 서버 지시문인 Server Side Includes도 있음
- Jekyll include 같은 정적 사이트 생성기 기능으로 처리할 수 있음
- gulp-include 같은 태스크 러너도 사용할 수 있음
- Handlebars partials 같은 템플릿 언어는 대체로 include 기능을 제공함
- PHP의
include처럼 백엔드 언어가 HTML을 동적으로 생성할 수도 있음 - include 전용 Web Component 방식도 존재함
- JavaScript는
<iframe>은 기술적으로 순수 HTML만으로 다른 HTML을 가져오는 방법이지만, 이 용도에서는 성능·접근성·사용성 문제가 큼- 강력한 찾기/바꾸기 기능을 믿고 include 자체를 쓰지 않는 선택지도 있음
정작 HTML 자체에는 없음
- 위 방법들은 모두 “HTML 태그 하나로 HTML을 가져와 이 위치에 넣는다”는 방식이 아님
<img>가 이미지를 가져와 해당 위치에 넣는 것처럼, HTML에는 “이 HTML을 가져와 여기에 넣는다”는 직접적인 선언형 태그가 없음- ShopTalk Show에서도 Jake Archibald, Dave Rupert와 같은 질문을 두고 논의가 이어졌음
웹 플랫폼의 기존 흐름과 어긋나는 지점
- 웹 표준과 브라우저는 개발자들이 이미 반복해서 해결하던 일을 플랫폼 기능으로 흡수하는 경우가 많음
- 날짜 처리를 위해 서드파티 JavaScript를 쓰던 흐름에는 Temporal이 등장함
- 프레임워크로 처리하던 페이지 전환 요구에는 View Transition API가 대응함
- 요소를 안전하게 배치하기 위해 쓰던 라이브러리 영역에는 CSS anchor positioning이 들어옴
- 거의 모든 웹사이트가 HTML 조각 재사용을 필요로 하고 각자 다른 비표준 도구를 쓰는 상황에서, HTML include 부재는 이례적인 공백처럼 보임
HTML include가 표준이 되기 어려운 이유
- 브라우저와 생태계 관점에서 HTML include에는 여러 부담이 따름
- preload scanner를 망가뜨려 웹 성능에 나쁜 영향을 줄 수 있음
- 비동기 방식이어야 한다면 로딩 중 화면이 흔들리거나 튀는 경험이 생길 수 있음
- HTML의 단순성이나 순수성을 해치는 복잡성이 생길 수 있음
- 중첩 include와 순환 include 처리가 어려울 수 있음
- 웹 호스팅 업체가 요청 수 증가를 이유로 반대할 수 있음
- 이미지·CSS·JavaScript와 달리 HTML은 다른 도메인에서 가져올 때 더 엄격한 제한이 필요할 수 있음
- 이 목록에 없는 다른 문제가 있을 수 있음
- 실제로는 이 기능에 대한 수요가 크지 않을 수도 있음
- 확정 답변보다는, HTML이 왜 HTML을 직접 include하지 못하는지 따져보는 이유 탐색에 가까움