웹 접근성 분야는 장애인이 웹 콘텐츠를 사용할 수 있도록 하는 방법을 정의합니다. 특정 유형의 장애를 가진 사람들은 보조 기술(AT)을 사용하여 콘텐츠와 상호작용합니다. 보조 기술은 콘텐츠의 표현을 사용자에게 보다 적합한 형식으로
변환하거나, 사용자가 다양한 방법으로 상호작용할 수 있도록 합니다. 예를 들어 사용자는 마우스 드래그 대신 방향키로 슬라이더 위젯과 상호작용할 필요가 있거나, 그렇게 선택할 수도
있습니다. 이를 효과적으로 구현하려면 소프트웨어가 콘텐츠의 의미를 이해해야 합니다. 의미론은 의미의 과학이며, 이 경우에는 사용자의 관점에서 사용자 인터페이스와 콘텐츠 요소에
역할, 상태, 속성을 부여하는데 사용됩니다. 예를 들어 어떤 문단이 의미적으로 올바르게 태그된다면, 보조 기술은 해당 문단을 나머지 콘텐츠와 분리된 단위로 정확한 경계를 인식할 수
있습니다. 조절 가능한 구간 슬라이더나 접을 수 있는 리스트(트리 위젯 등)는 위젯의 다양한 부분에 대해 보조 기술이 효과적으로 상호작용할 수 있도록 의미가 올바르게 식별되어야 하는 보다
복잡한 예시입니다.
신기술은 종종 접근성을 위한 의미 체계를 간과하며, 새로운 저작 실무는 종종 그러한 기술의 본래 의미를 오용합니다. 요소가 언어 내에서 하나의 정의된 의미를 가지지만,
개발자는 다른 의미로 이를 사용하기도 합니다.
예를 들어 웹 애플리케이션 개발자는 HTML에 CSS
및 JavaScript를 사용하여 접이식 트리 위젯을 만듭니다. 하지만 HTML에는 의미론적 tree 요소가 없습니다. 비장애인 사용자에게는 이러한 구조가 실제
트리 위젯처럼 보이고 동작하겠지만, 의미가 올바르게 지정되지 않으면 해당 트리 위젯은 인지되거나 조작되기 어렵게 됩니다. 보조 기술이 역할을
인식하지 못할 수 있기 때문입니다. 마찬가지로, 개발자는 SVG에서도 JavaScript만으로 인터랙티브
버튼 위젯을 만듭니다. SVG에는 의미론적 button 요소가 없습니다. 비장애인에게는 버튼처럼 보이지만 의미를 주지 않으면, 해당 버튼은 인지되거나 조작될 수 없게 됩니다. 이는 보조 기술이 역할을 인식하지 못하기 때문입니다.
WAI-ARIA의 도입은 저자가 커스텀 위젯에 적절한 의미를 부여하여 접근 가능하고
사용 가능하며 보조 기술과 상호 운용되는 위젯을 만들 수 있도록 하는 방법입니다. 이 명세는 접근성 제품들이 일반적으로 인식하는 위젯과 구조 유형을, 콘텐츠에 부여할 수 있는 온톨로지 및
역할을 통해 정의합니다.
이를 통해 특정 역할이 부여된 요소는 구현 호스트 언어의 상속 의미와 상관없이 특정 위젯 또는 구조적 유형으로 인식될 수 있습니다. 역할은 플랫폼의 접근성 API에서 일반적으로 사용되는 속성이며, 보조 기술은 이를 활용하여 정보를
사용자에게 제공합니다.
역할 모델은 인터랙션 위젯 및 문서 구조를 나타내는 요소를 포함합니다. 역할 모델은 상속 관계를 설명하며, 각 역할이 지원하는 속성에 대한 세부 정보를 제공합니다. 역할과 접근성 API의 매핑에 대한 정보는 Core
Accessibility API Mappings
[CORE-AAM-1.2]에서 확인할 수 있습니다.
역할은 요소 유형에 해당하며, 시간이나 사용자 동작에 따라 변경되지 않습니다. 역할 정보는 보조 기술이 사용자 에이전트와 상호작용할 때 사용되어, 특정 요소에 대한 정상적인 처리를
제공합니다.
상태 및 속성은 요소의 상호작용에 영향을 주고 설명하는 중요한 속성을 선언하는 데 사용됩니다. 이들은 사용자 에이전트 및 운영체제가 클라이언트 측 스크립트로 속성이 동적으로 변경되는
경우에도 요소를 올바르게 처리할 수 있도록 해줍니다. 예를 들어, 스크린 리더나 음성 명령 소프트웨어 등 대체 입력/출력 기술은 다양한 상호작용 상태(예: 비활성화, 체크됨 등)를 인식
및 효과적으로 조작하고 전달할 수 있어야 합니다.
보조 기술이 이러한 속성을 Document Object Model [DOM]을 통해
직접 접근하는 것도 가능하지만, 권장되는 방식은 사용자 에이전트가 상태와 속성을 운영체제의 접근성 API에 매핑하는 것입니다. 자세한 사항은 Core Accessibility API Mappings [CORE-AAM-1.2] 및 접근 가능한 이름과 설명 산출 [ACCNAME-1.2]를 참고하세요.
그림 1.0은 사용자 에이전트(예: 브라우저), 접근성 API, 보조 기술 간의 관계를 나타냅니다.
이는 사용자 에이전트가 보조 기술에 제공하는 "계약"을 설명하는데, 여기에는 GUI 기반의 다양한 접근 가능한 플랫폼에서 접근성 API로 제공되는 전형적인 정보(역할, 상태, 선택, 이벤트 알림, 관계 정보, 설명 등)가 포함됩니다. DOM(보통 HTML)은
일반적인 모델-뷰-컨트롤러 관계에서 데이터 모델과 뷰 역할을 담당하며, JavaScript는 표시되는 데이터의 스타일과 내용을 조작하는 컨트롤러입니다. 사용자 에이전트는 운영체제의 접근성
API에 관련 정보를 전달하며, 스크린 리더 등 보조 기술이 이를 활용할 수 있습니다.

그림 1: 접근성 API와 함께하는 계약 모델
보다 자세한 정보와 역할을 활용한 대화형 콘텐츠의 접근성 제공 방법은 WAI-ARIA 작성
실무에서 확인할 수 있습니다.
대체 입력 장치 사용자는 키보드 접근 가능한 콘텐츠가 필요합니다. 새로운 의미 체계는 WAI-ARIA 작성 실무에서 권장하는 키보드
상호작용과 결합될 때, 대체 입력 솔루션을 통한 명령과 제어를 가능하게 합니다.
WAI-ARIA는 역할 모델과 XHTML 역할 랜드마크를 통해 탐색용 랜드마크를 도입합니다. 이는 손의 움직임이
어렵거나 시력이 약한 이용자에게 키보드 내비게이션 개선에 도움을 줍니다. 또한 WAI-ARIA는 인지적 학습 장애가 있는 사람들에게도 활용될 수 있습니다. 추가
의미 체계는 저자가 필요에 따라 구조를 재구성하거나 대체 콘텐츠로 바꿀 수 있도록 해줍니다.
보조 기술은 위젯의 상태 및 속성의 현재 값을 가져오고 설정하는 등 대체 입력을 지원할 수 있어야
합니다. 또한 객체의
선택 여부를 파악하고, 리스트박스/그리드 등 다중 선택 위젯을 관리해야 할 수도 있습니다.
음성 기반 명령 및 제어 시스템은 WAI-ARIA의 role
속성과 같은 의미 체계에서 이점을 얻어 오디오 정보를 사용자에게 효과적으로 전달할 수 있습니다. 예를 들어 역할이 menu이고 자식
요소들이 역할 menuitem인 경우 각각에 "초콜릿", "딸기", "바닐라"와 같은 텍스트가 있다면, 음성 시스템은 "세
가지 중 하나를 선택: 초콜릿, 딸기, 또는 바닐라"라고 안내할 수 있습니다.
WAI-ARIA는 호스트 언어의 의미 체계를 보완하기 위한 것이며, 대체하는 용도가
아닙니다. 호스트 언어에서 WAI-ARIA와 동등한 접근성 기능을 제공할 경우, 호스트 언어의 기능을 사용하세요. WAI-ARIA는 호스트 언어에 필요한 역할, 상태, 속성 표시가 없을 경우에만 사용해야 합니다. 가능하면 호스트 언어의 기능을 먼저 사용하고, 필요시 WAI-ARIA로 의미를
보완하세요. 예를 들어 다중 선택 가능한 그리드는 표(table)로 구현한 후, 이것이 단지 정적 데이터 테이블이 아니라 대화형 그리드임을 WAI-ARIA로 명확히 할 수 있습니다.
이렇게 하면 WAI-ARIA를 지원하지 않는 사용자 에이전트에서 최선의 대체 동작이 가능하며, 호스트 언어의 의미 체계도 보존할 수 있습니다.
WAI-ARIA는 두 가지 방식으로 사용자 에이전트의 지원에 의존합니다:
사용자 에이전트가 WAI-ARIA 마크업으로 접근성 API에 노출되는 정보를 개선하는 것
이외에는, 기본적으로 기존과 동일하게 동작합니다. 보조 기술은 접근성 API의 추가
정보를 비웹 콘텐츠의 동일 정보와 마찬가지로 반영합니다. 보조 기술이 아닌 사용자 에이전트는 적절한 접근성 API 업데이트 외에 추가로 할 일이 없습니다.
WAI-ARIA 명세는 WAI-ARIA 마크업을 바탕으로 네이티브 표현이나 상호작용 동작을 강화하는 것을 사용자 에이전트에 요구하지도, 금지하지도 않습니다. 주류 사용자 에이전트는 모든
사용자의 내비게이션을 돕기 위해, WAI-ARIA 랜드마크(예: 다이얼로그 박스, 키보드 단축키 등)를 노출할 수 있습니다. 사용자 에이전트는 장애가 없는 이용자도 포함하여 최대한 많은
도움을 주는 것이 권장됩니다.
WAI-ARIA는 저자의 의도가 보조 기술에 전달될 수 있도록 누락된 의미를 제공하는 것이 목적입니다. 일반적으로, WAI-ARIA를 사용하는 저자는 각각의 표현 및 상호작용 기능을
제공해야 합니다. 시간이 지나면서 호스트 언어가 표준 접근 가능한 사용자 인터페이스 컨트롤(예: 새로운 폼 컨트롤 등)로 WAI-ARIA와 동등한 기능을 제공한다면, 저자는 맞춤 UI
컴포넌트 대신 이를 사용할 수 있습니다. 이 경우 사용자 에이전트는 호스트 언어 네이티브 기능을 지원합니다. WAI-ARIA를 구현하는 호스트 언어 개발자 역시, WAI-ARIA 의미가
호스트 언어 내재 의미와 충돌하지 않는 한 계속 지원하는 것이 권장됩니다. 그 이유는 WAI-ARIA 의미가 저자의 의도를 보다 분명히 드러내기 때문입니다.
WAI-ARIA는 [HTML] 및 [SVG2] 등 지원 언어의 의미를 보완하거나, 아리아 지원이 명시적으로 포함되지
않은 다른 마크업 기반 언어의 접근성 향상 기술로 사용되도록 설계되었습니다. 새로운 객체 유형의 등장이 웹 언어 표준에 반영되기보다 빠르기 때문에, 저자가 스타일과 스크립트로 페이지
언어에서 직접 지원하지 않는 새로운 유형의 객체를 만들 때 보조 기술에 의미를 명확히 전달할 수 있습니다.
호스트 언어가 해당 객체 유형에 대한 의미론적 요소를 제공하는 경우, 스타일 및 스크립트로 직접 객체를 만드는 것은 적합하지 않습니다. WAI-ARIA로 이러한 객체의 접근성을 향상시킬 수
있으나, 가장 좋은 방법은 사용자 에이전트가 네이티브로 객체를 처리하게 하는 것입니다. 예를 들어, HTML에서 div에 heading
역할을 부여하는 것보다 h1 요소를 사용하는 것이 더 바람직합니다.
시간이 지남에 따라 호스트 언어는 지금은 오직 WAI-ARIA로만 선언할 수 있는 객체 의미를 자연스럽게 지원하게 될 것으로 기대됩니다. 이는 더욱 의미 중심적이고 접근성 높은 마크업의
등장을 자극하는 WAI-ARIA의 목표와 부합합니다. 주어진 기능에 대한 네이티브 의미가 제공되면, 저자는 해당 네이티브 기능으로 전환하고 WAI-ARIA 적용을 중단하는 것이
바람직합니다. 과거 콘텐츠는 계속 WAI-ARIA를 사용할 수 있으므로, 사용자 에이전트의 WAI-ARIA 지원 필요성은 지속됩니다.
WAI-ARIA의 개별 기능은 시간이 지나면 중요성이 줄어들 수 있지만, WAI-ARIA가 웹 페이지에 의미 체계를 추가하는 일반적인 방법은 계속 필요할 것으로 보입니다. 호스트 언어가
WAI-ARIA가 제공하는 모든 의미를 구현하지 않을 수도 있고, 각 호스트 언어는 기능의 다양한 부분집합만 구현할 수도 있습니다. 새로운 객체 유형은 계속해서 개발되고, 이러한 객체를
접근 가능하게 만드는 방법을 제공하는 것이 WAI-ARIA의 목표이기도 합니다. 웹 저작 실무는 종종 호스트 언어 표준 발전보다 더 빠르게 진화하기 때문에, WAI-ARIA와 호스트
언어는 서로 다른 속도로 함께 발전하게 됩니다.
어떤 호스트 언어는 사용자 인터페이스 이외의 기능을 위한 의미론을 정의하기 위해 존재하기도 합니다. 예를 들어, SVG는 그래픽 객체 생성에 초점을 두고 있으며, 사용자가 직접 조작할 수 있는 UI 컴포넌트의 의미는
제공하지 않습니다. 이러한 경우, WAI-ARIA가 UI 구성 요소에 의미 정보를
추가하기 위한 장기적 접근 방법으로 채택될 수 있습니다.