WAI-ARIA (Web Accessibility Initiative - Accessible Rich Internet Applications)는 웹 콘텐츠와 애플리케이션이
장애인에게 더 접근 가능하도록 돕는 W3C의 표준으로,
보조 기술이 웹 페이지를 이해하고 상호작용할 수 있도록 역할, 상태, 속성을 정의합니다.
ARIA의 첫 번째 규칙은, 기본적인 HTML 요소들이 이미 사용자 접근성을 위한 기능을 잘 제공하고 있다면,
굳이 ARIA를 사용해서 바꾸지 말고 그대로 사용하는 것입니다. 즉, HTML 자체의 접근성 기능을 먼저 활용해야 합니다.
[이미지 출처 : How to use WAI-ARIA]
[이미지 출처 : pressbooks WAI-ARIA Landmarks]
WAI-ARIA 핵심 목표 및 기능 요약
동적인 콘텐츠와 고급 사용자 인터페이스 컨트롤을 위한 웹 접근성 표준으로,
스크린 리더 사용자를 포함한 보조 기술 사용자들이 웹 애플리케이션을 효과적으로 사용할 수 있도록 설계되었습니다.
HTML에 추가적인 속성을 추가해 접근성을 높이고, 이러한 속성들은 웹 요소의 역할, 상태, 속성을 설명합니다.
이를 통해 보조 기술이 웹 콘텐츠를 더 잘 이해하고 사용자에게 전달할 수 있도록 돕습니다.
결과적으로 복잡한 웹 애플리케이션에서도 모든 사용자가 원활하게 상호작용할 수 있는 환경을 제공합니다.
WAI-ARIA의 개념은 2004년 W3C에서 처음 논의되었습니다.
당시 웹 애플리케이션이 점점 더 복잡해지면서, 접근성을 보장할 수 있는 새로운 방법이 필요하다는 인식이 있었습니다.
2006년: 첫 번째 공개 작업 초안 (Working Draft)
WAI-ARIA의 첫 번째 공개 작업 초안 발표하였고,
이 초안은 복잡한 웹 애플리케이션에서 동적 콘텐츠와 고급 위젯을 정의하는 방법을 설명합니다.
이 초기 버전에서는 기본적인 역할(roles), 속성(properties), 상태(states) 등을 정의했습니다.
2009년: WAI-ARIA 1.0 발표
WAI-ARIA 1.0의 첫 번째 권고 초안이 W3C에서 발표되었으며, 이 버전은 웹 접근성을 향상시키기 위한 표준을 제시했습니다.
새로운 역할(Roles), 속성(Properties), 상태(States)을 정의했습니다.
사용자 인터페이스 구성 요소(UI Components)의 접근성을 정의하는 방법을 제시합니다.
2014년: WAI-ARIA 1.0 권고안 (Recommendation)
WAI-ARIA 1.0이 W3C의 권고안으로 공식 발표되었으며,
이 버전은 웹 접근성 커뮤니티에서 널리 채택되었고, 다양한 브라우저와 보조 기술에서 지원되기 시작했습니다.
2017년: WAI-ARIA 1.1 발표
WAI-ARIA 1.1 버전이 발표되었습니다. 이 버전은 WAI-ARIA 1.0의 개선 및 확장을 포함하며,
사용자 경험을 개선하기 위한 새로운 롤과 속성들이 추가되었습니다.
기존 역할(Role)과 속성(Property)에 대한 명세가 추가로 개선되었습니다.
새로운 역할(Role) 및 속성(Property)이 도입되었습니다.
스크린 리더와 같은 보조 기술과의 호환성 향상되었습니다.
2021년: WAI-ARIA 1.2 발표
WAI-ARIA 1.2가 권고안으로 발표되었습니다. 이 버전은 이전 버전들에서 받은 피드백을 반영하여, 보다 정교한 접근성 요구 사항을 추가하였습니다.
사용자 인터페이스 구성 요소의 접근성을 더 세밀하게 조정할 수 있도록 복합 위젯에 대한 정의가 추가되었습니다.
사용자 정의 위젯에 대한 접근성 지원을 강화했습니다.
라이브 영역(live regions)에 대한 개선된 지침을 제공하여, 동적 콘텐츠가 사용자에게 실시간으로 더 효과적으로 전달될 수 있도록 하였습니다.
현재 ~ : WAI-ARIA 1.3
WAI-ARIA의 다음 버전인 1.3에 대한 논의가 진행 중이며, 웹 접근성 표준을 지속적으로 개선하는 것이 목표입니다.
WAI-ARIA 1.3은 사용자 정의 위젯에 대한 지원을 강화하고, 접근성 테스트 및 지원의 자동화를 목표로 할 가능성이 있습니다.
이러한 개선은 웹 애플리케이션의 접근성을 더욱 향상시키고, 다양한 사용자들에게 보다 나은 경험을 제공하는 데 기여할 것입니다.
WAI-ARIA의 중요성
웹 접근성 표준화
WAI-ARIA는 동적 콘텐츠와 복잡한 사용자 인터페이스를 포함하는 웹 애플리케이션의 접근성을 보장하기 위해 필수적인 기술 표준입니다.
보조 기술과의 통합
WAI-ARIA는 스크린 리더, 화면 확대 소프트웨어 등 보조 기술이 웹 콘텐츠를 보다 정확하게 해석하고 사용자에게 전달할 수 있도록 돕습니다.
포용적인 웹 환경 조성
WAI-ARIA는 모든 사용자가 웹 애플리케이션을 사용할 수 있도록 보장하여 포용적인 웹 환경을 조성합니다.
WAI-ARIA를 웹사이트와 애플리케이션에 적절히 적용하면,
장애를 가진 사용자를 포함한 모든 사용자가 웹 콘텐츠를 더 쉽게 접근하고 사용할 수 있습니다.
WAI-ARIA 적용 시 주의사항
WAI-ARIA의 남용 방지
이미 접근성이 내장된 네이티브 HTML 요소에 불필요하게 WAI-ARIA를 추가하지 않도록 주의해야 합니다.
WAI-ARIA는 보조 기술이 네이티브 HTML 요소의 접근성 기능을 이해하지 못할 때 필요하며,
네이티브 HTML 요소는 본래 접근성을 제공하므로, 이를 변경하거나 추가적인 WAI-ARIA 속성을 사용하는 것은 오히려 혼란을 초래할 수 있습니다.
예) <button> 요소는 이미 접근성이 확보되어 있으므로 추가적인 role="button" 속성이 불필요합니다.
테스트 필수
다양한 보조 기술(스크린 리더, 키보드 내비게이션 등)과 다양한 브라우저에서 충분히 테스트하여 WAI-ARIA 적용이 의도한 대로 작동하는지 확인해야 합니다.
웹 표준 준수
WAI-ARIA를 적용할 때는 웹 표준을 준수하고, 가이드라인에 따라 역할(role), 속성(property), 상태(state)를 올바르게 사용하는 것이 중요합니다.
WAI-ARIA의 주요 역할(Role)
요약 설명
WAI-ARIA에서 역할(Role)은 특정 HTML 요소가 웹 페이지 내에서 어떤 기능이나 역할을 하는지를 정의하며,
스크린 리더와 같은 보조 기술이 이 정보를 활용하여 사용자가 웹 콘텐츠를 더 쉽게 이해하고 탐색할 수 있도록 돕습니다.
대부분의 시멘틱 마크업 요소들은 기본적인 역할(Role)을 기본적으로 지원합니다.
그러나 레거시 시스템이나 특정 요구 사항으로 인해 <div> 요소를 사용해야 하는 경우,
WAI-ARIA를 통해 이 요소에 동일한 접근성 역할을 명시적으로 부여하여 사용할 수 있습니다.
문서 구조 역할은 콘텐츠의 섹션에 대해 구조적 설명을 제공하는 데 사용됩니다.
현대 브라우저는 시맨틱 HTML 요소를 지원하므로, 이러한 역할의 대부분은 더 이상 필요하지 않습니다.
그러나, 프리젠테이션, 도구 모음, 도구 설명 역할과 같이 HTML에 해당하는 역할이 없는 경우,
보조 기술에 문서 구조에 대한 정보를 제공하는 데 유용합니다.
주요 예시 : toolbar, tooltip, feed, math, presentation / none,
note, application, directory, document, group
시멘틱 예시 : article (<article>) cell (<td>) columnheader (<th scope=”col”>) definition (<dfn>) figure (<figure>) heading (h1~h6) img (<img> or <picture>) list (<ul> or <ol>) listitem (<li>) meter (<meter>) row (<tr> with <table>) rowgroup (<thead>, <tfoot> and <tbody>) rowheader (<th scope=”row”>) separator (<hr>) table (use <table>) term (use <dfn>)
Landmark Roles (랜드마크 역할)
랜드마크 역할은 웹 페이지의 주요 구역을 식별하고 구조를 정의합니다.
페이지의 각 섹션에 레이블을 붙이면, 시각적으로 나타나는 구조적 정보가 프로그래밍 방식으로 표현되어,
사용자가 페이지를 보다 효율적으로 탐색할 수 있게 합니다.
시멘틱 예시 : banner (document <header>) complementary (<aside>) contentinfo (document <footer>) form (<form>) main (<main>) navigation (<nav>) region (<section>) search (<search>)
Live Region Roles (라이브 영역 역할)
동적으로 변경되는 콘텐츠를 사용자에게 실시간으로 알리기 위해 사용하는 역할입니다.
시각적으로는 변화가 눈에 띄지만, 저시력 또는 시각 장애가 있는 사용자는 스크린 리더와 같은 보조 기술을 통해
콘텐츠의 업데이트를 확인할 수 있도록 해야 합니다. 이러한 역할은 보조 기술이 콘텐츠의 변경 사항을 사용자에게
정확하게 전달할 수 있도록 돕습니다.
주요 예시 : alert, log, marquee, status, timer
Window Roles (윈도우 역할)
사용자 인터페이스의 창 요소를 정의하는 역할로, 주로 대화 상자, 모달 창, 툴팁과 같은 UI 구성 요소를 나타냅니다.
이러한 요소들은 웹 애플리케이션에서 중요한 정보를 전달하거나 사용자와 상호작용할 때 사용되며,
보조 기술이 이들 요소를 인식하고 사용자에게 적절하게 알릴 수 있도록 돕습니다.
주요 예시 : alertdialog, dialog, tooltip
자주 사용되는 역할(Role) 예시
Role: button
요소를 “버튼”으로(클릭 가능한 요소) 인식합니다.
Role: alert
중요한 메시지를 사용자에게 즉시 전달해야 할 때 사용됩니다. 스크린 리더는 이러한 요소가 등장할 때 자동으로 읽어주어,
시각 장애 사용자에게 중요한 정보를 빠르게 전달할 수 있도록 돕습니다.
폼 제출 시 오류 메시지를 표시할 때 유용합니다.
Role: dialog
대화 상자(Dialog)는 주로 모달 창에서 사용되며, 사용자가 상호작용할 수 있는 별도의 창을 나타냅니다.
이 역할은 사용자에게 중요한 정보나 선택을 요구하는 경우에 사용되며,
스크린 리더와 같은 보조 기술이 대화 상자를 인식하고 알리도록 돕습니다.
Role: heading
섹션 제목은 콘텐츠의 계층 구조를 정의하는 데 사용되며, aria-level 속성을 통해 제목의 레벨을 설정할 수 있습니다.
이 역할은 보조 기술이 제목의 중요도와 위치를 이해하고, 사용자가 콘텐츠를 더 쉽게 탐색할 수 있도록 돕습니다.
Role: navigation
페이지 내의 내비게이션 링크 그룹을 정의하는 역할을 제공하며, 주로 메뉴, 탐색 바 등에서 사용됩니다.
이 역할을 통해 보조 기술은 내비게이션 링크의 구조를 이해하고, 사용자가 웹 페이지의 다양한 섹션으로 쉽게 이동할 수 있도록 돕습니다.
Role: tab
탭 인터페이스에서 각 탭 요소를 정의하며, tablist와 함께 사용됩니다.
이 역할은 사용자가 여러 탭 사이를 전환할 때 각 탭의 기능을 이해할 수 있도록 돕습니다.
tablist는 탭의 그룹을 정의하고, 각 탭 요소는 그 그룹 내의 개별 탭을 나타냅니다.
Role: tabpanel
탭이 선택되었을 때 표시되는 콘텐츠 패널을 정의합니다.
이 역할은 각 탭에 해당하는 콘텐츠 영역을 나타내며, 사용자가 탭을 클릭할 때 해당 패널의 내용을 확인할 수 있도록 합니다.
Role: header
<header> 요소의 역할을 수행하는 <div> 요소에는 role="banner" 속성을 추가하여
이 요소가 페이지의 주요 헤더 역할을 함을 명시합니다.
이 역활은 스크린 리더와 같은 보조 기술이 이 <div>가 페이지의 상단 헤더로 인식하도록 도와줍니다.
Role: main
<main> 요소의 역할을 수행하는 <div> 요소에는 role="main" 속성을 추가하여
이 요소가 페이지의 주요 콘텐츠 영역을 나타내는 역할을 한다고 명시합니다.
이렇게 설정하면 보조 기술이 이 <div>를 페이지의 주요 콘텐츠로 인식하고
사용자가 페이지의 중심 콘텐츠를 쉽게 찾을 수 있도록 도와줍니다.
Role: section
<section> 요소의 역할을 수행하는 <div> 요소에 role="region" 속성을 추가하고,
aria-labelledby 속성을 사용하여 섹션 제목을 참조할 수 있습니다.
이렇게 하면 보조 기술이 해당 <div>를 섹션으로 인식하고, 제목과 함께 관련 콘텐츠를 명확하게 설명할 수 있습니다.
Role: article
<article> 요소의 역할을 수행하는 <div> 요소에 role="article" 속성을 추가하여,
보조 기술이 해당 <div>를 독립적인 콘텐츠 블록(예: 블로그 글, 뉴스 기사 등)으로 인식하게 할 수 있습니다.
Role: footer
<footer> 요소의 역할을 수행하는 <div> 요소에 role="contentinfo" 속성을 추가하여,
보조 기술이 해당 <div>를 페이지나 섹션의 푸터(하단 정보 영역)로 인식할 수 있게 합니다.
Role: aside
<aside> 요소의 역할을 수행하는 <div> 요소에 role="complementary" 속성을 추가하여,
보조 기술이 해당 <div>를 주요 콘텐츠와는 별도로 관련된 부가적인 콘텐츠로 인식할 수 있게 합니다.
역할(Role) 요약 및 주의사항
역할 부여
<div> 요소에 role 속성을 추가하면, HTML5 요소가 제공하는 접근성 역할을 구현할 수 있습니다.
이 기능을 통해 화면에 보이지 않는 정보도 보조 기술에 전달되어, 모든 사용자가 웹 콘텐츠를 보다 쉽게 접근할 수 있게 됩니다.
일관된 접근성
보조 기술은 role 속성을 활용하여 웹 요소의 역할을 정확히 이해하고,
사용자에게 페이지의 구조와 내용을 명확히 전달할 수 있도록 돕습니다.
네이티브 요소 사용 권장
가능한 경우에는 role 속성을 사용하는 대신,
HTML5에서 제공하는 네이티브 요소(header, main, section, article, footer, aside 등)를 사용하는 것이 좋습니다.
네이티브 요소는 접근성과 의미론적 구조를 기본적으로 지원하므로, 웹 페이지의 구조를 보다 명확하고 일관되게 표현할 수 있습니다.
상태 및 속성(State and Properties)
요약 설명
WAI-ARIA 상태 및 속성은 웹 애플리케이션의 접근성을 향상시키기 위해 HTML 요소에 추가적인 의미와 기능을 부여하는 메커니즘입니다.
또한, WAI-ARIA 상태 및 속성은 웹 애플리케이션의 접근성을 향상시키는 중요한 도구입니다.
이를 적절하게 사용하면 시각적 장애를 가진 사용자도 웹 콘텐츠와 원활하게 상호작용하고,
동적인 콘텐츠 변화를 쉽게 인식할 수 있어 웹 접근성이 크게 개선됩니다.
상태는 동적으로 변할 수 있는 정보를 나타내며, 속성은 일반적으로 정적인 정보를 제공합니다.
HTML 요소의 상태와 특성은 보조 기술이 웹 요소의 현재 상태를 이해하고 사용자에게 전달할 수 있도록 정의됩니다.
이러한 상태와 특성은 역할(Role)과 함께 사용되어 웹 콘텐츠의 접근성을 향상시키는 데 기여합니다.
예) 선택 여부, 확장 여부, 활성화 상태 등을 포함.
속성(Properties)
속성은 웹 요소의 고정된 특성을 나타내며, 보조 기술이 이러한 요소를 적절하게 처리할 수 있도록 돕습니다.
속성은 일반적으로 페이지 로딩 시 설정되며, 변경되지 않거나 요소의 본질적인 특성을 나타내는 정적 정보를 제공합니다.
예) 요소의 레이블, 설명, 역할 등이 속성에 해당.
상태(States) 예시
aria-checked
체크박스, 라디오 버튼 또는 트리 항목의 선택 상태를 나타냅니다.
value : true(선택됨), false(선택되지 않음), mixed(부분 선택됨, 체크박스에만 해당)
aria-expanded
요소가 확장되었는지, 축소되었는지 여부를 나타냅니다. 드롭다운 메뉴, 아코디언 등에서 사용됩니다.
value : true(확장됨), false(축소됨)
aria-disabled
요소가 비활성화되었음을 나타냅니다. 이 상태에서는 사용자가 요소와 상호작용할 수 없습니다.
value : true(비활성화됨), false(활성화됨)
aria-hidden
요소가 보조 기술에 의해 무시될지를 나타냅니다. 요소가 시각적으로는 보이지만, 보조 기술 사용자에게는 숨겨질 때 사용됩니다
value : true(숨김), false(보임)
aria-selected
요소가 선택된 상태인지 나타냅니다. 주로 탭, 옵션 리스트 등에서 사용됩니다.
value : true(선택됨), false(선택되지 않음)
aria-pressed
토글 버튼의 눌림 상태를 나타냅니다.
value : true(눌림), false(눌리지 않음), mixed(부분적으로 눌림)
속성(Properties) 예시
aria-label
요소의 레이블을 제공하여, 스크린 리더가 이 레이블을 읽어 사용자에게 요소의 목적을 전달합니다.
작성자가 접근성 있는 이름을 제공할 수 없는 역할을 제외한 거의 모든 역할에 사용됩니다.
value : string
aria-labelledby
aria-labelledby 속성은 다른 요소가 레이블을 제공할 때 사용됩니다.
이 속성은 레이블 요소의 ID를 참조하여 해당 요소를 레이블로 지정합니다.
aria-labelledby는 접근 가능한 이름을 정의하지만, 레이블 지정 요소를 클릭하여 연결된 입력을 활성화하는 등의 기능은 제공하지 않습니다.
작성자가 액세스 가능한 이름을 제공할 수 없는 역할을 제외한 거의 모든 역할에서 사용됩니다.
value : ID reference list(ID 참조 목록)
aria-describedby
다른 요소가 추가적인 설명을 제공할 때 사용됩니다. 설명을 제공하는 요소의 ID를 참조합니다.
모든 역할에 사용됩니다. 모든 HTML 요소에서도 사용할 수 있습니다.
value : ID reference list(ID 참조 목록)
aria-controls
요소가 제어하는 다른 요소의 ID를 참조합니다. 주로 사용자 인터페이스에서 요소 간의 관계를 나타냅니다.
모든 역할에서 사용됩니다.
value : id list(ID 목록)
aria-live
동적으로 변경되는 콘텐츠 영역을 나타내며, 보조 기술이 콘텐츠의 변경 사항을 사용자에게 알리는 방법을 정의합니다.
모든 역할에서 사용됩니다.
value : off, polite, assertive
aria-valuenow / aria-valuemin / aria-valuemax
aria-valuenow : 슬라이더나 프로그레스 바 등에서 현재 값을 나타냅니다.
aria-valuemin : 슬라이더나 프로그레스 바 등에서 설정할 수 있는 최소 값을 나타냅니다.
aria-valuemax : 슬라이더나 프로그레스 바 등에서 설정할 수 있는 최대 값을 나타냅니다.