Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
Sehwan edited this page Jun 29, 2025 · 14 revisions

μ›Ή μ ‘κ·Όμ„± 체크

1. 색상 κ΄€λ ¨ μ ‘κ·Όμ„± 체크

1.1 전경색과 배경색 κ°„μ˜ 색상 λŒ€λΉ„ 체크

  • 전경색과 λ°°κ²½μƒ‰μ˜ 칼라 μ½”λ“œλ₯Ό Contrast checker에 μž…λ ₯ν•˜κ³  μ ‘κ·Όμ„± 룰을 λ‹€ ν†΅κ³Όν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. image

μ›Ή μ ‘κ·Όμ„± μ •μ±…

이 μœ„ν‚€ λ¬Έμ„œλŠ” "ν•œκ΅­ν˜• μ›Ή μ½˜ν…μΈ  μ ‘κ·Όμ„± μ§€μΉ¨ 2.2"λ₯Ό 기반으둜 Daleui λ””μžμΈ μ‹œμŠ€ν…œμ„ μ„€κ³„ν•˜κ³  κ²€ν† ν•  λ•Œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” μ ‘κ·Όμ„± μ²΄ν¬λ¦¬μŠ€νŠΈμž…λ‹ˆλ‹€. λͺ¨λ“  UI μ»΄ν¬λ„ŒνŠΈ, μ½˜ν…μΈ , μƒν˜Έμž‘μš© μš”μ†Œκ°€ μž₯애인 및 λΉ„μž₯애인 λͺ¨λ‘μ—κ²Œ λ™λ“±ν•œ 접근성을 μ œκ³΅ν•˜λ„λ‘ 보μž₯ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€.

1. μΈμ‹μ˜ μš©μ΄μ„± (Perceivable)

μ‚¬μš©μžκ°€ μ½˜ν…μΈ λ₯Ό 인지할 수 μžˆλ„λ‘ μ‹œκ°, 청각, 촉각 λ“± λ‹€μ–‘ν•œ 감각을 κ³ λ €ν•œ 섀계.

1.1 ν…μŠ€νŠΈ λŒ€μ²΄ 제곡

  • λͺ¨λ“  λΉ„ν…μŠ€νŠΈ μ½˜ν…μΈ (이미지, μ•„μ΄μ½˜ λ“±)에 μ μ ˆν•œ λŒ€μ²΄ ν…μŠ€νŠΈ(alt text)λ₯Ό μ œκ³΅ν–ˆλŠ”κ°€? 1.1.1 Non-text Content (A)
  • λŒ€μ²΄ ν…μŠ€νŠΈλŠ” μ½˜ν…μΈ μ˜ λͺ©μ κ³Ό κΈ°λŠ₯을 λͺ…ν™•νžˆ μ„€λͺ…ν•˜λŠ”κ°€?

1.2 적응 κ°€λŠ₯μ„±

  • μ½˜ν…μΈ κ°€ μ„ ν˜• ꡬ쑰둜 μ œκ³΅λ˜μ–΄ 슀크린 λ¦¬λ”λ‘œ 이해 κ°€λŠ₯ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆλŠ”κ°€? 1.3.1 Info and Relationships (A)
    • Do: HTML λ§ˆν¬μ—… μˆœμ„œλ₯Ό 논리적 흐름(제λͺ© β†’ λ³Έλ¬Έ β†’ κ΄€λ ¨ 링크 λ“±)에 맞게 μž‘μ„±ν•©λ‹ˆλ‹€. <h1>~<h6>, <p>, <ul>, <ol>, <nav>, <main> λ“± μ‹œλ§¨ν‹± νƒœκ·Έλ₯Ό 적절히 μ‚¬μš©ν•©λ‹ˆλ‹€.
    • Don't: μ‹œκ°μ μΈ λ°°μΉ˜λ§Œμ„ μœ„ν•΄ CSS position: absolute;λ‚˜ floatλ₯Ό λ‚¨μš©ν•˜μ—¬ DOM μˆœμ„œμ™€ μ‹œκ°μ  μˆœμ„œκ°€ μ™„μ „νžˆ λ‹€λ₯΄κ²Œ λ§Œλ“­λ‹ˆλ‹€. (예: μ‹œκ°μ μœΌλ‘œλŠ” 였λ₯Έμͺ½μ— μžˆλŠ” μ‚¬μ΄λ“œλ°”κ°€ DOMμ—μ„œλŠ” 메인 μ½˜ν…μΈ λ³΄λ‹€ λ¨Όμ € λ‚˜μ˜€λŠ” 경우)
  • μ‹œκ°μ  μˆœμ„œμ™€ 논리적 μˆœμ„œκ°€ μΌμΉ˜ν•˜λŠ”κ°€? 1.3.2 Meaningful Sequence (A)
    • Do: λ˜λ„λ‘ μ½˜ν…μΈ μ˜ 논리적 μˆœμ„œ(DOM μˆœμ„œ)κ°€ μ‹œκ°μ  읽기 μˆœμ„œμ™€ μΌμΉ˜ν•˜λ„λ‘ λ§ˆν¬μ—…ν•©λ‹ˆλ‹€. Flexboxλ‚˜ Grid의 order 속성을 μ‚¬μš©ν•  경우, ν‚€λ³΄λ“œ 탐색 μˆœμ„œ(Tab ν‚€)κ°€ μ—¬μ „νžˆ 논리적인지 λ°˜λ“œμ‹œ ν™•μΈν•©λ‹ˆλ‹€.
    • Don't: CSS Gridλ‚˜ Flexbox의 order 속성을 μ‚¬μš©ν•˜μ—¬ ν•­λͺ©λ“€μ˜ μ‹œκ°μ  μˆœμ„œλ₯Ό λ³€κ²½ν–ˆμœΌλ‚˜, ν‚€λ³΄λ“œλ‘œ 탐색할 λ•ŒλŠ” μ›λž˜ DOM μˆœμ„œλŒ€λ‘œ μ΄λ™ν•˜μ—¬ μ‚¬μš©μžκ°€ ν˜Όλž€μ„ κ²ͺ게 λ§Œλ“­λ‹ˆλ‹€. (예: μ‹œκ°μ μœΌλ‘œ 1, 2, 3 λ²„νŠΌμ΄ μžˆμ§€λ§Œ Tab ν‚€λ‘œλŠ” 3, 1, 2 μˆœμ„œλ‘œ ν¬μ»€μŠ€κ°€ μ΄λ™ν•˜λŠ” 경우)
  • λ°˜μ‘ν˜• λ””μžμΈμ—μ„œ μ½˜ν…μΈ κ°€ 손싀 없이 λͺ¨λ“  λ””λ°”μ΄μŠ€μ—μ„œ ν‘œμ‹œλ˜λŠ”κ°€? 1.3.4 Orientation (AA)
  • μž…λ ₯ ν•„λ“œμ˜ λͺ©μ μ„ λͺ…μ‹œν–ˆλŠ”κ°€? 1.3.5 Identify Input Purpose (AA)
    • Do: μ‚¬μš©μž 정보λ₯Ό μš”κ΅¬ν•˜λŠ” μž…λ ₯ ν•„λ“œ(이름, 이메일, μ£Όμ†Œ, μ „ν™”λ²ˆν˜Έ λ“±)에 autocomplete 속성을 μ μ ˆν•œ κ°’κ³Ό ν•¨κ»˜ μ‚¬μš©ν•©λ‹ˆλ‹€. (예: <input type="email" autocomplete="email" name="user_email">)
    • Don't: 이름, 이메일, μ£Όμ†Œ λ“± μžλ™ μ™„μ„± κΈ°λŠ₯이 μœ μš©ν•  수 μžˆλŠ” ν•„λ“œμ— autocomplete 속성을 μ œκ³΅ν•˜μ§€ μ•Šκ±°λ‚˜ autocomplete="off"λ₯Ό λΆˆν•„μš”ν•˜κ²Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

1.3 ꡬ별 κ°€λŠ₯μ„±

  • ν…μŠ€νŠΈμ™€ λ°°κ²½ κ°„ λͺ…도 λŒ€λΉ„κ°€ μ΅œμ†Œ 4.5:1(A) λ˜λŠ” 3:1(AA) 이상인가? 1.4.3 Contrast (Minimum) (AA)
  • ν…μŠ€νŠΈ 크기λ₯Ό 200%κΉŒμ§€ ν™•λŒ€ν•΄λ„ μ½˜ν…μΈ κ°€ μ†μ‹€λ˜μ§€ μ•ŠλŠ”κ°€? 1.4.4 Resize Text (AA)
  • μ΄λ―Έμ§€λ‘œ 된 ν…μŠ€νŠΈ λŒ€μ‹  μ‹€μ œ ν…μŠ€νŠΈλ₯Ό μ‚¬μš©ν–ˆλŠ”κ°€? 1.4.5 Images of Text (AA)
  • μƒ‰μƒλ§ŒμœΌλ‘œ 정보λ₯Ό μ „λ‹¬ν•˜μ§€ μ•Šμ•˜λŠ”κ°€? 1.4.1 Use of Color (A)
    • Do: 였λ₯˜κ°€ λ°œμƒν•œ μž…λ ₯ ν•„λ“œλ₯Ό 빨간색 ν…Œλ‘λ¦¬λ‘œ ν‘œμ‹œν•¨κ³Ό λ™μ‹œμ—, 였λ₯˜ μ•„μ΄μ½˜(❗)κ³Ό ν•¨κ»˜ "ν•„μˆ˜ μž…λ ₯ ν•­λͺ©μž…λ‹ˆλ‹€." 같은 ν…μŠ€νŠΈ λ©”μ‹œμ§€λ₯Ό ν•¨κ»˜ μ œκ³΅ν•©λ‹ˆλ‹€. 링크 ν…μŠ€νŠΈμ—λŠ” 색상과 ν•¨κ»˜ 밑쀄을 μ‚¬μš©ν•©λ‹ˆλ‹€.
    • Don't: ν•„μˆ˜ μž…λ ₯ ν•„λ“œμž„μ„ λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ λ ˆμ΄λΈ” ν…μŠ€νŠΈ μƒ‰μƒλ§Œ λΉ¨κ°„μƒ‰μœΌλ‘œ λ³€κ²½ν•©λ‹ˆλ‹€. 였λ₯˜ μƒνƒœλ₯Ό μž…λ ₯ ν•„λ“œ ν…Œλ‘λ¦¬ μƒ‰μƒλ§Œ λΉ¨κ°„μƒ‰μœΌλ‘œ λ°”κΎΈμ–΄ ν‘œμ‹œν•©λ‹ˆλ‹€.

2. 운용의 μš©μ΄μ„± (Operable)

μ‚¬μš©μžκ°€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‰½κ²Œ μ‘°μž‘ν•  수 μžˆλ„λ‘ 섀계.

2.1 ν‚€λ³΄λ“œ μ ‘κ·Όμ„±

  • λͺ¨λ“  κΈ°λŠ₯이 ν‚€λ³΄λ“œλ‘œλ§Œ μ‘°μž‘ κ°€λŠ₯ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆλŠ”κ°€? 2.1.1 Keyboard (A)
    • Do: μ»€μŠ€ν…€ λ“œλ‘­λ‹€μš΄ 메뉴λ₯Ό λ§Œλ“€ λ•Œ, λ²„νŠΌμ€ Tab으둜 포컀슀 κ°€λŠ₯ν•˜κ³  Enterλ‚˜ Space둜 μ—΄ 수 있으며, 메뉴 ν•­λͺ©λ“€μ€ ν™”μ‚΄ν‘œ ν‚€(↑, ↓)둜 μ΄λ™ν•˜κ³  Enter둜 선택할 수 μžˆλ„λ‘ κ΅¬ν˜„ν•©λ‹ˆλ‹€. μŠ¬λΌμ΄λ”λŠ” ν™”μ‚΄ν‘œ ν‚€(←, β†’)둜 값을 μ‘°μ ˆν•  수 있게 ν•©λ‹ˆλ‹€. λͺ¨λ“  μΈν„°λž™ν‹°λΈŒ μš”μ†Œμ— tabindex="0" (ν•„μš”μ‹œ) λ˜λŠ” λ„€μ΄ν‹°λΈŒ μš”μ†Œ(<button>, <a>)λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
    • Don't: 마우슀 클릭으둜만 μ—΄κ³  닫을 수 μžˆλŠ” μ»€μŠ€ν…€ λ“œλ‘­λ‹€μš΄ 메뉴λ₯Ό λ§Œλ“­λ‹ˆλ‹€. Drag & Drop μΈν„°νŽ˜μ΄μŠ€μ— ν‚€λ³΄λ“œ λŒ€μ²΄ μˆ˜λ‹¨(예: 'μœ„λ‘œ 이동' λ²„νŠΌ)을 μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • ν‚€λ³΄λ“œ ν¬μ»€μŠ€κ°€ κ°‡νžˆλŠ” 상황(Keyboard Trap)이 μ—†λŠ”κ°€? 2.1.2 No Keyboard Trap (A)
  • ν‚€λ³΄λ“œ 단좕킀가 μ‚¬μš©μž λ§žμΆ€ν˜•μœΌλ‘œ μ‘°μ • κ°€λŠ₯ν•˜κ±°λ‚˜ λΉ„ν™œμ„±ν™” κ°€λŠ₯ν•˜λ„λ‘ ν–ˆλŠ”κ°€? 2.1.4 Character Key Shortcuts (A)

2.2 μΆ©λΆ„ν•œ μ‹œκ°„ 제곡

  • μ‹œκ°„ μ œν•œμ΄ μžˆλŠ” μ½˜ν…μΈ μ— λŒ€ν•΄ μ‚¬μš©μžμ—κ²Œ μΆ©λΆ„ν•œ μ‹œκ°„μ„ μ œκ³΅ν–ˆλŠ”κ°€? 2.2.1 Timing Adjustable (A)
  • μ›€μ§μ΄λŠ” μ½˜ν…μΈ λ₯Ό μΌμ‹œ μ •μ§€, 쀑지, 숨길 수 μžˆλŠ” μˆ˜λ‹¨μ„ μ œκ³΅ν–ˆλŠ”κ°€? 2.2.2 Pause, Stop, Hide (A)
  • 쀑단(Interruptions)이 λ°œμƒν•˜μ§€ μ•Šλ„λ‘ ν–ˆκ±°λ‚˜, μ‚¬μš©μž λ™μ˜ 없이 μ€‘λ‹¨λ˜μ§€ μ•ŠλŠ”κ°€? 2.2.4 Interruptions (AAA) (WCAG 2.2)
  • νƒ€μž„μ•„μ›ƒμœΌλ‘œ 데이터 손싀이 λ°œμƒν•˜μ§€ μ•Šλ„λ‘ κ²½κ³ λ₯Ό μ œκ³΅ν–ˆλŠ”κ°€? 2.2.6 Timeouts (AAA) (WCAG 2.2)

2.3 κ΄‘κ³Όλ―Όμ„± λ°œμž‘ 유발 λ°©μ§€

  • 1μ΄ˆμ— 3회 이상 κΉœλΉ‘μ΄λŠ” μ½˜ν…μΈ κ°€ μ—†κ±°λ‚˜, μž„κ³„κ°’ μ΄ν•˜λ‘œ μ œν•œν–ˆλŠ”κ°€? 2.3.1 Three Flashes or Below Threshold (A)
  • μƒν˜Έμž‘μš©μœΌλ‘œ λ°œμƒν•˜λŠ” μ• λ‹ˆλ©”μ΄μ…˜μ„ μ‚¬μš©μžκ°€ λΉ„ν™œμ„±ν™”ν•  수 μžˆλŠ”κ°€? 2.3.3 Animation from Interactions (AAA) (WCAG 2.2)

2.4 탐색 κ°€λŠ₯μ„±

  • 반볡 μ½˜ν…μΈ λ₯Ό κ±΄λ„ˆλ›Έ 수 μžˆλŠ” "Skip Navigation" 링크λ₯Ό μ œκ³΅ν–ˆλŠ”κ°€? 2.4.1 Bypass Blocks (A)
  • νŽ˜μ΄μ§€ 제λͺ©μ΄ κ³ μœ ν•˜κ³  μ„€λͺ…적인가? 2.4.2 Page Titled (A)
    • Do: νŽ˜μ΄μ§€μ˜ μ£Όμš” λ‚΄μš©μ„ λͺ…ν™•νžˆ μ•Œ 수 μžˆλŠ” 제λͺ©μ„ μ œκ³΅ν•©λ‹ˆλ‹€. (예: <title>μž₯λ°”κ΅¬λ‹ˆ - Daleui μŠ€ν† μ–΄</title>, <title>μ›Ή μ ‘κ·Όμ„± 체크리슀트 | Daleui λ””μžμΈ μ‹œμŠ€ν…œ</title>)
    • Don't: λͺ¨λ“  νŽ˜μ΄μ§€μ˜ 제λͺ©μ„ <title>Daleui</title> λ˜λŠ” <title>메인 νŽ˜μ΄μ§€</title>와 같이 λ™μΌν•˜κ±°λ‚˜ λͺ¨ν˜Έν•˜κ²Œ μ„€μ •ν•©λ‹ˆλ‹€.
  • 포컀슀 μˆœμ„œκ°€ 논리적이고 직관적인가? 2.4.3 Focus Order (A)
    • Do: Tab ν‚€λ₯Ό λˆŒλ €μ„ λ•Œ, νŽ˜μ΄μ§€μ˜ μ‹œκ°μ  흐름(보톡 μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½, μœ„μ—μ„œ μ•„λž˜)을 따라 예츑 κ°€λŠ₯ν•˜κ²Œ ν¬μ»€μŠ€κ°€ μ΄λ™ν•˜λ„λ‘ ν•©λ‹ˆλ‹€. λͺ¨λ‹¬ 창을 λ‹«μœΌλ©΄, λͺ¨λ‹¬μ„ μ—΄μ—ˆλ˜ λ²„νŠΌμ΄λ‚˜ 링크둜 ν¬μ»€μŠ€κ°€ λŒμ•„κ°€λ„λ‘ κ΅¬ν˜„ν•©λ‹ˆλ‹€.
    • Don't: Tab ν‚€λ₯Ό λˆ„λ₯Ό λ•Œ ν¬μ»€μŠ€κ°€ νŽ˜μ΄μ§€ 상단 헀더 β†’ λ³Έλ¬Έ 쀑간 β†’ ν‘Έν„° β†’ λ‹€μ‹œ ν—€λ”μ˜ λ‹€λ₯Έ μš”μ†Œ λ“±μœΌλ‘œ 예츑 λΆˆκ°€λŠ₯ν•˜κ²Œ μ΄λ™ν•©λ‹ˆλ‹€. λͺ¨λ‹¬ 창을 λ‹«μ•˜λŠ”λ° ν¬μ»€μŠ€κ°€ νŽ˜μ΄μ§€μ˜ 맨 처음으둜 μ΄λ™ν•˜κ±°λ‚˜ μ‚¬λΌμ§‘λ‹ˆλ‹€.
  • 링크의 λͺ©μ μ΄ λ¬Έλ§₯μ—μ„œ λͺ…ν™•ν•œκ°€? 2.4.4 Link Purpose (In Context) (A)
  • 닀쀑 탐색 방법(μ‚¬μ΄νŠΈλ§΅, 검색 λ“±)을 μ œκ³΅ν–ˆλŠ”κ°€? 2.4.5 Multiple Ways (AA)
  • 제λͺ©κ³Ό λ ˆμ΄λΈ”μ΄ λͺ…ν™•ν•˜κ³  일관적인가? 2.4.6 Headings and Labels (AA)
    • Do: νŽ˜μ΄μ§€ ꡬ쑰에 맞게 <h1>λΆ€ν„° <h6>κΉŒμ§€ 제λͺ©(Heading) νƒœκ·Έλ₯Ό λ…Όλ¦¬μ μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€. λͺ¨λ“  μž…λ ₯ ν•„λ“œμ—λŠ” λͺ…ν™•ν•œ <label>을 μ œκ³΅ν•˜κ³ , λ²„νŠΌμ—λŠ” "μ €μž₯", "μ·¨μ†Œ", "λ‹€μŒ 단계" λ“± λ™μž‘μ„ λͺ…ν™•νžˆ μ„€λͺ…ν•˜λŠ” ν…μŠ€νŠΈλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ‚¬μ΄νŠΈ μ „μ²΄μ—μ„œ 동일 κΈ°λŠ₯의 λ²„νŠΌμ€ λ™μΌν•œ λ ˆμ΄λΈ”μ„ μœ μ§€ν•©λ‹ˆλ‹€(예: λͺ¨λ“  μ €μž₯ λ²„νŠΌμ€ "μ €μž₯").
    • Don't: μ‹œκ°μ μœΌλ‘œ 제λͺ©μ²˜λŸΌ 보이게 ν•˜κΈ° μœ„ν•΄ <div>에 큰 ν°νŠΈμ™€ ꡡ은 μŠ€νƒ€μΌλ§Œ μ μš©ν•©λ‹ˆλ‹€. λ²„νŠΌμ— "클릭", "μ—¬κΈ°" λ“± λͺ¨ν˜Έν•œ λ ˆμ΄λΈ”μ„ μ‚¬μš©ν•˜κ±°λ‚˜, μ•„μ΄μ½˜λ§Œ μžˆλŠ” λ²„νŠΌμ— 슀크린 리더가 읽을 수 μžˆλŠ” μˆ¨μ€ ν…μŠ€νŠΈλ‚˜ aria-label을 μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • ν¬μ»€μŠ€κ°€ μ‹œκ°μ μœΌλ‘œ λ³΄μ΄λŠ”κ°€? 2.4.7 Focus Visible (AA)

2.5 μž…λ ₯ 방식

  • λ³΅μž‘ν•œ 제슀처 λŒ€μ‹  단일 포인터 λ™μž‘μœΌλ‘œ λŒ€μ²΄ κ°€λŠ₯ν•˜λ„λ‘ ν–ˆλŠ”κ°€? 2.5.1 Pointer Gestures (A)
  • 포인터 μž…λ ₯이 μ‹€μˆ˜λ‘œ μ‹€ν–‰λ˜μ§€ μ•Šλ„λ‘ μ·¨μ†Œ κ°€λŠ₯성을 μ œκ³΅ν–ˆλŠ”κ°€? 2.5.2 Pointer Cancellation (A)
    • Do: λ²„νŠΌ 클릭과 같은 μ•‘μ…˜μ€ 'down' 이벀트(mousedown, touchstart)κ°€ μ•„λ‹Œ 'up' 이벀트(mouseup, click, touchend)μ—μ„œ μ‹€ν–‰λ˜λ„λ‘ κ΅¬ν˜„ν•©λ‹ˆλ‹€. μ‚¬μš©μžκ°€ λ²„νŠΌμ„ λˆ„λ₯Έ μƒνƒœμ—μ„œ 포인터λ₯Ό λ²„νŠΌ λ°–μœΌλ‘œ μ΄λ™ν•œ ν›„ λ–Όλ©΄ 아무 λ™μž‘λ„ μΌμ–΄λ‚˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.
    • Don't: λ²„νŠΌμ„ λˆ„λ₯΄λŠ” μˆœκ°„(mousedown, touchstart) λ°”λ‘œ λ™μž‘(예: μ‚­μ œ, 전솑)이 μ‹€ν–‰λ˜λ„λ‘ ν•˜μ—¬, μ‚¬μš©μžκ°€ μ‹€μˆ˜λ‘œ λˆŒλ €λ‹€κ°€ λ–ΌκΈ° 전에 μ·¨μ†Œν•  기회λ₯Ό μ£Όμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • λ ˆμ΄λΈ”κ³Ό ν”„λ‘œκ·Έλž˜λ°μ  이름이 μΌμΉ˜ν•˜λŠ”κ°€? 2.5.3 Label in Name (A)
  • λͺ¨μ…˜ 기반 μž…λ ₯(예: 흔듀기)이 ν•„μˆ˜κ°€ μ•„λ‹Œ 선택 사항인가? 2.5.4 Motion Actuation (A)

3. μ΄ν•΄μ˜ μš©μ΄μ„± (Understandable)

μ‚¬μš©μžκ°€ μ½˜ν…μΈ μ™€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‰½κ²Œ 이해할 수 μžˆλ„λ‘ 섀계.

3.1 가독성

  • νŽ˜μ΄μ§€μ˜ κΈ°λ³Έ μ–Έμ–΄κ°€ λͺ…μ‹œλ˜μ–΄ μžˆλŠ”κ°€? 3.1.1 Language of Page (A)
  • νŠΉμ • λΆ€λΆ„μ˜ μ–Έμ–΄κ°€ 변경될 경우 이λ₯Ό λͺ…μ‹œν–ˆλŠ”κ°€? 3.1.2 Language of Parts (AA)

3.2 예츑 κ°€λŠ₯μ„±

  • 포컀슀 λ³€κ²½μ‹œ 예기치 μ•Šμ€ λ³€ν™”κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”κ°€? 3.2.1 On Focus (A)
    • Do: μ‚¬μš©μžκ°€ λΌλ””μ˜€ λ²„νŠΌ κ·Έλ£Ή 쀑 ν•˜λ‚˜λ₯Ό μ„ νƒν•˜κ±°λ‚˜ λ“œλ‘­λ‹€μš΄ λ©”λ‰΄μ—μ„œ μ˜΅μ…˜μ„ μ„ νƒν–ˆμ„ λ•Œ, λ³„λ„μ˜ '적용' λ˜λŠ” 'λ‹€μŒ' λ²„νŠΌμ„ ν΄λ¦­ν•΄μ•Όλ§Œ λ‚΄μš©μ΄ λ³€κ²½λ˜κ±°λ‚˜ νŽ˜μ΄μ§€κ°€ μ΄λ™ν•˜λ„λ‘ ν•©λ‹ˆλ‹€. μž…λ ₯ ν•„λ“œμ— ν¬μ»€μŠ€κ°€ κ°”λ‹€κ³  ν•΄μ„œ μžλ™μœΌλ‘œ νŒμ—… 창이 λœ¨μ§€ μ•Šλ„λ‘ ν•©λ‹ˆλ‹€.
    • Don't: λ“œλ‘­λ‹€μš΄ λ©”λ‰΄μ—μ„œ νŠΉμ • μ˜΅μ…˜μ„ μ„ νƒν•˜λŠ” μ¦‰μ‹œ νŽ˜μ΄μ§€κ°€ μƒˆλ‘œκ³ μΉ¨λ˜κ±°λ‚˜ λ‹€λ₯Έ νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•©λ‹ˆλ‹€. μ²΄ν¬λ°•μŠ€λ₯Ό μ„ νƒν•˜μžλ§ˆμž λ™μ˜μ„œκ°€ μ œμΆœλ©λ‹ˆλ‹€.
  • μž…λ ₯ μ‹œ λ¬Έλ§₯이 예기치 μ•Šκ²Œ λ³€κ²½λ˜μ§€ μ•ŠλŠ”κ°€? 3.2.2 On Input (A)
  • λ‚΄λΉ„κ²Œμ΄μ…˜μ΄ λͺ¨λ“  νŽ˜μ΄μ§€μ—μ„œ 일관적인가? 3.2.3 Consistent Navigation (AA)
    • Do: 메인 메뉴(κΈ€λ‘œλ²Œ λ‚΄λΉ„κ²Œμ΄μ…˜ λ°”), ν‘Έν„°, 검색창 λ“± λ°˜λ³΅λ˜λŠ” μš”μ†ŒλŠ” λͺ¨λ“  νŽ˜μ΄μ§€μ—μ„œ λ™μΌν•œ μœ„μΉ˜μ™€ ν˜•νƒœλ‘œ μ œκ³΅ν•©λ‹ˆλ‹€. 'μž₯λ°”κ΅¬λ‹ˆ λ‹΄κΈ°' λ²„νŠΌμ€ μ‚¬μ΄νŠΈ λ‚΄ λͺ¨λ“  μƒν’ˆ νŽ˜μ΄μ§€μ—μ„œ λ™μΌν•œ μ•„μ΄μ½˜κ³Ό ν…μŠ€νŠΈ λ ˆμ΄λΈ”μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
    • Don't: μ–΄λ–€ νŽ˜μ΄μ§€μ—μ„œλŠ” 상단에 있던 μ£Ό 메뉴가 λ‹€λ₯Έ νŽ˜μ΄μ§€μ—μ„œλŠ” μ™Όμͺ½μ— λ‚˜νƒ€λ‚©λ‹ˆλ‹€. 'νŽΈμ§‘' κΈ°λŠ₯을 μ–΄λ–€ κ³³μ—μ„œλŠ” μ—°ν•„ μ•„μ΄μ½˜μœΌλ‘œ, λ‹€λ₯Έ κ³³μ—μ„œλŠ” 'μˆ˜μ •'μ΄λΌλŠ” ν…μŠ€νŠΈ λ²„νŠΌμœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.
  • λ™μΌν•œ κΈ°λŠ₯의 μš”μ†Œκ°€ μΌκ΄€λ˜κ²Œ μ‹λ³„λ˜λŠ”κ°€? 3.2.4 Consistent Identification (AA)

3.3 μž…λ ₯ 도움

  • 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ 이λ₯Ό λͺ…ν™•νžˆ 식별할 수 μžˆλŠ” λ©”μ‹œμ§€λ₯Ό μ œκ³΅ν–ˆλŠ”κ°€? 3.3.1 Error Identification (A)
    • Do: 폼 제좜 μ‹œ 였λ₯˜κ°€ μžˆλ‹€λ©΄, μ–΄λ–€ ν•„λ“œμ—μ„œ 였λ₯˜κ°€ λ°œμƒν–ˆλŠ”μ§€ ν•΄λ‹Ή ν•„λ“œ μ˜†μ΄λ‚˜ μ•„λž˜μ— λͺ…ν™•ν•œ ν…μŠ€νŠΈ(예: "이메일 μ£Όμ†Œλ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš”.")둜 μ•Œλ €μ£Όκ³ , ν•΄λ‹Ή ν•„λ“œλ‘œ 포컀슀λ₯Ό μ΄λ™μ‹œν‚€κ±°λ‚˜ 였λ₯˜ μš”μ•½ 정보λ₯Ό 상단에 μ œκ³΅ν•©λ‹ˆλ‹€. aria-describedbyλ₯Ό μ‚¬μš©ν•΄ 였λ₯˜ λ©”μ‹œμ§€μ™€ μž…λ ₯ ν•„λ“œλ₯Ό ν”„λ‘œκ·Έλž˜λ°μ μœΌλ‘œ μ—°κ²°ν•©λ‹ˆλ‹€.
    • Don't: 폼 제좜 μ‹€νŒ¨ μ‹œ νŽ˜μ΄μ§€ 상단에 "μž…λ ₯ 였λ₯˜κ°€ μžˆμŠ΅λ‹ˆλ‹€."λΌλŠ” λ©”μ‹œμ§€λ§Œ λ„μš°κ³  μ–΄λŠ ν•„λ“œκ°€ 잘λͺ»λ˜μ—ˆλŠ”μ§€ μ•Œλ €μ£Όμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 였λ₯˜ ν•„λ“œμ— ν…Œλ‘λ¦¬ μƒ‰μƒλ§Œ λ³€κ²½ν•˜κ³  ν…μŠ€νŠΈ μ„€λͺ…을 μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • μž…λ ₯ ν•„λ“œμ— λ ˆμ΄λΈ” λ˜λŠ” μ§€μ‹œλ¬Έμ„ μ œκ³΅ν–ˆλŠ”κ°€? 3.3.2 Labels or Instructions (A)
  • 였λ₯˜ λ°œμƒ μ‹œ μˆ˜μ • μ œμ•ˆμ„ μ œκ³΅ν–ˆλŠ”κ°€? 3.3.3 Error Suggestion (AA)
  • 법적/금육/데이터 κ΄€λ ¨ 였λ₯˜λ₯Ό λ°©μ§€ν•  μˆ˜λ‹¨(확인 단계 λ“±)을 μ œκ³΅ν–ˆλŠ”κ°€? 3.3.4 Error Prevention (Legal, Financial, Data) (AA)

4. 견고성 (Robust)

λ‹€μ–‘ν•œ 기술과 보쑰 λ„κ΅¬μ—μ„œ μ•ˆμ •μ μœΌλ‘œ μž‘λ™ν•˜λ„λ‘ 섀계.

4.1 ν˜Έν™˜μ„±

  • HTML/CSSκ°€ νŒŒμ‹± 였λ₯˜ 없이 μ˜¬λ°”λ₯΄κ²Œ μž‘μ„±λ˜μ—ˆλŠ”κ°€? 4.1.1 Parsing (A)
  • λͺ¨λ“  μš”μ†Œμ— 이름(Name), μ—­ν• (Role), κ°’(Value)이 ν”„λ‘œκ·Έλž˜λ°μ μœΌλ‘œ μ œκ³΅λ˜μ—ˆλŠ”κ°€? 4.1.2 Name, Role, Value (A)
    • Do: μ»€μŠ€ν…€ μ²΄ν¬λ°•μŠ€λ₯Ό <div>와 CSS둜 λ§Œλ“€μ—ˆλ‹€λ©΄, <div role="checkbox" aria-checked="true" tabindex="0" aria-labelledby="label-id"> 와 같이 ARIA 속성을 μ‚¬μš©ν•˜μ—¬ μ—­ν• (checkbox), μƒνƒœ(checked), 이름(labelledby)을 λͺ…μ‹œν•©λ‹ˆλ‹€. ν‘œμ€€ HTML 컨트둀(<button>, <input type="checkbox"> λ“±)을 μ΅œλŒ€ν•œ μ‚¬μš©ν•©λ‹ˆλ‹€.
    • Don't: μ•„μ΄μ½˜ λ²„νŠΌμ„ <span> νƒœκ·Έμ™€ λ°°κ²½ μ΄λ―Έμ§€λ‘œλ§Œ λ§Œλ“€κ³ , 슀크린 리더가 읽을 수 μžˆλŠ” aria-labelμ΄λ‚˜ μˆ¨μ€ ν…μŠ€νŠΈλ₯Ό μ œκ³΅ν•˜μ§€ μ•Šμ•„ μš©λ„λ₯Ό μ•Œ 수 μ—†κ²Œ λ§Œλ“­λ‹ˆλ‹€. μ»€μŠ€ν…€ μ»΄ν¬λ„ŒνŠΈμ— roleμ΄λ‚˜ μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” aria-* 속성을 λˆ„λ½ν•©λ‹ˆλ‹€.
  • μƒνƒœ λ©”μ‹œμ§€κ°€ 보쑰 기술둜 μ „λ‹¬λ˜λ„λ‘ μ„€κ³„λ˜μ—ˆλŠ”κ°€? 4.1.3 Status Messages (AA)
    • Do: ν•­λͺ©μ„ μž₯λ°”κ΅¬λ‹ˆμ— μΆ”κ°€ν–ˆμ„ λ•Œ, "μƒν’ˆμ΄ μž₯λ°”κ΅¬λ‹ˆμ— μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€." 와 같은 λ©”μ‹œμ§€κ°€ λ‚˜νƒ€λ‚˜λŠ” μ˜μ—­μ„ <div aria-live="polite"> λ˜λŠ” <div role="status"> 둜 κ°μ‹Έμ„œ 슀크린 리더가 ν•΄λ‹Ή λ©”μ‹œμ§€λ₯Ό μ‚¬μš©μžμ—κ²Œ μžλ™μœΌλ‘œ 읽어주도둝 ν•©λ‹ˆλ‹€.
    • Don't: 검색 κ²°κ³Όκ°€ λ‘œλ“œλ˜κ±°λ‚˜, 섀정이 μ €μž₯λ˜μ—ˆλ‹€λŠ” μ‹œκ°μ  ν”Όλ“œλ°±λ§Œ μ œκ³΅ν•˜κ³ , 슀크린 리더 μ‚¬μš©μžμ—κ²ŒλŠ” μ•„λ¬΄λŸ° 정보 전달 없이 쑰용히 λ³€κ²½ 사항이 μ μš©λ©λ‹ˆλ‹€.

5. ν•œκ΅­ν˜• νŠΉν™” μš”κ΅¬μ‚¬ν•­

ν•œκ΅­ν˜• μ›Ή μ½˜ν…μΈ  μ ‘κ·Όμ„± μ§€μΉ¨ 2.2μ—μ„œ κ°•μ‘°λœ ν•œκ΅­ νŠΉν™” μš”κ΅¬μ‚¬ν•­λ“€.

  • 반볡 μž…λ ₯ 정보 μ΅œμ†Œν™”: μ‚¬μš©μžκ°€ 반볡적으둜 μž…λ ₯ν•΄μ•Ό ν•˜λŠ” 정보λ₯Ό μ€„μ˜€λŠ”κ°€? (7.3.4)
    • Do: νšŒμ›κ°€μž… μ‹œ μž…λ ₯ν•œ μ£Όμ†Œλ₯Ό μ£Όλ¬Έ μ‹œ 'κΈ°λ³Έ λ°°μ†‘μ§€λ‘œ μ‚¬μš©' μ˜΅μ…˜μœΌλ‘œ 뢈러올 수 있게 ν•˜κ±°λ‚˜, 이전 결제 정보λ₯Ό μ•ˆμ „ν•˜κ²Œ μ €μž₯ν•˜μ—¬ λ‹€μŒ 결제 μ‹œ μž¬μ‚¬μš©ν•  수 μžˆλ„λ‘(μ‚¬μš©μž λ™μ˜ ν•˜μ—) κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
    • Don't: μƒν’ˆ μ£Όλ¬Έ μ‹œ 맀번 이름, μ—°λ½μ²˜, μ£Όμ†Œλ₯Ό μ²˜μŒλΆ€ν„° μƒˆλ‘œ μž…λ ₯ν•˜λ„λ‘ μš”κ΅¬ν•©λ‹ˆλ‹€. μ—¬λŸ¬ λ‹¨κ³„λ‘œ 이루어진 μ‹ μ²­μ„œμ—μ„œ 이전 단계에 μž…λ ₯ν–ˆλ˜ λ™μΌν•œ 정보λ₯Ό λ‹€μŒ λ‹¨κ³„μ—μ„œ 또 λ¬Όμ–΄λ΄…λ‹ˆλ‹€.
  • 점근 κ°€λŠ₯ν•œ 인증: 인증 κ³Όμ •μ—μ„œ 보쑰 기술 μ‚¬μš©μžκ°€ μ ‘κ·Ό κ°€λŠ₯ν•˜λ„λ‘ μ„€κ³„ν–ˆλŠ”κ°€? (7.3.3)
    • Do: 이미지 CAPTCHA λŒ€μ‹  μŒμ„± CAPTCHA μ˜΅μ…˜μ„ μ œκ³΅ν•˜κ±°λ‚˜, reCAPTCHA v3와 같이 μ‚¬μš©μž μΈν„°λž™μ…˜μ΄ 적은 방식을 μ‚¬μš©ν•©λ‹ˆλ‹€. κ³΅λ™μΈμ¦μ„œ(ꡬ κ³΅μΈμΈμ¦μ„œ), κΈˆμœ΅μΈμ¦μ„œ λ“± κ΅­λ‚΄ 인증 μˆ˜λ‹¨μ„ μ‚¬μš©ν•  λ•Œ ν•„μš”ν•œ ν”„λ‘œκ·Έλž¨ μ„€μΉ˜ 및 μ‹€ν–‰ 과정이 ν‚€λ³΄λ“œλ‘œ μ ‘κ·Ό κ°€λŠ₯ν•˜κ³  슀크린 λ¦¬λ”λ‘œ μ•ˆλ‚΄λ˜λ„λ‘ ν•©λ‹ˆλ‹€. (κ°€λŠ₯ν•œ 경우 λŒ€μ²΄ 인증 μˆ˜λ‹¨ 제곡)
    • Don't: μ‹œκ°μ  이미지 CAPTCHA만 μ œκ³΅ν•˜κ³  λŒ€μ²΄ μˆ˜λ‹¨μ΄ μ—†μŠ΅λ‹ˆλ‹€. νŠΉμ • λ³΄μ•ˆ ν”„λ‘œκ·Έλž¨(ActiveX λ˜λŠ” μ‹€ν–‰ 파일 ν˜•νƒœ) μ„€μΉ˜κ°€ ν•„μˆ˜μ΄λ©°, ν•΄λ‹Ή ν”„λ‘œκ·Έλž¨μ΄ ν‚€λ³΄λ“œ μ‘°μž‘μ΄λ‚˜ 슀크린 리더λ₯Ό μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ‹œκ°„ μ œν•œμ΄ μžˆλŠ” OTP μž…λ ₯ ν™”λ©΄μ—μ„œ μ‹œκ°„ μ—°μž₯ κΈ°λŠ₯을 μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • κ΅­λ‚΄ 법적 μ€€μˆ˜: γ€Œμž₯애인 μ°¨λ³„κΈˆμ§€λ²•γ€ 및 γ€Œκ΅­κ°€μ •λ³΄ν™”κΈ°λ³Έλ²•γ€μ— λ”°λ₯Έ 의무 사항을 λ°˜μ˜ν–ˆλŠ”κ°€?
  • λͺ¨λ°”일 ν™˜κ²½ κ³ λ €: PC뿐만 μ•„λ‹ˆλΌ λͺ¨λ°”일 κΈ°κΈ°μ—μ„œμ˜ 접근성을 κ²€ν† ν–ˆλŠ”κ°€? (1 적용 λ²”μœ„)
    • Do: λͺ¨λ°”일 ν™”λ©΄μ—μ„œ λ²„νŠΌμ΄λ‚˜ 링크 λ“± ν„°μΉ˜ λŒ€μƒμ˜ 크기λ₯Ό μ΅œμ†Œ 44x44 CSS ν”½μ…€ μ΄μƒμœΌλ‘œ μΆ©λΆ„νžˆ ν™•λ³΄ν•˜κ³ , μš”μ†Œ κ°„ 간격도 적절히 λ°°μΉ˜ν•˜μ—¬ 잘λͺ» ν„°μΉ˜ν•  κ°€λŠ₯성을 μ€„μž…λ‹ˆλ‹€. ν•€μΉ˜ 쀌(Pinch zoom) κΈ°λŠ₯을 막지 μ•Šμ•„ μ‚¬μš©μžκ°€ 화면을 ν™•λŒ€ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. ν™”λ©΄ λ°©ν–₯(κ°€λ‘œ/μ„Έλ‘œ) μ „ν™˜ μ‹œ μ½˜ν…μΈ κ°€ μž˜λ¦¬μ§€ μ•Šκ³  μžμ—°μŠ€λŸ½κ²Œ μž¬λ°°μΉ˜λ˜λ„λ‘ λ°˜μ‘ν˜•μœΌλ‘œ λ””μžμΈν•©λ‹ˆλ‹€.
    • Don't: λͺ¨λ°”일 ν™”λ©΄μ—μ„œ λ²„νŠΌλ“€μ΄ λ„ˆλ¬΄ μž‘κ³  μ΄˜μ΄˜ν•˜κ²Œ λΆ™μ–΄ μžˆμ–΄ λˆ„λ₯΄κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€. <meta name="viewport" content="..., user-scalable=no">λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžμ˜ ν™•λŒ€/μΆ•μ†Œ κΈ°λŠ₯을 λΉ„ν™œμ„±ν™”ν•©λ‹ˆλ‹€. κ°€λ‘œ λͺ¨λ“œμ—μ„œλŠ” μ½˜ν…μΈ μ˜ 일뢀가 μž˜λ €λ‚˜κ°€ 슀크둀 μ—†μ΄λŠ” λ³Ό 수 μ—†μŠ΅λ‹ˆλ‹€.

μ‚¬μš© 방법

  • 각 μ»΄ν¬λ„ŒνŠΈ(λ²„νŠΌ, μž…λ ₯ ν•„λ“œ, λ‚΄λΉ„κ²Œμ΄μ…˜ λ“±)λ₯Ό 섀계할 λ•Œ 이 체크리슀트λ₯Ό μ°Έκ³ 
  • 체크리슀트 ν•­λͺ©μ„ ν•˜λ‚˜μ”© κ²€ν† ν•˜λ©° "예/μ•„λ‹ˆμ˜€"둜 ν™•μΈν•˜κ³ , λ―Έμ€€μˆ˜ ν•­λͺ©μ€ κ°œμ„  κ³„νš 수립
  • 개발 및 QA λ‹¨κ³„μ—μ„œ 슀크린 리더(NVDA, VoiceOver λ“±)와 ν‚€λ³΄λ“œ ν…ŒμŠ€νŠΈ 병행

참고 자료

Clone this wiki locally

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /