๐Ÿ“‹ 08. table & list ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๋ฒ•: ๋ ˆ์ด์•„์›ƒ์šฉ table์€ ์ด์ œ ์•ˆ๋…•

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

๐Ÿ“‹ ๊ฐœ์š”

table thead/tbody/tfoot, scope, caption, ul/ol/dl โ€” ํ‘œ์™€ ๋ชฉ๋ก์˜ ์‹œ๋งจํ‹ฑ ๊ตฌ์กฐ์™€ ์ ‘๊ทผ์„ฑ, React์—์„œ์˜ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ” ํŒจํ„ด์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

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

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

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

[table์˜ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ ๊ธฐ์ค€] โ†’ [ํ‘œ ์‹œ๋งจํ‹ฑ ๊ตฌ์กฐ] โ†’ [์ ‘๊ทผ์„ฑ ์†์„ฑ] โ†’ [ul/ol/dl ์„ ํƒ ๊ธฐ์ค€] โ†’ [React ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”]

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

  • ๋ ˆ์ด์•„์›ƒ์šฉ <table> ์ด ์™œ ์•ˆ ๋˜๋Š”์ง€ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • <thead>, <tbody>, <tfoot>, <caption>, scope ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
  • <ul>, <ol>, <dl> ์˜ ์ƒํ™ฉ๋ณ„ ์‚ฌ์šฉ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

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

๐Ÿ“‹ 1. table โ€” ํ–‰ยท์—ด ๊ด€๊ณ„ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋งŒ

๋ ˆ์ด์•„์›ƒ์— table ์“ฐ๋ฉด ์•ˆ ๋˜๋Š” ์ด์œ :

  • ์Šคํฌ๋ฆฐ๋ฆฌ๋”๊ฐ€ "ํ…Œ์ด๋ธ”, X์—ด Yํ–‰" ์ด๋ผ๊ณ  ์ฝ์–ด๋ฒ„๋ฆผ โ†’ ๋ ˆ์ด์•„์›ƒ ์˜๋„์™€ ํ˜ผ๋™
  • ๋ฐ˜์‘ํ˜• ์ฒ˜๋ฆฌ ๋ณต์žก
  • ๋ชจ๋ฐ”์ผ์—์„œ ๊ฐ€๋กœ ์Šคํฌ๋กค ๋ฐœ์ƒ
<!-- โœ… ์˜ฌ๋ฐ”๋ฅธ ์‹œ๋งจํ‹ฑ table ๊ตฌ์กฐ -->
<table>
  <!-- caption: ํ‘œ์˜ ์ œ๋ชฉ (์Šคํฌ๋ฆฐ๋ฆฌ๋”๊ฐ€ ๋จผ์ € ์ฝ์Œ) -->
  <caption>์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ ์Šคํ„ฐ๋”” ๋ฉค๋ฒ„ ํ˜„ํ™ฉ</caption>
 
  <thead>
    <tr>
      <!-- scope="col": ์ด ํ—ค๋”๊ฐ€ ์—ด ํ—ค๋”์ž„์„ ์„ ์–ธ -->
      <th scope="col">์ด๋ฆ„</th>
      <th scope="col">์ง๊ตฐ</th>
      <th scope="col">๋ ˆ๋ฒจ</th>
      <th scope="col">๊ฐ€์ž…์ผ</th>
    </tr>
  </thead>
 
  <tbody>
    <tr>
      <!-- scope="row": ์ด ์…€์ด ํ–‰ ํ—ค๋”์ž„์„ ์„ ์–ธ -->
      <th scope="row">์˜์ฒ </th>
      <td>ํ”„๋ก ํŠธ์—”๋“œ</td>
      <td>์‹ ์ž…</td>
      <td><time datetime="2025-01-15">2025.01.15</time></td>
    </tr>
    <tr>
      <th scope="row">์˜ํ˜ธ</th>
      <td>ํ’€์Šคํƒ</td>
      <td>๋ฆฌ๋“œ</td>
      <td><time datetime="2023-03-01">2023.03.01</time></td>
    </tr>
  </tbody>
 
  <tfoot>
    <tr>
      <td colspan="4">์ด ๋ฉค๋ฒ„: 2๋ช…</td>
    </tr>
  </tfoot>
</table>

์Šคํฌ๋ฆฐ๋ฆฌ๋”๋Š” ์ด table์„ ์ด๋ ‡๊ฒŒ ์ฝ์–ด:

"ํ‘œ: ์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ ์Šคํ„ฐ๋”” ๋ฉค๋ฒ„ ํ˜„ํ™ฉ. 4์—ด 3ํ–‰. ์ด๋ฆ„ ์—ด ํ—ค๋”. ์ง๊ตฐ ์—ด ํ—ค๋”. ... ์˜์ฒ  ํ–‰ ํ—ค๋”. ํ”„๋ก ํŠธ์—”๋“œ. ์‹ ์ž…. 2025๋…„ 1์›” 15์ผ."

scope ์†์„ฑ ์—†์ด <th> ๋งŒ ์“ฐ๋ฉด ๋ณต์žกํ•œ ํ‘œ์—์„œ ์–ด๋А ๋ฐฉํ–ฅ(ํ–‰/์—ด)์˜ ํ—ค๋”์ธ์ง€ ์Šคํฌ๋ฆฐ๋ฆฌ๋”๊ฐ€ ํ˜ผ๋™ํ•  ์ˆ˜ ์žˆ์–ด.


๐Ÿ“ 2. ul / ol / dl โ€” ์ƒํ™ฉ๋ณ„ ์„ ํƒ ๊ธฐ์ค€

<!-- ul: ์ˆœ์„œ ์—†๋Š” ๋ชฉ๋ก (ํ•ญ๋ชฉ ๋‚˜์—ด) -->
<ul>
  <li>๋ฆฌ์•กํŠธ ๋ Œ๋”๋ง ์ดํ•ดํ•˜๊ธฐ</li>
  <li>TypeScript ๊ธฐ์ดˆ ๋‹ค์ง€๊ธฐ</li>
  <li>CSS Flexbox ์ •๋ณตํ•˜๊ธฐ</li>
</ul>
 
<!-- ol: ์ˆœ์„œ ์žˆ๋Š” ๋ชฉ๋ก (๋‹จ๊ณ„, ์ˆœ์œ„) -->
<ol>
  <li>ํ”„๋กœ์ ํŠธ ๊ธฐํš์„œ ์ž‘์„ฑ</li>
  <li>์™€์ด์–ดํ”„๋ ˆ์ž„ ์ œ์ž‘</li>
  <li>๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ…</li>
  <li>MVP ๊ฐœ๋ฐœ ์‹œ์ž‘</li>
</ol>
 
<!-- dl: ์šฉ์–ด(dt) + ์„ค๋ช…(dd) ์Œ ๋ชฉ๋ก -->
<dl>
  <dt>DOM</dt>
  <dd>๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML์„ ํŒŒ์‹ฑํ•ด ๋งŒ๋“  ๋…ธ๋“œ ํŠธ๋ฆฌ ๊ฐ์ฒด ๊ตฌ์กฐ</dd>
 
  <dt>CSSOM</dt>
  <dd>CSS๋ฅผ ํŒŒ์‹ฑํ•ด ๋งŒ๋“  ๊ฐ์ฒด ๊ตฌ์กฐ, DOM๊ณผ ํ•ฉ์ณ Render Tree ์ƒ์„ฑ</dd>
</dl>

์„ ํƒ ๊ธฐ์ค€ ํ‘œ:

์ƒํ™ฉํƒœ๊ทธ์˜ˆ์‹œ
์ˆœ์„œ ์—†๋Š” ๋‚˜์—ด<ul>๊ธฐ๋Šฅ ๋ชฉ๋ก, ๋ฉค๋ฒ„ ๋ชฉ๋ก
์ˆœ์„œ ์žˆ๋Š” ๋‹จ๊ณ„/์ˆœ์œ„<ol>ํŠœํ† ๋ฆฌ์–ผ ๋‹จ๊ณ„, ๋žญํ‚น
์šฉ์–ด + ์„ค๋ช… ์Œ<dl>์‚ฌ์ „, ์šฉ์–ด์ง‘, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ
๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฉ”๋‰ด<nav> + <ul>ํ—ค๋” ๋‚ด๋น„, ์‚ฌ์ด๋“œ๋ฐ”

โš›๏ธ 3. React์—์„œ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”

// ํƒ€์ž… ์ •์˜
interface Member {
  id: number;
  name: string;
  role: string;
  level: string;
}
 
// ์‹œ๋งจํ‹ฑ ํ…Œ์ด๋ธ” ์ปดํฌ๋„ŒํŠธ
function MemberTable({ members }: { members: Member[] }) {
  return (
    <table>
      <caption>์Šคํ„ฐ๋”” ๋ฉค๋ฒ„ ํ˜„ํ™ฉ</caption>
      <thead>
        <tr>
          <th scope="col">์ด๋ฆ„</th>
          <th scope="col">์ง๊ตฐ</th>
          <th scope="col">๋ ˆ๋ฒจ</th>
        </tr>
      </thead>
      <tbody>
        {members.map((member) => (
          <tr key={member.id}>
            <th scope="row">{member.name}</th>
            <td>{member.role}</td>
            <td>{member.level}</td>
          </tr>
        ))}
      </tbody>
    </table>
  );
}


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

Q1. ์Šคํฌ๋ฆฐ๋ฆฌ๋”๊ฐ€ ๋ณต์žกํ•œ ํ…Œ์ด๋ธ”์—์„œ ์…€์ด ์–ด๋–ค ํ—ค๋”์— ์†ํ•˜๋Š”์ง€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฝํžˆ๊ฒŒ ํ•˜๋ ค๋ฉด?

โœ… ์ •๋‹ต: <th> ์— scope="col" (์—ด ํ—ค๋”) ๋˜๋Š” scope="row" (ํ–‰ ํ—ค๋”) ์†์„ฑ ์ ์šฉ

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

  • ์›๋ฆฌ ์„ค๋ช…: scope ์†์„ฑ์€ ์Šคํฌ๋ฆฐ๋ฆฌ๋”์—๊ฒŒ "์ด <th> ๋Š” ์—ด ๋ฐฉํ–ฅ์˜ ํ—ค๋”์•ผ" ๋˜๋Š” "ํ–‰ ๋ฐฉํ–ฅ์˜ ํ—ค๋”์•ผ" ๋ฅผ ๋ช…์‹œํ•ด์š”. ๋ณต์žกํ•œ ํ‘œ์—์„œ ๋ฐฉํ–ฅ ์—†์ด <th> ๋งŒ ์“ฐ๋ฉด ์Šคํฌ๋ฆฐ๋ฆฌ๋”๊ฐ€ ์–ด๋А ์…€์˜ ํ—ค๋”์ธ์ง€ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์–ด์š”.
  • ๐Ÿ“Œ ํ•ต์‹ฌ ๊ธฐ์–ต๋ฒ•: "์—ด ์ œ๋ชฉ <th> = scope='col', ํ–‰ ์ฒซ ์…€ <th> = scope='row'"

Q2. ์•„๋ž˜ ์ค‘ <ol> ์ด ์•„๋‹Œ <ul> ์„ ์จ์•ผ ํ•˜๋Š” ์ƒํ™ฉ์€?

  • A) ์Šคํ„ฐ๋”” ์‹ ์ฒญ ์ ˆ์ฐจ (1๋‹จ๊ณ„ โ†’ 2๋‹จ๊ณ„ โ†’ 3๋‹จ๊ณ„)
  • B) ์ธ๊ธฐ ๊ฒŒ์‹œ๊ธ€ TOP 5 ๋žญํ‚น
  • ๊ฐ€) ์˜ค๋Š˜์˜ ์Šคํ„ฐ๋”” ์ฃผ์ œ ํƒœ๊ทธ ๋ชฉ๋ก
  • ๋ผ) ๋ ˆ์‹œํ”ผ ์กฐ๋ฆฌ ์ˆœ์„œ

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

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

  • ์›๋ฆฌ ์„ค๋ช…: ์ˆœ์„œ ์ž์ฒด๊ฐ€ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ ๊ฒฝ์šฐ(๋‹จ๊ณ„ ์ˆœ์„œ, ์ˆœ์œ„, ์กฐ๋ฆฌ ์ˆœ์„œ)๋Š” <ol>, ํ•ญ๋ชฉ์„ ๋‹จ์ˆœ ๋‚˜์—ดํ•˜๋Š” ๊ฒฝ์šฐ(ํƒœ๊ทธ ๋ชฉ๋ก, ๊ธฐ๋Šฅ ๋ชฉ๋ก ๋“ฑ)๋Š” <ul> ์ด์—์š”.
  • ๐Ÿ“Œ ํ•ต์‹ฌ ๊ธฐ์–ต๋ฒ•: "์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค = <ol>, ์ˆœ์„œ ์—†์ด ๋‚˜์—ด = <ul>"

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

์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ FAQ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ๊ฐ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์ด ์Œ์œผ๋กœ ์žˆ๋‹ค.
์–ด๋–ค HTML ๊ตฌ์กฐ๋กœ ๋งˆํฌ์—…ํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

โœ… ์ •๋‹ต: <dl> + <dt> (์งˆ๋ฌธ) + <dd> (๋‹ต๋ณ€) ๊ตฌ์กฐ

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

  • ์›๋ฆฌ ์„ค๋ช…: <dl> (Description List)์€ ์ด๋ฆ„-๊ฐ’ ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์‹œ๋งจํ‹ฑ ์š”์†Œ์˜ˆ์š”. <dt> (Description Term)๋Š” ์šฉ์–ด/์งˆ๋ฌธ, <dd> (Description Details)๋Š” ์„ค๋ช…/๋‹ต๋ณ€์— ํ•ด๋‹นํ•ด์š”. FAQ, ์šฉ์–ด์ง‘, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ‘œํ˜„์— ์˜๋ฏธ๋ก ์ ์œผ๋กœ ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • ๐Ÿ“Œ ํ•ต์‹ฌ ๊ธฐ์–ต๋ฒ•: "Q&A, ์‚ฌ์ „, ์šฉ์–ด์ง‘ = <dl> + <dt> + <dd>"

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

<table> ๋กœ ๋ ˆ์ด์•„์›ƒ ์žก์œผ๋ฉด ๊ฐ„ํŽธํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ์Šคํฌ๋ฆฐ๋ฆฌ๋”๊ฐ€ "ํ…Œ์ด๋ธ” 4์—ด 10ํ–‰" ์ด๋ผ๊ณ  ์ฝ์œผ๋ฉด์„œ ๋ ˆ์ด์•„์›ƒ์„ ํ‘œ ๋ฐ์ดํ„ฐ๋กœ ์ธ์‹ํ•œ๋‹ค๋Š” ๊ฒŒ ์ถฉ๊ฒฉ์ด์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  <dl> ์€ ์ฒ˜์Œ ์ œ๋Œ€๋กœ ์จ๋ดค๋Š”๋ฐ, ์šฉ์–ด์ง‘/FAQ ๊ฐ™์€ ๋ฐ ๋”ฑ์ด๋‹ค ์‹ถ์—ˆ๋‹ค.

๐Ÿ’ก "ํ‘œ(<table>)๋Š” ๋ฐ์ดํ„ฐ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ๋งŒ, ๋ชฉ๋ก์€ ์ƒํ™ฉ์— ๋งž๋Š” ul/ol/dl ์„ ๊ณ ๋ฅผ ๊ฒƒ โ€” ์‹œ๋งจํ‹ฑ ๊ตฌ์กฐ๊ฐ€ ์Šคํฌ๋ฆฐ๋ฆฌ๋”์™€ ๊ฒ€์ƒ‰์—”์ง„์—๊ฒŒ ์˜๋ฏธ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค."


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