๐Ÿ›๏ธ 02. ์‹œ๋งจํ‹ฑ HTML: div ๊ณตํ™”๊ตญ์—์„œ ํƒˆ์ถœํ•˜๋Š” ๋ฒ•

2026๋…„ 3์›” 5์ผ ์ˆ˜์ •๋จ

๐Ÿ“‹ ๊ฐœ์š”

article, section, aside, nav, main, header, footer โ€” ์˜๋ฏธ ์žˆ๋Š” ํƒœ๊ทธ ํ•˜๋‚˜๊ฐ€ SEO, ์ ‘๊ทผ์„ฑ, ์œ ์ง€๋ณด์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์— ํ•ด๊ฒฐํ•˜๋Š” ์ด์œ ๋ฅผ ํŒŒํ—ค์นฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ์ด ๋ฌธ์„œ๋ฅผ ์ฝ๊ธฐ ์ „์—

โฑ๏ธ ์˜ˆ์ƒ ์ฝ๊ธฐ ์‹œ๊ฐ„: 18๋ถ„ / ํ•ต์‹ฌ ํŒŒํŠธ๋งŒ: 10๋ถ„

๐Ÿ—บ๏ธ ์ด ๋ฌธ์„œ์˜ ํ๋ฆ„

[div ๋‚จ์šฉ์˜ ํํ•ด] โ†’ [์‹œ๋งจํ‹ฑ ํƒœ๊ทธ ์ด์ •๋ฆฌ] โ†’ [article vs section ๊ฒฐ์ • ํŠธ๋ฆฌ] โ†’ [Next.js ์ปดํฌ๋„ŒํŠธ์™€์˜ ์—ฐ๊ณ„]

๐ŸŽฏ ์ด ๋ฌธ์„œ๋ฅผ ๋‹ค ์ฝ์œผ๋ฉด ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

  • <div> ๋Œ€์‹  ์จ์•ผ ํ•  ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ๋ฅผ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • <article> ๊ณผ <section> ์˜ ์ฐจ์ด๋ฅผ ์›๋ฆฌ๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‹œ๋งจํ‹ฑ HTML์ด SEO์™€ ์Šคํฌ๋ฆฐ๋ฆฌ๋”์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • React/Next.js ์ปดํฌ๋„ŒํŠธ์—์„œ ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ—บ๏ธ ์ด ๋ฌธ์„œ์˜ ๋ฐฐ๊ฒฝ ์„ธ๊ณ„๊ด€: '์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ'

  • ๐Ÿฃ ์˜์ฒ  ( ์‹ ์ž… ): "์˜ํ˜ธ ๋‹˜, ์ € ์ง€๊ธˆ๊นŒ์ง€ ๋ชจ๋“  ๋ ˆ์ด์•„์›ƒ์„ <div> ๋กœ ์žก์•˜๋Š”๋ฐ์š”, ๋ญ๊ฐ€ ๋ฌธ์ œ์ธ๊ฐ€์š”? ํ™”๋ฉด์—๋Š” ๋˜‘๊ฐ™์ด ๋‚˜์˜ค๊ณ , ๊ธฐ๋Šฅ๋„ ๋‹ค ๋ผ์š”. ๊ทผ๋ฐ ์˜์ˆ™ ๋‹˜์ด '์‹œ๋งจํ‹ฑํ•˜๊ฒŒ ์งœ์•ผ ํ•œ๋‹ค'๊ณ  ๊ณ„์† ์–˜๊ธฐํ•˜๋Š”๋ฐ, ์†”์งํžˆ <div> ์™ ์ง‘์–ด๋„ฃ๊ณ  CSS ์ž…ํžˆ๋ฉด ๋˜‘๊ฐ™์ง€ ์•Š๋‚˜์š”?"
  • ๐Ÿฆ ์˜ํ˜ธ ( ๋ฆฌ๋“œ ): "ํ™”๋ฉด์— ๋ณด์ด๋Š” ๊ฒŒ ๋˜‘๊ฐ™๋‹ค๊ณ  ์ฝ”๋“œ๊ฐ€ ๋˜‘๊ฐ™์€ ๊ฑด ์•„๋‹ˆ์—์š”. ๋ธŒ๋ผ์šฐ์ €๋Š” <div> ๋ฅผ ๋ณด๋ฉด '์ด๊ฒŒ ๋ญ”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค'๊ณ  ํ•ด์š”. ๊ทผ๋ฐ <article> ์„ ๋ณด๋ฉด '์•„, ์ด๊ฑด ๋…๋ฆฝ์ ์ธ ์ฝ˜ํ…์ธ  ๋ฉ์–ด๋ฆฌ๊ตฌ๋‚˜'๋ผ๊ณ  ๋ฐ”๋กœ ํŒŒ์•…ํ•ด์š”. ๊ตฌ๊ธ€ ๋ด‡, ์Šคํฌ๋ฆฐ๋ฆฌ๋”, ์‹ฌ์ง€์–ด 6๊ฐœ์›” ํ›„์˜ ์˜์ฒ  ๋‹˜๋„ ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ๊ฐ€ ์žˆ์–ด์•ผ ์ฝ”๋“œ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์–ด์š”."

๐Ÿค” ์™œ ์•Œ์•„์•ผ ํ•˜๋Š”๊ฐ€

์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ SEO ๊ฐœ์„  ์ž‘์—…์„ ๋งก์€ ์˜์ฒ ์ด, Google Search Console์„ ์—ด์—ˆ๋‹ค.

๐Ÿฃ ์˜์ฒ : "์•„๋‹ˆ... ์šฐ๋ฆฌ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธ€์ด ๊ตฌ๊ธ€์— ์ œ๋Œ€๋กœ ๋‚˜์™€์•ผ ํ•˜๋Š”๋ฐ ์™œ ์ด๋ ‡๊ฒŒ ๊ฒ€์ƒ‰ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์•„์š”?"

๐Ÿ‘” ์˜์ˆ˜(PM): "๊ฐœ๋ฐœ์ž ๋ถ„๋“ค ๋„์›€ ์ข€ ๋ฐ›์•„์•ผ ํ•  ๊ฒƒ ๊ฐ™์•„์š”. ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™” ์ ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋‚ฎ์•„์š”."

์˜์ฒ ์ด์˜ ๊ธฐ์กด ์ฝ”๋“œ:

<!-- โŒ ์˜์ฒ ์ด์˜ ์ตœ์ดˆ ์ฝ”๋“œ: div ๊ณตํ™”๊ตญ -->
<div class="wrapper">
  <div class="header">
    <div class="logo">์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ</div>
    <div class="nav">
      <div class="nav-item">ํ™ˆ</div>
      <div class="nav-item">๊ฒŒ์‹œํŒ</div>
    </div>
  </div>
  <div class="main">
    <div class="post">
      <div class="post-title">๋ฆฌ์•กํŠธ ์ƒํƒœ๊ด€๋ฆฌ ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?</div>
      <div class="post-content">์ €๋Š” ์š”์ฆ˜ Zustand๋ฅผ ์“ฐ๋Š”๋ฐ...</div>
    </div>
  </div>
  <div class="sidebar">
    <div class="popular-posts">์ธ๊ธฐ ๊ฒŒ์‹œ๊ธ€</div>
  </div>
</div>

์ด ์ฝ”๋“œ๋ฅผ ๊ตฌ๊ธ€ ๋ด‡์ด ์ฝ์œผ๋ฉด? <div> ๋Š” ๊ตฌ๊ธ€์—๊ฒŒ ์™„์ „ํžˆ ์˜๋ฏธ ์—†๋Š” ๊ทธ๋ฆ‡์ด์•ผ. "์—ฌ๊ธฐ๊ฐ€ nav์ธ์ง€, main์ธ์ง€, footer์ธ์ง€" ์ „ํ˜€ ์•Œ ์ˆ˜ ์—†์–ด.


๐Ÿ›๏ธ 1. ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ ์ด์ •๋ฆฌ โ€” ๊ฐ ํƒœ๊ทธ์˜ '์—ญํ•  ์นด๋“œ'

1-1. ํŽ˜์ด์ง€ ๋ ˆ๋ฒจ ๊ตฌ์กฐ ํƒœ๊ทธ

<!-- โœ… 5๋…„ ์ฐจ์˜ ์ฝ”๋“œ: ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ๋กœ ์˜๋ฏธ ์žˆ๋Š” ๊ตฌ์กฐ -->
<body>
  <header>          <!-- ์ตœ์ƒ์œ„: ์‚ฌ์ดํŠธ ๋กœ๊ณ , ๋ฉ”์ธ ๋‚ด๋น„๊ฒŒ์ด์…˜ -->
    <nav>           <!-- ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋งํฌ ๋ฌถ์Œ -->
      <ul>
        <li><a href="/">ํ™ˆ</a></li>
        <li><a href="/posts">๊ฒŒ์‹œํŒ</a></li>
      </ul>
    </nav>
  </header>
 
  <main>            <!-- ํŽ˜์ด์ง€์˜ ํ•ต์‹ฌ ์ฝ˜ํ…์ธ : ํŽ˜์ด์ง€๋‹น ๋”ฑ ํ•˜๋‚˜๋งŒ -->
    <article>       <!-- ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ/๊ณต์œ ๋  ์ˆ˜ ์žˆ๋Š” ์™„๊ฒฐ๋œ ์ฝ˜ํ…์ธ  -->
      <h1>๋ฆฌ์•กํŠธ ์ƒํƒœ๊ด€๋ฆฌ ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?</h1>
      <p>์ €๋Š” ์š”์ฆ˜ Zustand๋ฅผ ์“ฐ๋Š”๋ฐ...</p>
    </article>
  </main>
 
  <aside>           <!-- ๋ณธ๋ฌธ๊ณผ ๊ฐ„์ ‘์ ์œผ๋กœ ์—ฐ๊ด€๋œ ๋ณด์กฐ ์ฝ˜ํ…์ธ  -->
    <h2>์ธ๊ธฐ ๊ฒŒ์‹œ๊ธ€</h2>
  </aside>
 
  <footer>          <!-- ์ €์ž‘๊ถŒ, ์—ฐ๋ฝ์ฒ˜, ๋ถ€๊ฐ€ ๋งํฌ -->
    <p>ยฉ 2025 ์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ</p>
  </footer>
</body>

๊ฐ ํƒœ๊ทธ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €/๊ฒ€์ƒ‰์—”์ง„์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ์˜๋ฏธ:

ํƒœ๊ทธARIA Role๋ธŒ๋ผ์šฐ์ €/๊ฒ€์ƒ‰์—”์ง„์ด ์ดํ•ดํ•˜๋Š” ์˜๋ฏธ
<header>banner"์ด ํŽ˜์ด์ง€/์„น์…˜์˜ ์†Œ๊ฐœ์™€ ๋„ค๋น„๊ฒŒ์ด์…˜์ด ์žˆ์–ด์š”"
<nav>navigation"์ด๊ฑด ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋งํฌ ๋ชจ์Œ์ด์—์š”"
<main>main"์ด ํŽ˜์ด์ง€์˜ ํ•ต์‹ฌ ์ฝ˜ํ…์ธ ๋Š” ์—ฌ๊ธฐ์˜ˆ์š”" (ํŽ˜์ด์ง€๋‹น 1๊ฐœ)
<article>article"๋…๋ฆฝ์ ์œผ๋กœ ๋œฏ์–ด๋‚ด๋„ ์˜๋ฏธ๊ฐ€ ์™„์ „ํ•œ ์ฝ˜ํ…์ธ ์˜ˆ์š”"
<section>region"๊ฐ™์€ ์ฃผ์ œ๋ฅผ ๋ฌถ์€ ์„น์…˜์ด์—์š”"
<aside>complementary"๋ณธ๋ฌธ๊ณผ ๊ฐ„์ ‘ ์—ฐ๊ด€๋œ ๋ณด์กฐ ์ •๋ณด์˜ˆ์š”"
<footer>contentinfo"์ €์ž‘๊ถŒ, ์—ฐ๋ฝ์ฒ˜ ๋“ฑ ํ•˜๋‹จ ์ •๋ณด์˜ˆ์š”"

๐Ÿ”€ 2. article vs section โ€” ๊ฐ€์žฅ ๋งŽ์ด ํ—ท๊ฐˆ๋ฆฌ๋Š” ์Œ

๐Ÿฃ ์˜์ฒ : "์•„, ๊ทผ๋ฐ์š”. <article> ์ด๋ž‘ <section> ์ด ์ œ์ผ ํ—ท๊ฐˆ๋ ค์š”. ๋‘˜ ๋‹ค ์ฝ˜ํ…์ธ  ๋ฌถ๋Š” ๊ฑฐ ์•„๋‹Œ๊ฐ€์š”?"

๐Ÿฆ ์˜ํ˜ธ ๋ฆฌ๋“œ: "๋”ฑ ํ•˜๋‚˜๋งŒ ๊ธฐ์–ตํ•ด์š”. <article> ์€ RSS, ์นด์นด์˜คํ†ก์œผ๋กœ ๊ณต์œ ํ–ˆ์„ ๋•Œ ๊ทธ๊ฒƒ๋งŒ ๋”ฐ๋กœ ๋ด๋„ ๋ง์ด ๋˜๋Š” ์ฝ˜ํ…์ธ ์˜ˆ์š”. <section> ์€ ํŽ˜์ด์ง€ ์•ˆ์—์„œ๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ์ฃผ์ œ๋ณ„ ์ฑ•ํ„ฐ๊ณ ์š”."

๊ฒฐ์ • ํŠธ๋ฆฌ๋กœ ์ดํ•ดํ•˜๊ธฐ

์ด ์ฝ˜ํ…์ธ  ๋ธ”๋ก์ด...

Q1. ํ˜ผ์ž ๋–ผ์–ด๋‚ด์„œ ๊ณต์œ ํ•ด๋„ ์˜๋ฏธ๊ฐ€ ํ†ตํ•˜๋Š”๊ฐ€?
  โ”œโ”€ YES โ†’ <article> (๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ, ๋Œ“๊ธ€, ๋‰ด์Šค ๊ธฐ์‚ฌ, ์ œํ’ˆ ์นด๋“œ)
  โ””โ”€ NO  โ†’ Q2. ๊ฐ™์€ ์ฃผ์ œ๋กœ ๋ฌถ์ธ ์ฑ•ํ„ฐ์ธ๊ฐ€?
             โ”œโ”€ YES โ†’ <section> (ํŽ˜์ด์ง€ ๋‚ด ํƒญ, ์†Œ๊ฐœ/๊ธฐ๋Šฅ/๊ฐ€๊ฒฉ ์„น์…˜)
             โ””โ”€ NO  โ†’ ๊ทธ๋ƒฅ ์Šคํƒ€์ผ์šฉ์ด๋ฉด <div>
<!-- ์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ ํŽ˜์ด์ง€ ์‹ค์ „ ์˜ˆ์‹œ -->
<main>
  <!-- article: ์ด ๊ฒŒ์‹œ๊ธ€ ์ž์ฒด๊ฐ€ ๋…๋ฆฝ์ ์ธ ์ฝ˜ํ…์ธ  ๋‹จ์œ„ -->
  <article>
    <h1>๋ฆฌ์•กํŠธ ์ƒํƒœ๊ด€๋ฆฌ ๋น„๊ต: Zustand vs Jotai</h1>
    <p>์ €๋Š” ์š”์ฆ˜ Zustand๋ฅผ ์“ฐ๋Š”๋ฐ, Jotai์™€ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€...</p>
 
    <!-- section: article ์•ˆ์˜ ์ฑ•ํ„ฐ ๊ตฌ๋ถ„ -->
    <section>
      <h2>Zustand ์žฅ๋‹จ์ </h2>
      <p>...</p>
    </section>
    <section>
      <h2>Jotai ์žฅ๋‹จ์ </h2>
      <p>...</p>
    </section>
 
    <!-- article ์•ˆ์˜ article: ๋Œ“๊ธ€๋„ ๋…๋ฆฝ์ ์ธ ์ฝ˜ํ…์ธ  -->
    <section>
      <h2>๋Œ“๊ธ€ 3๊ฐœ</h2>
      <article>
        <h3>์˜์ฒ  ๋‹˜์˜ ๋Œ“๊ธ€</h3>
        <p>์ €๋„ Zustand ์”๋‹ˆ๋‹ค!</p>
      </article>
      <article>
        <h3>์˜ํ˜ธ ๋‹˜์˜ ๋Œ“๊ธ€</h3>
        <p>์›๋ฆฌ๋ถ€ํ„ฐ ํŒŒ์•…ํ•˜์„ธ์š”.</p>
      </article>
    </section>
  </article>
</main>

๐Ÿ” 3. ํ—ค๋”ฉ ๊ณ„์ธต๊ตฌ์กฐ โ€” H1~H6์˜ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๋ฒ•

์‹œ๋งจํ‹ฑ HTML์—์„œ ํ—ค๋”ฉ ๊ณ„์ธต ์€ ๋ฌธ์„œ์˜ ๋ชฉ์ฐจ๋‚˜ ๋‹ค๋ฆ„์—†์–ด. ์Šคํฌ๋ฆฐ๋ฆฌ๋” ์‚ฌ์šฉ์ž๋Š” ํ—ค๋”ฉ์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ํƒ์ƒ‰ํ•˜๊ฑฐ๋“ .

<!-- โŒ ํ”ํ•œ ์‹ค์ˆ˜: ํฌ๊ธฐ ๋•Œ๋ฌธ์— ํ—ค๋”ฉ ๋ ˆ๋ฒจ์„ ์„ ํƒ -->
<h1>์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ</h1>
<h3>๋ฆฌ์•กํŠธ ๊ฒŒ์‹œํŒ</h3>  <!-- h2 ๊ฑด๋„ˆ๋œ€! -->
<h5>์ธ๊ธฐ ๊ธ€ ์ œ๋ชฉ</h5>   <!-- h4 ๊ฑด๋„ˆ๋œ€! -->
<!-- ํ•ด๊ฒฐ์ฑ…: CSS๋กœ ํฌ๊ธฐ ์กฐ์ •, ํ—ค๋”ฉ ๋ ˆ๋ฒจ์€ ๋…ผ๋ฆฌ์  ๊ณ„์ธต์œผ๋กœ -->
 
<!-- โœ… ์˜ฌ๋ฐ”๋ฅธ ํ—ค๋”ฉ ๊ณ„์ธต -->
<body>
  <header>
    <h1>์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ</h1>  <!-- ํŽ˜์ด์ง€๋‹น H1์€ ๋”ฑ ํ•˜๋‚˜ -->
  </header>
  <main>
    <h2>๋ฆฌ์•กํŠธ ๊ฒŒ์‹œํŒ</h2>
    <article>
      <h3>๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ</h3>
      <section>
        <h4>๋Œ“๊ธ€</h4>
      </section>
    </article>
  </main>
</body>

๐Ÿ”— SEO ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ
Google ๊ฒ€์ƒ‰ ๋ด‡์€ H1์ด ๋‹จ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ•ํ•˜๊ฒŒ ๊ถŒ์žฅํ•ด์š”. H1์€ "์ด ํŽ˜์ด์ง€๊ฐ€ ๋ฌด์—‡์— ๊ด€ํ•œ ํŽ˜์ด์ง€์ธ์ง€" ๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์‹ ํ˜ธ๊ฑฐ๋“ ์š”. H1์ด ์—ฌ๋Ÿฌ ๊ฐœ์ด๊ฑฐ๋‚˜ ์—†์œผ๋ฉด ํŽ˜์ด์ง€ ์ฃผ์ œ๋ฅผ ์ž˜๋ชป ํŒŒ์•…ํ•ด์„œ ๊ฒ€์ƒ‰ ์ˆœ์œ„์— ๋ถˆ๋ฆฌํ•˜๊ฒŒ ์ž‘์šฉํ•ด์š”.


โš›๏ธ 4. React/Next.js ์ปดํฌ๋„ŒํŠธ์—์„œ์˜ ์‹œ๋งจํ‹ฑ HTML

๐Ÿฃ ์˜์ฒ : "๊ทผ๋ฐ React์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ์ชผ๊ฐœ๋‹ˆ๊นŒ, ์–ด์ฐจํ”ผ <div> ๋กœ ๊ฐ์‹ธ๋Š” ๊ฑฐ ์•„๋‹Œ๊ฐ€์š”?"

๐Ÿฆ ์˜ํ˜ธ ๋ฆฌ๋“œ: "๋ฐ”๋กœ ๊ทธ ์ฐฉ๊ฐ์ด ๋งŽ์€ React ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ div ๊ณตํ™”๊ตญ์œผ๋กœ ๋งŒ๋“ค์–ด์š”. ์ปดํฌ๋„ŒํŠธ = JSX ๋ž˜ํผ = ๋ฐ˜๋“œ์‹œ <div> ๋ผ๋Š” ๊ณต์‹์€ ํ‹€๋ ค์š”."

// โŒ div ๋‚จ์šฉ ํŒจํ„ด: ์˜๋ฏธ ์—†๋Š” div๊ฐ€ DOM์— ์Œ“์ž„
function PostList() {
  return (
    <div>
      {posts.map(post => (
        <div key={post.id} className="post-card">
          <div className="post-title">{post.title}</div>
          <div className="post-content">{post.content}</div>
        </div>
      ))}
    </div>
  );
}
 
// โœ… ์‹œ๋งจํ‹ฑ ํŒจํ„ด: ์˜๋ฏธ ์žˆ๋Š” ํƒœ๊ทธ ์‚ฌ์šฉ
function PostList() {
  return (
    <section aria-label="๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก">
      {posts.map(post => (
        // article: ๊ฐ ๊ฒŒ์‹œ๊ธ€์€ ๋…๋ฆฝ์ ์ธ ์ฝ˜ํ…์ธ  ๋‹จ์œ„
        <article key={post.id}>
          <h2>{post.title}</h2>
          <p>{post.content}</p>
        </article>
      ))}
    </section>
  );
}
// Next.js ๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ: ์‹œ๋งจํ‹ฑ ๋ผˆ๋Œ€ ๊ณ ์ •
// app/layout.tsx
export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="ko">
      <body>
        <header>
          <nav>
            <Link href="/">ํ™ˆ</Link>
            <Link href="/posts">๊ฒŒ์‹œํŒ</Link>
          </nav>
        </header>
        {/* main์ด children์„ ๊ฐ์‹ธ๋ฉด, ๋ชจ๋“  ํŽ˜์ด์ง€์˜ ํ•ต์‹ฌ ์ฝ˜ํ…์ธ ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ž˜ํ•‘๋จ */}
        <main>{children}</main>
        <footer>
          <p>ยฉ 2025 ์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ</p>
        </footer>
      </body>
    </html>
  );
}

React Fragment ํ™œ์šฉ: ๋ถˆํ•„์š”ํ•œ DOM ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์œผ๋ฉด์„œ ์—ฌ๋Ÿฌ ์‹œ๋งจํ‹ฑ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์–ด.

// Fragment๋กœ ๋ถˆํ•„์š”ํ•œ div ๋ž˜ํผ ์ œ๊ฑฐ
function ArticleWithSidebar() {
  return (
    <>
      <article>
        <h1>๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ</h1>
      </article>
      <aside>
        <h2>๊ด€๋ จ ๊ธ€</h2>
      </aside>
    </>
  );
}

๐Ÿ ํ•ต์‹ฌ ํŒจํ„ด ์ด์ •๋ฆฌ

์ƒํ™ฉ์“ธ ํƒœ๊ทธ์ ˆ๋Œ€ ์“ฐ์ง€ ๋ง ๊ฒƒ
์‚ฌ์ดํŠธ ๋กœ๊ณ  + ๋ฉ”์ธ ๋‚ด๋น„<header> + <nav><div class="header">
ํŽ˜์ด์ง€ ํ•ต์‹ฌ ์ฝ˜ํ…์ธ  ์˜์—ญ<main><div id="content">
๋ธ”๋กœ๊ทธ ๊ธ€, ๋‰ด์Šค, ๋Œ“๊ธ€<article><div class="post">
ํŽ˜์ด์ง€ ๋‚ด ์ฑ•ํ„ฐ/ํƒญ ๊ตฌ๋ถ„<section> (h์ž์‹ ํ•„์ˆ˜)<div class="tab">
๋ณธ๋ฌธ ์—ฐ๊ด€ ๋ณด์กฐ ์ •๋ณด<aside><div class="sidebar">
์ €์ž‘๊ถŒ/์—ฐ๋ฝ์ฒ˜ ํ•˜๋‹จ<footer><div class="footer">
์ˆœ์ˆ˜ ์Šคํƒ€์ผ ๋ž˜ํ•‘<div>โ€”


๐Ÿ“ ๋งˆ๋ฌด๋ฆฌ ํ€ด์ฆˆ

Q1. ๋‹ค์Œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๊ฐ€์žฅ ์ ํ•ฉํ•œ HTML ํƒœ๊ทธ๋Š”?

์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ ์นด๋“œ๋“ค์ด ์žˆ๋‹ค.
๊ฐ ๋ฆฌ๋ทฐ๋Š” ์ œ๋ชฉ, ๋ณ„์ , ๋‚ด์šฉ, ์ž‘์„ฑ์ผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ,
๋…๋ฆฝ์ ์œผ๋กœ RSS ํ”ผ๋“œ๋‚˜ SNS์— ๊ณต์œ ๋  ์ˆ˜ ์žˆ๋‹ค.

  • A) <section>
  • B) <div>
  • ๊ฐ€) <article>
  • ๋ผ) <aside>

โœ… ์ •๋‹ต: ๊ฐ€

๐Ÿ’ก ์ƒ์„ธ ํ•ด์„ค:

  • ์›๋ฆฌ ์„ค๋ช…: <article> ์€ "๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ ๋ฐ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์™„๊ฒฐ๋œ ์ฝ˜ํ…์ธ " ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ฐ ๋ฆฌ๋ทฐ๋Š” ๋งฅ๋ฝ ์—†์ด๋„ ํ˜ผ์ž ์˜๋ฏธ๊ฐ€ ํ†ตํ•˜๋Š” ์ฝ˜ํ…์ธ ์ด๋ฏ€๋กœ <article> ์ด ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ค๋‹ต ํ”ผ๋“œ๋ฐฑ: <section> ์€ ํŽ˜์ด์ง€ ๋‚ด์—์„œ ์ฑ•ํ„ฐ๋ฅผ ๋‚˜๋ˆ„๋Š” ์šฉ๋„๋กœ, ํ˜ผ์ž์„œ๋Š” ์˜๋ฏธ๊ฐ€ ์™„๊ฒฐ๋˜์ง€ ์•Š์•„์š”. <aside> ๋Š” ๋ณธ๋ฌธ๊ณผ ๊ฐ„์ ‘ ์—ฐ๊ด€๋œ ๋ณด์กฐ ์ •๋ณด์—, <div> ๋Š” ์ˆœ์ˆ˜ ์Šคํƒ€์ผ ๋ž˜ํ•‘์— ์จ์•ผ ํ•ด์š”.
  • ๐Ÿ“Œ ํ•ต์‹ฌ ๊ธฐ์–ต๋ฒ•: "๊ณต์œ  ๊ฐ€๋Šฅํ•œ ์™„๊ฒฐ ์ฝ˜ํ…์ธ  = <article>, ํŽ˜์ด์ง€ ๋‚ด ์ฑ•ํ„ฐ ๊ตฌ๋ถ„ = <section>"

Q2. ์•„๋ž˜ ์ฝ”๋“œ์—์„œ ์ž˜๋ชป๋œ ์ ์„ ๋ชจ๋‘ ๊ณ ๋ฅด์„ธ์š”.

<body>
  <div class="header">
    <h3>์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ</h3>
  </div>
  <div class="content">
    <h1>๊ฒŒ์‹œ๊ธ€ 1</h1>
    <h1>๊ฒŒ์‹œ๊ธ€ 2</h1>
    <h1>๊ฒŒ์‹œ๊ธ€ 3</h1>
  </div>
</body>

โœ… ์ •๋‹ต: โ‘  <div class="header"> โ†’ <header> ๋กœ, โ‘ก H3์ด H1๋ณด๋‹ค ๋จผ์ € ๋“ฑ์žฅ (ํ—ค๋”ฉ ๊ณ„์ธต ์—ญ์ „), โ‘ข H1์ด ์—ฌ๋Ÿฌ ๊ฐœ (ํŽ˜์ด์ง€๋‹น H1์€ ํ•˜๋‚˜)

๐Ÿ’ก ์ƒ์„ธ ํ•ด์„ค:

  • ์›๋ฆฌ ์„ค๋ช…: โ‘  <header> ๋Š” ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ์ด๋ฏ€๋กœ <div> ๋Œ€์‹  ์จ์•ผ ํ•ด์š”. โ‘ก ์‚ฌ์ดํŠธ ์ œ๋ชฉ์ด H3์ธ๋ฐ ๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ์ด H1์ด๋ฉด ๊ณ„์ธต์ด ์—ญ์ „๋ผ์š”. ์‚ฌ์ดํŠธ ์ œ๋ชฉ์ด H1, ๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ์ด H2~H3์ด ๋งž์Šต๋‹ˆ๋‹ค. โ‘ข H1์€ ๊ฒ€์ƒ‰์—”์ง„์—๊ฒŒ "์ด ํŽ˜์ด์ง€์˜ ํ•ต์‹ฌ ์ฃผ์ œ", ํŽ˜์ด์ง€๋‹น ํ•˜๋‚˜์—ฌ์•ผ ํ•ด์š”.
  • ๐Ÿ“Œ ํ•ต์‹ฌ ๊ธฐ์–ต๋ฒ•: "H1์€ ํŽ˜์ด์ง€๋‹น 1๊ฐœ, ํ—ค๋”ฉ ๋ ˆ๋ฒจ์€ ๋…ผ๋ฆฌ ๊ณ„์ธต ์ˆœ์„œ๋Œ€๋กœ (๊ฑด๋„ˆ๋›ฐ๊ธฐ ๊ธˆ์ง€)"

Q3. ์˜์ฒ ์ด์˜ ํ…Œ์ŠคํŠธ ํƒ€์ž„

์˜์ˆ˜(PM)๊ฐ€ ์ƒˆ๋กœ์šด ์š”๊ตฌ์‚ฌํ•ญ์„ ๋“ค๊ณ  ์™”๋‹ค: "์šฐ๋ฆฌ ์‚ฌ์ดํŠธ ํ•˜๋‹จ์— ๊ณ ๊ฐ์„ผํ„ฐ ์—ฐ๋ฝ์ฒ˜, ์ด์šฉ์•ฝ๊ด€, ๊ฐœ์ธ์ •๋ณด์ฒ˜๋ฆฌ๋ฐฉ์นจ ๋งํฌ๋ฅผ ๋„ฃ์–ด์ฃผ์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  ๋ฉ”์ธ ์ฝ˜ํ…์ธ  ์˜ค๋ฅธ์ชฝ์— '์ด ๊ธ€์„ ์ฝ์€ ์‚ฌ๋žŒ๋“ค์ด ์ฝ์€ ๊ธ€' ๋ฐ•์Šค๋„ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”."

์˜์ฒ ์ด๋Š” ๋‘ ์š”์†Œ ๋ชจ๋‘ <div> ๋กœ ์งœ๋ ค ํ•œ๋‹ค. ์˜ํ˜ธ ๋ฆฌ๋“œ๊ฐ€ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์—์„œ ์–ด๋–ค ํƒœ๊ทธ๋ฅผ ๊ถŒ์žฅํ• ๊นŒ?

โœ… ์ •๋‹ต: ํ•˜๋‹จ ์ •๋ณด โ†’ <footer>, ์ถ”์ฒœ ๊ธ€ ๋ฐ•์Šค โ†’ <aside>

๐Ÿ’ก ์ƒ์„ธ ํ•ด์„ค:

  • ์›๋ฆฌ ์„ค๋ช…: <footer> ๋Š” ์ €์ž‘๊ถŒ, ์—ฐ๋ฝ์ฒ˜, ๋ฒ•์  ๋งํฌ ๋“ฑ "์„น์…˜ ๋˜๋Š” ํŽ˜์ด์ง€์˜ ๋งˆ์ง€๋ง‰ ์ •๋ณด" ๋ฅผ ๋‹ด๋Š” ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ์ž…๋‹ˆ๋‹ค. <aside> ๋Š” ๋ฉ”์ธ ์ฝ˜ํ…์ธ ์™€ ๊ฐ„์ ‘์ ์œผ๋กœ ์—ฐ๊ด€๋œ "๋ณด์กฐ ์ •๋ณด" โ€” ๊ด€๋ จ ๊ธ€, ๊ด‘๊ณ , ์ž‘์„ฑ์ž ์†Œ๊ฐœ ๋“ฑ์— ์จ์š”.
  • ์˜ค๋‹ต ํ”ผ๋“œ๋ฐฑ: ์˜์ฒ  ๋‹˜, <div> ๋กœ ์งœ๋ฉด ๊ตฌ๊ธ€ ๋ด‡๋„, ์Šคํฌ๋ฆฐ๋ฆฌ๋”๋„, 6๊ฐœ์›” ํ›„์˜ ์˜์ฒ  ๋‹˜ ๋ณธ์ธ๋„ "์ด๊ฒŒ footer์•ผ, sidebar์•ผ?" ๋ผ๊ณ  ๋˜๋ฌผ์„ ๊ฑฐ์˜ˆ์š”.
  • ๐Ÿ“Œ ํ•ต์‹ฌ ๊ธฐ์–ต๋ฒ•: "ํ•˜๋‹จ ๋ฒ•์ /์—ฐ๋ฝ์ฒ˜ ์ •๋ณด = <footer>, ๋ณธ๋ฌธ ์˜† ๋ณด์กฐ ์ •๋ณด = <aside>"

๐Ÿฃ ์˜์ฒ ์ด์˜ ํ‡ด๊ทผ ์ผ๊ธฐ

์˜ค๋Š˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์—์„œ ์˜ํ˜ธ ๋ฆฌ๋“œ ๋‹˜์ด ๋‚ด PR์— ๋‚จ๊ธด ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์•„์ง๋„ ๋จธ๋ฆฌ์— ๋งด๋ˆ๋‹ค. "์ด ํŽ˜์ด์ง€ ์ „์ฒด๊ฐ€ div ํ•˜๋‚˜๋กœ๋งŒ ๋˜์–ด ์žˆ์–ด์š”. ์Šคํฌ๋ฆฐ๋ฆฌ๋” ์ผœ๋ณด์…จ๋‚˜์š”?" โ€” ๊ทธ ํ•œ๋งˆ๋””์— ์ง„์งœ ๋ญ”๊ฐ€ ์–ป์–ด๋งž์€ ๊ฒƒ ๊ฐ™์•˜๋‹ค.

๐Ÿ’ก "<div> ๋Š” ์Šคํƒ€์ผ์šฉ ๊ทธ๋ฆ‡, ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ๋Š” ์˜๋ฏธ ์žˆ๋Š” ๊ณ„์•ฝ์„œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €ยท๊ตฌ๊ธ€ยท์Šคํฌ๋ฆฐ๋ฆฌ๋” ๋ชจ๋‘ ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ๋ฅผ ์ฝ๊ณ  ํŽ˜์ด์ง€๋ฅผ ์ดํ•ดํ•œ๋‹ค."

ํ‡ด๊ทผํ•˜๊ณ  ์ง‘์—์„œ ์Šคํฌ๋ฆฐ๋ฆฌ๋”(VoiceOver) ์ผœ๊ณ  ์šฐ๋ฆฌ ์„œ๋น„์Šค ์ง์ ‘ ์จ๋ดค๋Š”๋ฐ ์ง„์งœ ์ถฉ๊ฒฉ์ด์—ˆ๋‹ค. ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ๊ฐ€ ์—†์œผ๋‹ˆ๊นŒ "div div div div..." ๋ผ๊ณ  ์ฝ์–ด์ฃผ๋Š”๋ฐ ๋ญ๊ฐ€ ๋ญ”์ง€ ํ•˜๋‚˜๋„ ๋ชจ๋ฅด๊ฒ ๋”๋ผ. <article> ํ•˜๋‚˜ ์“ด๋‹ค๊ณ  ๊ฐœ๋ฐœ์ด ๋” ๋ณต์žกํ•ด์ง€๋Š” ๊ฒƒ๋„ ์•„๋‹Œ๋ฐ, ์ด๊ฑธ ์™œ ์ด์ œ์•ผ ์•Œ์•˜๋‚˜ ์‹ถ์–ด์„œ ์ข€ ๋ฐ˜์„ฑํ–ˆ๋‹ค. ๋‚ด์ผ๋ถ€ํ„ฐ๋Š” PR ์˜ฌ๋ฆฌ๊ธฐ ์ „์— ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ํ•œ ๋ฒˆ์”ฉ ๋Œ๋ ค๋ด์•ผ๊ฒ ๋‹ค.


๐Ÿ”— ๋” ์•Œ์•„๋ณด๊ธฐ