๋ธ๋ก๊ทธ ๋ชฉ๋ก ์๋ ์์ฑ ๋ฐฉ๋ฒ ๋น๊ต: jQuery TOC์ ์์ JavaScript TOC ์ฅ๋จ์
๋ธ๋ก๊ทธ ์ฝํ ์ธ ์ ๊ตฌ์กฐ์ ํ์์ ๋๋ ๋ธ๋ก๊ทธ ๋ชฉ๋ก ์๋ ์์ฑ ๋ฐฉ๋ฒ. jQuery TOC ํ๋ฌ๊ทธ์ธ๊ณผ ์์ JavaScript TOC ๊ตฌํ ๋ฐฉ๋ฒ์ ๋น๊ตํ๊ณ , ๊ฐ ๋ฐฉ๋ฒ์ SEO ๋ฐ ์ฑ๋ฅ์ ์ฅ๋จ์ ์ ๋ถ์ํฉ๋๋ค.
์ฝํ ์ธ ๊ตฌ์กฐํ์ ์๋ ๊ธ ๋ชฉ๋ก ์์ฑ์ ์ค์์ฑ
๋ธ๋ก๊ทธ ๊ธ์ ์์ฑํ ๋ ์๋์ผ๋ก ๊ธ ๋ชฉ๋ก์ ์์ฑํด์ฃผ๋ ๋ฐฉ๋ฒ์ ํ์ฉํ๋ฉด, ์ฝํ ์ธ ๋ฅผ ๊ตฌ์กฐ์ ์ผ๋ก ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์์ด ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ํนํ, ๊ธด ๊ธ์์ ๋ฐฉ๋ฌธ์๋ค์ด ์ํ๋ ์ ๋ณด๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋๋ก ๋๋ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ด๋ฉฐ, ์ด๋ ๊ณง ์ฌ์ฉ์ ๊ฒฝํ(UX) ๊ฐ์ ์ผ๋ก ์ด์ด์ ธ ๊ฒ์์์ง ์ต์ ํ(SEO)์๋ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
์ด๋ฒ ๊ธ์์๋ jQuery TOC ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ ๋ฐฉ๋ฒ๊ณผ ์์ JavaScript๋ฅผ ์์ฑํด ๋ชฉ์ฐจ๋ฅผ ๋ง๋๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋น๊ตํ๊ณ , ๊ฐ ๋ฐฉ๋ฒ์ ์ฅ์ ๊ณผ ์ค์ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ธ๋ก๊ทธ์์ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ๋ชฉ์ฐจ(Table of Contents, TOC)๋ฅผ ์์ฑํ ์ ์์ ๊ฒ์ ๋๋ค.
1๋จ๊ณ: jQuery TOC ํ๋ฌ๊ทธ์ธ์ ํ์ฉํ ๋ชฉ๋ก ์๋ ์์ฑ ๋ฐฉ๋ฒ
์ฝ๊ฒ ๊ธ ๋ชฉ๋ก์ ์์ฑํด์ฃผ๋ jQuery TOC ํ๋ฌ๊ทธ์ธ ์ฌ์ฉ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ์ง๋ง, ๊ตฌํ ๋์ด๋๊ฐ ๋ฎ๊ณ ์๋ํ๊ฐ ์ฉ์ดํฉ๋๋ค.
ํ์ํ ํ์ผ: ์๋ ๋งํฌ์์ Download ๋ฒํผ์ ํด๋ฆญํ์ฌ jquery.toc.min.js ํ์ผ์ ๋ค์ด๋ก๋ํด์ผ ํฉ๋๋ค.
1. jQuery TOC๋ฅผ ์ํ HTML ๋ฐ ์คํฌ๋ฆฝํธ ์ค์
๋ค์ด๋ก๋ํ ํ์ผ์ ์ฌ์ฉํ๊ธฐ ์ํด, ํฐ์คํ ๋ฆฌ์ ์คํจ์ ์์ ํด์ผ ํฉ๋๋ค. ๋ค์ ๋จ๊ณ์ ๋ฐ๋ผ HTML์ ์ค์ ํ๊ณ ๋ชฉ์ฐจ ๊ธฐ๋ฅ์ ํ์ฑํํฉ๋๋ค.
- ํฐ์คํ ๋ฆฌ ๊ด๋ฆฌ ํ์ด์ง ์คํจ ํธ์ง HTML ํธ์ง์์
jquery.toc.min.jsํ์ผ์ ์ถ๊ฐํฉ๋๋ค. - HTML ๋ฉ๋ด์์
/headํ๊ทธ ๋ฐ๋ก ์์ ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ก๋ํฉ๋๋ค:
script src="./images/jquery.toc.min.js"/script
/bodyํ๊ทธ ๋ฐ๋ก ์์ ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ์ฌ ๋ชฉ์ฐจ ๊ธฐ๋ฅ์ ํ์ฑํํฉ๋๋ค:
script
$(document).ready(function() {
var $toc = $("#toc");
$toc.toc({
content: ".tt_article_useless_p_margin",
headings: "h2,h3,h4"
});
});
/script
2. ๋ชฉ๋ก ๋์์ธ์ ์ํ CSS ์ฝ๋ ๋ฐ ์์ ์ถ๊ฐ
๋ชฉ์ฐจ์ ์คํ์ผ์ ์ค์ ํ๊ธฐ ์ํด CSS๋ฅผ ์ถ๊ฐํฉ๋๋ค. CSS ๋ฉ๋ด์์ ์๋ ์ฝ๋๋ฅผ ์ ๋ ฅํ์ฌ๊ธ ์ ๋ชฉ์ ์คํ์ผ์ ์ง์ ํฉ๋๋ค. ๋ํ, ๋ชฉ๋ก์ด ์๋์ผ๋ก ํ์๋ ์์น์ ๋ค์ HTML ์์์ ์ถ๊ฐํฉ๋๋ค:
div class="index_toc"
p data-ke-size="size16"๋ชฉ์ฐจ/p
ol id="toc" style="list-style-type: decimal;" data-ke-list-type="decimal"/ol
/div
์ดํ ๊ธ์ฐ๊ธฐ์์ ํด๋น ์์์ ๋ถ๋ฌ์ ์ ๋ชฉ์ ์์ฑํ๋ฉด ์๋์ผ๋ก ๋ชฉ์ฐจ๊ฐ ์์ฑ๋ฉ๋๋ค.
2๋จ๊ณ: ์์ JavaScript๋ฅผ ์ฌ์ฉํ ๋ชฉ๋ก ์๋ ์์ฑ ๋ฐฉ๋ฒ
์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด Vanilla JavaScript๋ง์ ์ฌ์ฉํ์ฌ ๋ชฉ์ฐจ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ํ์ด์ง ๋ก๋ฉ ์๋๋ฅผ ๊ฐ์ ํ๊ณ ์ธ๋ถ ์์กด์ฑ์ ์ค์ฌ SEO ์ฑ๋ฅ ์ต์ ํ์ ์ ๋ฆฌํ ์ ์์ต๋๋ค.
1. ๋ชฉ๋ก์ ๋์ ์ผ๋ก ์์ฑํ๊ธฐ ์ํ JavaScript ์ฝ๋
HTML ๋ฌธ์์ head ๋๋ /body ํ๊ทธ ๋ฐ๋ก ์์ ๋ค์ JavaScript ์ฝ๋๋ฅผ ์ถ๊ฐํ์ฌ ๋ชฉ์ฐจ๋ฅผ ๋์ ์ผ๋ก ์์ฑํฉ๋๋ค. ์ด ์ฝ๋๋ ๋ณธ๋ฌธ ๋ด์ H2, H3, H4 ํ๊ทธ๋ฅผ ์ฐพ์ ๋ชฉ๋ก์ ๊ตฌ์ฑํฉ๋๋ค:
script
document.addEventListener("DOMContentLoaded", function() {
const toc = document.querySelector('#toc ul');
const headings = document.querySelectorAll('.tt_article_useless_p_margin.contents_style h2, .tt_article_useless_p_margin.contents_style h3, .tt_article_useless_p_margin.contents_style h4');
let hasSubheadings = false;
headings.forEach((heading, index) = {
if (!heading.id) {
heading.id = `heading-${index}`;
}
if (heading.tagName === 'H2' || heading.tagName === 'H3' || heading.tagName === 'H4') {
hasSubheadings = true;
}
const listItem = document.createElement('li');
const link = document.createElement('a');
link.href = `#${heading.id}`;
link.textContent = heading.textContent;
// ์ ๋ชฉ ๋ ๋ฒจ์ ๋ฐ๋ผ ํด๋์ค ์ถ๊ฐ (์คํ์ผ๋ง ์ฉ์ด)
if (heading.tagName === 'H2') {
link.classList.add('h2-link');
} else if (heading.tagName === 'H3') {
link.classList.add('h3-link');
} else if (heading.tagName === 'H4') {
link.classList.add('h4-link');
}
listItem.appendChild(link);
toc.appendChild(listItem);
});
if (!hasSubheadings) {
toc.style.display = 'none';
}
});
/script
2. ๋ชฉ๋ก ๋์์ธ์ ์ํ CSS ์คํ์ผ ๋ฐ ํ์ ์์น ์ค์
๋ชฉ์ฐจ์ ๋์์ธ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ์๋์ ๊ฐ์ CSS ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๋ชฉ๋ก์ ํ์ํ ์์น์๋ ๊ฐ๋จํ div id="toc"ul/ul/div ์ฝ๋๋ฅผ ์ฝ์
ํ์ฌ JavaScript๊ฐ ๋์ ์ผ๋ก ๋ชฉ๋ก์ ์ฑ์ฐ๋๋ก ํฉ๋๋ค.

์ด์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์์ JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ๋ชฉ์ฐจ๋ฅผ ์์ฑํ๋ฉด, ์ถ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด๋ ํจ์จ์ ์ด๊ณ ์ ์ฐํ๊ฒ ์ฝํ ์ธ ๋ฅผ ํ์ํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ต๋๋ค.
3๋จ๊ณ: ์๋ ๋ชฉ๋ก ์์ฑ ๋ฐฉ๋ฒ (TOC ํ๋ฌ๊ทธ์ธ vs. JavaScript) ๋น๊ต
์ด์ TOC ํ๋ฌ๊ทธ์ธ๊ณผ ์์ JavaScript๋ฅผ ์ฌ์ฉํ ๋ชฉ์ฐจ ์์ฑ ๋ฐฉ๋ฒ์ ์ฅ๋จ์ ์ ๋ช ํํ ๋น๊ตํด๋ณด๊ฒ ์ต๋๋ค. ์ด ๋น๊ต๋ฅผ ํตํด ์์ ์ ๋ธ๋ก๊ทธ ํ๊ฒฝ์ ๊ฐ์ฅ ์ ํฉํ ์๋ ๋ชฉ๋ก ์์ฑ ๋ฐฉ์์ ์ ํํ ์ ์์ต๋๋ค.
๋ธ๋ก๊ทธ TOC ๊ตฌํ ๋ฐฉ์๋ณ ์ฅ๋จ์ ๋น๊ต
| ๊ตฌ๋ถ | jQuery TOC ํ๋ฌ๊ทธ์ธ | ์์ JavaScript TOC |
|---|---|---|
| ๊ตฌํ ๋์ด๋ | ์ฌ์ (์ค์ ๋ง ํ์) | ์ค๊ฐ (์ง์ DOM ์กฐ์ ์ฝ๋ ์์ฑ ํ์) |
| ์ฑ๋ฅ / ๊ฒฝ๋ํ | jQuery ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ์ผ๋ก ์ธํด ์๋์ ์ผ๋ก ๋ฌด๊ฑฐ์ | ๊ฒฝ๋ํ, ์ธ๋ถ ์์กด์ฑ ์์ (ํ์ด์ง ๋ก๋ฉ ์๋์ ์ ๋ฆฌ) |
| ์๋ํ / ์ ์ฐ์ฑ | ์ ๋ชฉ ๋ณ๊ฒฝ ์ ์๋ ์ ๋ฐ์ดํธ, ๋์ ์ ์ฐ์ฑ | ์ ๋ชฉ ๊ตฌ์กฐ ๋ณ๊ฒฝ ์ ์ฝ๋ ์์ ํ์, ์ ์ง ๊ด๋ฆฌ๊ฐ ๊น๋ค๋ก์ |
| SEO ์ธก๋ฉด | ์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์ ์ผ๋ก ๊ฐ์ ์ ๋์ | ๊ฒฝ๋ํ๋ก ์ธํ ํ์ด์ง ์๋ ๊ฐ์ (์ง์ ์ SEO ์ด์ ) |
๊ฐ๋จํ ๋ธ๋ก๊ทธ ๋๋ SEO ์ฑ๋ฅ ์ต์ ํ๊ฐ ๋ชฉํ์ผ ๊ฒฝ์ฐ: ์ ๋ชฉ์ด ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ฉด ์์ JavaScript TOC ๋ฐฉ๋ฒ์ด ๊ฒฝ๋ํ ๋ฐ ํ์ด์ง ์๋ ์ธก๋ฉด์์ ๋ ์ ํฉํ ์ ์์ต๋๋ค.
๋ณต์กํ ์ฝํ ์ธ ๋๋ ๋น ๋ฅธ ๊ตฌํ์ด ๋ชฉํ์ผ ๊ฒฝ์ฐ: ์ ๋ชฉ์ด ์์ฃผ ์ถ๊ฐ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ, ์๋ ์ ๋ฐ์ดํธ ๊ธฐ๋ฅ์ด ๋ฐ์ด๋ jQuery TOC ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์จ์ ์ ๋๋ค.
Q1. ๋ชฉ์ฐจ๋ฅผ ์๋ ์์ฑํ๋ ๊ฒ์ด ๋ธ๋ก๊ทธ SEO์ ์ง์ ์ ์ธ ์ํฅ์ ์ฃผ๋์?
A. ๋ชฉ์ฐจ ์์ฒด๋ ์ง์ ์ ์ธ ๊ฒ์์์ง ํ๊ฐ ์์๋ ์๋๋๋ค. ํ์ง๋ง ๋ชฉ์ฐจ๋ ๊ธด ์ฝํ ์ธ ์ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ ๋ณด์ฌ์ฃผ๊ณ ์ฌ์ฉ์๊ฐ ์ํ๋ ์ ๋ณด๋ก ๋น ๋ฅด๊ฒ ์ด๋ํ๊ฒ ํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ(UX)์ ํฌ๊ฒ ๊ฐ์ ํฉ๋๋ค. UX ๊ฐ์ ์ ์ฒด๋ฅ ์๊ฐ ์ฆ๊ฐ๋ก ์ด์ด์ ธ ๊ฐ์ ์ ์ผ๋ก SEO์ ๋งค์ฐ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
Q2. JavaScript TOC๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ด์ง ๋ก๋ฉ ์๋๊ฐ ์ ๋ง ๋นจ๋ผ์ง๋์?
A. ๋ค, ๋นจ๋ผ์ง ์ ์์ต๋๋ค. jQuery TOC๋ jQuery๋ผ๋ ํฐ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ์ง๋ง, ์์ JavaScript TOC๋ ์ถ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ ์์ด ํ์ผ ํฌ๊ธฐ๊ฐ ํจ์ฌ ์์ต๋๋ค. ํ์ผ ํฌ๊ธฐ๊ฐ ์์ผ๋ฉด ์ด๊ธฐ ๋ก๋ฉ ๋ฆฌ์์ค๊ฐ ์ค์ด๋ค์ด ํ์ด์ง ์๋ ๊ฐ์ ์ ์ง์ ์ ์ธ ์ด์ ์ ์ค ์ ์์ต๋๋ค.
Q3. ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์๋ ์๋ ๋ชฉ๋ก ์์ฑ ๊ธฐ๋ฅ์ด ์ ๋๋ก ์๋ํด์ผ ๋ ธ์ถ ์์์ ์ ๋ฆฌํ๊ฐ์?
A. ๊ทธ๋ ์ต๋๋ค. ๊ตฌ๊ธ์ ํฌํจํ ๋๋ถ๋ถ์ ๊ฒ์์์ง์ ๋ชจ๋ฐ์ผ ์นํ์ฑ์ ์ค์ํ ๊ฒ์์์ง ํ๊ฐ ์์๋ก ๊ฐ์ฃผํฉ๋๋ค. ๋ชจ๋ฐ์ผ์์ ๋ชฉ์ฐจ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ํ์๋๊ณ ํฐ์น๋ก ์ด๋ํ๋ ๊ธฐ๋ฅ์ด ์ํํด์ผ ์ฌ์ฉ์ ๊ฒฝํ ์ ์๊ฐ ๋๊ฒ ์ ์ง๋๋ฉฐ, ์ด๋ ๊ณง ๋ ธ์ถ ์์ ์ ์ง์ ํ์์ ์ ๋๋ค.
๋ธ๋ก๊ทธ ํ๊ฒฝ์ ๋ง๋ TOC ๊ตฌํ ๋ฐฉ์ ์ ํํ๊ธฐ
๋ธ๋ก๊ทธ ๋ชฉ๋ก ์๋ ์์ฑ ๋ฐฉ๋ฒ์ jQuery TOC์ ์์ JavaScript TOC ์ค ์ด๋ค ๊ฒ์ด๋ ์ฝํ ์ธ ์ ๊ฐ๋ ์ฑ์ ๋์ฌ์ฃผ๋ ํจ๊ณผ์ ์ธ SEO ์ ๊ฒ ํญ๋ชฉ์ ๋๋ค. ๊ตฌํ ๋์ด๋, ํ์ด์ง ์๋ ๋ชฉํ, ์ฝํ ์ธ ์ ๋ณต์ก์ฑ ๋ฑ์ ๊ณ ๋ คํ์ฌ ๊ทํ์ ๋ธ๋ก๊ทธ์ ๊ฐ์ฅ ์ ํฉํ TOC ๊ตฌํ ๋ฐฉ์์ ์ ํํ์๊ธฐ ๋ฐ๋๋๋ค.