본문 바로가기

마크업 언어/HTML

HTML <template> 태그, 동적 콘텐츠를 위한 템플릿 생성 방법

HTML <template> 태그, 동적 콘텐츠를 위한 템플릿 생성 방법

HTML5에서 소개된 <template> 태그는 웹 페이지에서 동적 콘텐츠를 생성하는 데 매우 유용한 도구입니다. 이 태그는 기본적으로 숨겨진 DOM 요소를 정의하고, 필요할 때 자바스크립트를 통해 이를 복제하거나 삽입하는 방식으로 동적인 콘텐츠를 효율적으로 관리할 수 있도록 합니다. 이 가이드에서는 <template> 태그의 개념부터 실제 사용 방법까지를 자세히 살펴보겠습니다.

 

 

목차

  1. <template> 태그란?
  2. <template> 태그의 기본 구조
  3. <template> 태그의 주요 활용 사례
  4. 자바스크립트를 사용한 템플릿 활용
  5. 실전 예제: 리스트 동적 생성
  6. <template> 태그와 Shadow DOM
  7. 성능 및 최적화 고려사항

 

<template> 태그란?

<template> 태그는 HTML5에서 도입된 요소로, 문서에 포함되지만 기본적으로 렌더링되지 않는 HTML 코드를 정의하는 데 사용됩니다. 이 태그 내에 포함된 내용은 자바스크립트를 통해 동적으로 DOM에 삽입하거나 복제할 수 있습니다. 이로 인해 정적인 HTML 문서를 보다 동적으로 처리할 수 있게 해줍니다.

<template> 태그의 기본 구조

<template> 태그는 그 자체로는 웹 페이지에 아무런 시각적 효과를 주지 않습니다. 다음은 기본적인 <template> 태그의 구조입니다:

<template id="my-template">
    <div class="item">
        <h2>템플릿 제목</h2>
        <p>템플릿 내용입니다.</p>
    </div>
</template>
    

위 예제에서 <template> 태그는 <div> 요소를 포함하고 있지만, 이 내용은 브라우저에 의해 렌더링되지 않습니다. 자바스크립트를 통해 이 템플릿의 내용을 동적으로 복제하거나 DOM에 추가할 수 있습니다.

 

 

<template> 태그의 주요 활용 사례

<template> 태그는 다음과 같은 상황에서 매우 유용하게 사용됩니다:

  • 반복적인 UI 요소 생성: 동일한 구조의 UI 요소를 반복적으로 생성할 때, <template>을 사용하여 코드 중복을 줄이고 유지보수를 쉽게 할 수 있습니다.
  • 클라이언트 사이드 렌더링: 서버에서 데이터를 받아 클라이언트 측에서 동적으로 HTML을 생성하는 경우, <template> 태그가 유용합니다.
  • SPA (Single Page Application): 단일 페이지 애플리케이션에서 페이지의 일부분을 동적으로 갱신할 때, <template>을 활용하면 효과적입니다.

 

 

자바스크립트를 사용한 템플릿 활용

<template> 태그는 자바스크립트를 통해 복제되어야 비로소 DOM에 삽입되고 화면에 표시됩니다. 이를 위해 document.importNode 메서드를 사용합니다. 다음은 자바스크립트를 사용해 템플릿을 동적으로 활용하는 방법입니다:

const template = document.getElementById('my-template');
const clone = document.importNode(template.content, true);
document.body.appendChild(clone);
    

위의 코드는 템플릿의 콘텐츠를 복제하여 body 요소에 추가하는 간단한 예제입니다. true 파라미터는 템플릿 내용의 모든 하위 요소까지 복제할지를 결정하는데, 대개 true로 설정합니다.

 

 

 

 

실전 예제: 리스트 동적 생성

이번에는 <template> 태그를 사용해 리스트 항목을 동적으로 생성하는 예제를 살펴보겠습니다:

<template id="list-item-template">
    <li></li>
</template>

<ul id="item-list"></ul>

<script>
const items = ['사과', '바나나', '오렌지'];
const template = document.getElementById('list-item-template');
const list = document.getElementById('item-list');

items.forEach(item => {
    const clone = document.importNode(template.content, true);
    clone.querySelector('li').textContent = item;
    list.appendChild(clone);
});
</script>
    

이 예제에서는 리스트 항목을 동적으로 생성하여 ul 요소에 추가합니다. 템플릿을 사용함으로써 코드가 간결해지고, 유지보수가 용이해집니다.

 

 

<template> 태그와 Shadow DOM

<template> 태그는 Shadow DOM과 함께 사용하면 더욱 강력해집니다. Shadow DOM을 사용하면 웹 컴포넌트를 보다 모듈화된 형태로 관리할 수 있으며, <template> 태그로 정의된 콘텐츠를 Shadow DOM에 쉽게 삽입할 수 있습니다. 이를 통해 외부 스타일이나 스크립트와 격리된 UI 컴포넌트를 제작할 수 있습니다.

 

 

성능 및 최적화 고려사항

<template> 태그를 사용할 때 고려해야 할 성능 이슈는 다음과 같습니다:

  • 렌더링 오버헤드: 자바스크립트로 템플릿을 반복적으로 복제하고 DOM에 삽입하는 경우, 성능에 영향을 줄 수 있습니다. 이럴 때는 DocumentFragment를 사용하여 DOM 조작을 최소화하는 것이 좋습니다.
  • 메모리 관리: 생성된 요소가 많아질수록 메모리 사용량이 증가할 수 있습니다. 불필요한 요소는 적절히 제거하여 메모리 누수를 방지해야 합니다.

이러한 최적화 기법들을 통해 <template> 태그를 보다 효율적으로 사용할 수 있습니다.