roqkf

[Web] ์›น ํ‘œ์ค€ & ์ ‘๊ทผ์„ฑ ๋ณธ๋ฌธ

๐Ÿ’ป Development/Web

[Web] ์›น ํ‘œ์ค€ & ์ ‘๊ทผ์„ฑ

ahyeon7 2023. 1. 9. 22:46

โค๏ธ‍๐Ÿ”ฅ ์›น ์ ‘๊ทผ์„ฑ

  • ์žฅ์• ์ธ, ๊ณ ๋ น์ž ๋“ฑ์ด ์›น ์‚ฌ์ดํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ •๋ณด์— ๋น„์žฅ์• ์ธ๊ณผ ๋™๋“ฑํ•˜๊ฒŒ ์ ‘๊ทผํ•˜๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•˜๋Š” ๊ฒƒ

โค๏ธ‍๐Ÿ”ฅ ์›น ์ ‘๊ทผ์„ฑ์„ ๊ฐ–์ถ”๋ฉด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ํšจ๊ณผ

  1. ์‚ฌ์šฉ์ž์ธต ํ™•๋Œ€
    ์›น ์ ‘๊ทผ์„ฑ์„ ํ™•๋ณดํ•˜๋ฉด ์žฅ์• ์ธ, ๊ณ ๋ น์ž ๋“ฑ ์ •๋ณด ์†Œ์™ธ ๊ณ„์ธต๋„ ์›น ์‚ฌ์ดํŠธ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋งŒํผ ์‚ฌ์ดํŠธ์˜ ์ด์šฉ์ž๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๊ณ , ์ƒˆ๋กœ์šด ๊ณ ๊ฐ์ธต์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์‹ค์ œ๋กœ ์›น ์ ‘๊ทผ์„ฑ ํ–ฅ์ƒ์„ ํ†ตํ•ด ๋งค์ถœ์ด ์ฆ๊ฐ€ํ•œ ์™ธ๊ตญ ์‡ผํ•‘๋ชฐ ์‚ฌ๋ก€๋„ ์žˆ์œผ๋ฉฐ, ๊ตญ๋‚ด ์˜จ๋ผ์ธ ์‡ผํ•‘๋ชฐ์—์„œ๋„ ๋…ธ๋…„์ธต์˜ ๋งค์ถœ์ด ์ฆ๊ฐ€ ์ถ”์„ธ๋ฅผ ๋ณด์ด๊ณ  ์žˆ๋‹ค.
  2. ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ ์ง€์›
    ์ •๋ณด ์†Œ์™ธ ๊ณ„์ธต์ด ์•„๋‹ˆ๋”๋ผ๋„ ์ •๋ณด์— ์ ‘๊ทผํ•˜๊ธฐ ์–ด๋ ค์šด ์ƒํ™ฉ์— ์ฒ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šด์ „ ์ค‘์ด๋ผ ํ™”๋ฉด์„ ๋ณด๊ธฐ ์–ด๋ ต๊ฑฐ๋‚˜, ๋งˆ์šฐ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ ๋“ฑ์ด ์žˆ๋‹ค. ์›น ์ ‘๊ทผ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋ฉด ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ, ๋‹ค์–‘ํ•œ ๊ธฐ๊ธฐ์—์„œ์˜ ์›น ์‚ฌ์ดํŠธ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฏ€๋กœ ์„œ๋น„์Šค์˜ ์‚ฌ์šฉ ๋ฒ”์œ„๊ฐ€ ํ™•๋Œ€๋œ๋‹ค. ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์„œ๋น„์Šค์˜ ์ด์šฉ์ž ์ˆ˜ ์ฆ๊ฐ€๋ฅผ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ์‚ฌํšŒ์  ์ด๋ฏธ์ง€ ํ–ฅ์ƒ
    ๊ธฐ์—…์˜ ์‚ฌํšŒ์  ์ฑ…์ž„์— ๋Œ€ํ•œ ์ค‘์š”์„ฑ์ด ์ ์  ์ฆ๊ฐ€ํ•˜๊ณ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ, ์›น ์ ‘๊ทผ์„ฑ ํ™•๋ณด๋ฅผ ํ†ตํ•ด ๊ธฐ์—…์ด ์ •๋ณด ์†Œ์™ธ ๊ณ„์ธต์„ ์œ„ํ•œ ์‚ฌํšŒ ๊ณตํ—Œ ๋ฐ ๋ณต์ง€ ํ–ฅ์ƒ์— ํž˜์“ฐ๊ณ  ์žˆ์Œ์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ์—…์˜ ์‚ฌํšŒ์  ์ด๋ฏธ์ง€๊ฐ€ ํ–ฅ์ƒ๋˜๋ฉด ๊ทธ๋งŒํผ ์ด์šฉ์ž ์ˆ˜์˜ ์ฆ๊ฐ€๋Š” ๋ฌผ๋ก  ์ถฉ์„ฑ ๊ณ ๊ฐ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์ด ๋Š˜์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.

โค๏ธ‍๐Ÿ”ฅ WAI-ARIA

  • WAI์—์„œ ๋ฐœํ‘œํ•œ RIA ํ™˜๊ฒฝ์—์„œ์˜ ์›น ์ ‘๊ทผ์„ฑ ๊ธฐ์ˆ  ๊ทœ๊ฒฉ
  • WAI์™€ ARIA๋ฅผ ํ•ฉ์นœ ๋‹จ์–ด
  • ์›น ์ ‘๊ทผ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์ค‘์˜ ํ•˜๋‚˜
  • WAI (Web Accessibility Initiative) : ์›น ํ‘œ์ค€์„ ์ •ํ•˜๋Š” W3C์—์„œ ์›น ์ ‘๊ทผ์„ฑ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ธฐ๊ด€
  • ARIA (Accessible Rich Internet Applications) : ์žฅ์• ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์ด ์›น ์ฝ˜ํ…์ธ ์™€ ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋” ์‰ฝ๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š”, ์ฆ‰ ์›น ์ ‘๊ทผ์„ฑ์„ ๊ฐ–์ถ”๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ 
  • RIA (Rich Internet Applications) : ๋”ฐ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜์ง€ ์•Š์•„๋„ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŽธ๋ฆฌ์„ฑ + ํ”„๋กœ๊ทธ๋žจ์„ ์ง์ ‘ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋น ๋ฅธ ๋ฐ˜์‘์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋™์‹œ์— ๊ฐ€์ง€๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜. SPA๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

โค๏ธ‍๐Ÿ”ฅ WAI-ARIA์˜ ํ•„์š”์„ฑ

  • WAI-ARIA๋Š” HTML ์š”์†Œ์— ์ถ”๊ฐ€์ ์œผ๋กœ ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค.
  • ๋ณด์กฐ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด, ์›น ์ ‘๊ทผ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ์‹œ๋งจํ‹ฑ ์š”์†Œ๋งŒ์œผ๋กœ ์˜๋ฏธ๋ฅผ ์ถฉ๋ถ„ํžˆ ๋ถ€์—ฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์— WAI-ARIA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HTML ์š”์†Œ์— ์ถ”๊ฐ€์ ์ธ ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ๋” ์›ํ™œํ•˜๊ฒŒ ํŽ˜์ด์ง€๋ฅผ ํƒ์ƒ‰ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.
  • ‘์‹œ๋งจํ‹ฑ ์š”์†Œ๋งŒ์œผ๋กœ ์˜๋ฏธ๋ฅผ ์ถฉ๋ถ„ํžˆ ๋ถ€์—ฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ’์ด๋ผ๋Š” ๊ฒƒ์€ ์‹œ๋งจํ‹ฑ ์š”์†Œ๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•œ ์ƒํ™ฉ์—์„œ๋Š” WAI-ARIA๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ. WAI-ARIA๋Š” ๋ณด์กฐ์ ์ธ ์—ญํ• ๋กœ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. WAI-ARIA๋ฅผ ๋‚จ์šฉํ•ด์„  ์•ˆ ๋˜๋ฉฐ, ์‹œ๋งจํ‹ฑํ•œ HTML์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ตœ์šฐ์„ 
  • SPA์ฒ˜๋Ÿผ AJAX๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ, ์ฆ‰ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ์ด ๋ฐ”๋€Œ๋Š” ์ƒํ™ฉ์—์„œ๋„ ๋ณ€๊ฒฝ๋œ ์˜์—ญ์—๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ด์ค„ ์ˆ˜ ์žˆ์–ด ๋™์ ์ธ ์ฝ˜ํ…์ธ ์—์„œ๋„ ์›น ์ ‘๊ทผ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

โค๏ธ‍๐Ÿ”ฅ WAI-ARIA ์‚ฌ์šฉ๋ฒ•

1. ์—ญํ• (Role)

  • HTML ์š”์†Œ์˜ ์—ญํ• ์„ ์ •์˜ํ•˜๋Š” ์†์„ฑ
  • HTML์˜ ์š”์†Œ ์ข…๋ฅ˜์™€ ์—ญํ• ์ด ์„œ๋กœ ๋งž์ง€ ์•Š์„ ๋•Œ, ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š” ์š”์†Œ์ธ์ง€ ๋ช…์‹œํ•ด์ค„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ(attribute)
<div role="button">div์ด์ง€๋งŒ button์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์š”์†Œ</div>

โš ๏ธ ์ฃผ์˜ํ•  ์ , HTML ์š”์†Œ๋กœ ์ถฉ๋ถ„ํžˆ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์„ WAI-ARIA๋กœ ๋˜ ์„ค๋ช…ํ•ด์ค„ ํ•„์š”๋Š” ์—†๋‹ค.

// WAI-ARIA์˜ ์ž˜๋ชป๋œ ์‚ฌ์šฉ ์˜ˆ์‹œ
<button role="button">button์ธ ์š”์†Œ</button>

โš ๏ธ ์‹œ๋งจํ‹ฑ ์š”์†Œ ๋ณธ์—ฐ์˜ ์˜๋ฏธ๋ฅผ ์ž„์˜๋กœ ๋ฐ”๊พธ์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

// WAI-ARIA์˜ ์ž˜๋ชป๋œ ์‚ฌ์šฉ ์˜ˆ์‹œ
<h1 role="button">h1์ธ ์š”์†Œ</h1>

2. ์ƒํƒœ(State)

  • ์š”์†Œ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์†์„ฑ

๐Ÿค” aria-selected
์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„ ํƒ ๊ฐ€๋Šฅํ•œ ์š”์†Œ์ค‘์—์„œ ์„ ํƒ ์ƒํƒœ์ธ ์š”์†Œ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ

<div role="tabList">
  <li role="tab" aria-selected="true">Tab1</li>
  <li role="tab" aria-selected="false">Tab2</li>
  <li role="tab" aria-selected="false">Tab3</li>
</div>

<div role="tabpanel">Tab menu ONE</div>
<div role="tabpanel">Tab menu TWO</div>
<div role="tabpanel">Tab menu THREE</div>

3๊ฐœ์˜ ํƒญ ์ค‘์—์„œ ์ฒซ ๋ฒˆ์งธ ํƒญ์ด ์„ ํƒ๋œ ์ƒํƒœ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด ์™ธ์—๋„ ์•„์ฝ”๋””์–ธ UI๊ฐ€ ํŽผ์ณ์ง„ ์ƒํƒœ์ธ์ง€ ํ‘œ์‹œํ•ด์ฃผ๋Š” aria-expanded , ์š”์†Œ๊ฐ€ ์ˆจ๊น€ ์ƒํƒœ์ธ์ง€๋ฅผ ํ‘œ์‹œํ•˜๋Š” aria-hidden ๋“ฑ์˜ ์†์„ฑ์ด ์žˆ๋‹ค.

3. ์†์„ฑ(Property)

  • ์š”์†Œ์˜ ํŠน์ง•์„ ์ •์˜ํ•˜๋Š” ์†์„ฑ(attribute)

๐Ÿค” aria-label
์š”์†Œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ „ํ˜€ ์–ป์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ํ…์ŠคํŠธ ์ฝ˜ํ…์ธ  ์—†์ด ์ด๋ฏธ์ง€๋กœ๋งŒ ๋งŒ๋“ค์–ด์ง„ ๋ฒ„ํŠผ์ด ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ์ด๋‹ค. ์ด๋ฏธ์ง€๋งŒ ๋“ค์–ด์žˆ๋Š” ๋ฒ„ํŠผ์˜ ๊ฒฝ์šฐ, HTML ์š”์†Œ์˜ ๊ตฌ์กฐ๋งŒ์œผ๋กœ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š” ๋ฒ„ํŠผ์ธ์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

<button> <img src="X.png" /> </button>
<button> <img src="๋‹๋ณด๊ธฐ.png" /> </button>

๋ฌผ๋ก  ๋ฒ„ํŠผ ์š”์†Œ์— ์ˆจ๊ฒจ์ง„ ์ž์‹ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜๋Š” ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด์ค„ ์ˆ˜ ๋„ ์žˆ์ง€๋งŒ, ์ด๋Ÿด ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” WAI-ARIA ์†์„ฑ์ด ๋ฐ”๋กœ aria-label ์ด๋‹ค. ์š”์†Œ์— ๋ผ๋ฒจ์„ ๋ถ™์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„๋‹ค. ํ•ด๋‹น ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

<button aria-label="๋‹ซ๊ธฐ"/> <img src="X.png" /> </button>
<button aria-label="๊ฒ€์ƒ‰"/> <img src="๋‹๋ณด๊ธฐ.png" /> </button>

๐Ÿค” aria-live
ํ•ด๋‹น ์š”์†Œ๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋‚ด์šฉ์„ ๊ฐฑ์‹ ํ•˜๋Š” ์˜์—ญ์ธ์ง€ ํ‘œ์‹œํ•œ๋‹ค. ์ฆ‰, ๋ธŒ๋ผ์šฐ์ง• ๋„์ค‘์— ๋‚ด์šฉ์„ ๋„์šฐ๋Š” alert, modal, dialog ์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ์š”์†Œ์ด๊ฑฐ๋‚˜, AJAX ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋‚ด์šฉ์„ ๊ฐฑ์‹ ํ•˜๋Š” ์˜์—ญ์— ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ์ด๋‹ค. ์‹œ๊ฐ ์žฅ์• ์ธ๋“ค์€ ํ™”๋ฉด์˜ ๋™์ ์ธ ์š”์†Œ๋ฅผ ์•Œ์•„์ฑ„๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์—, ์ด ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐฑ์‹ ๋˜๋Š” ๋‚ด์šฉ์„ ์•Œ๋ ค์ฃผ๋ฉด ํฐ ๋„์›€์ด ๋œ๋‹ค. ์†์„ฑ ๊ฐ’์œผ๋กœ๋Š” polite, assertive, off(default)๊ฐ€ ์žˆ๋‹ค.

polite : ์Šคํฌ๋ฆฐ ๋ฆฌ๋”๊ฐ€ ํ˜„์žฌ ์ฝ๊ณ ์žˆ๋Š” ๋‚ด์šฉ์„ ๋ชจ๋‘ ์ฝ๊ณ ๋‚˜์„œ ๊ฐฑ์‹ ๋œ ๋‚ด์šฉ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ
assertive : ์Šคํฌ๋ฆฐ ๋ฆฌ๋”๊ฐ€ ํ˜„์žฌ ์ฝ๊ณ ์žˆ๋Š” ๋‚ด์šฉ์„ ์ค‘๋‹จํ•˜๊ณ  ๊ฐฑ์‹ ๋œ ๋‚ด์šฉ์„ ๋ฐ”๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ

'๐Ÿ’ป Development > Web' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Web] SEO  (0) 2023.01.17
[Web] Cross Browsing  (1) 2023.01.09
[Web] ์ž์ฃผ ํ‹€๋ฆฌ๋Š” Markup  (0) 2023.01.09
[Web] ์›น ํ‘œ์ค€ & Semantic HTML  (0) 2023.01.09
wireframe & prototype  (0) 2022.12.18