마이크로소프트 액티브 접근성
마이크로소프트 액티브 접근성(Microsoft Active Accessibility, MSAA)는 사용자 인터페이스 접근성을 위한 애플리케이션 프로그래밍 인터페이스(API)이다. MSAA는 1997년 윈도우 95의 플랫폼 애드온으로 처음 도입되었다. MSAA는 보조과학기술(AT) 제품이 애플리케이션(또는 운영 체제)의 표준 및 사용자 지정 사용자 인터페이스(UI) 요소와 상호작용하고, UI 요소를 액세스, 식별 및 조작할 수 있도록 설계되었다. 보조과학기술 제품은 신체적 또는 인지적 어려움, 손상 또는 장애가 있는 사용자가 더 나은 접근성을 누릴 수 있도록 MSAA가 활성화된 애플리케이션과 연동된다. 보조과학기술 제품의 예로는 시각 장애인을 위한 스크린 리더, 신체 활동이 제한된 사용자를 위한 화상 키보드, 청각 장애인을 위한 내레이터 등이 있다. 또한 MSAA는 테스트 자동화 도구 및 컴퓨터 기반 교육 애플리케이션에도 사용될 수 있다.
현재 MSAA의 최신 사양은 마이크로소프트 UI 자동화 커뮤니티 약속 사양(Community Promise Specification)의 일부에서 확인할 수 있다.
역사
[편집]액티브 접근성은 초기에 OLE 접근성(OLE Accessibility)[1]로 불렸으며, 이러한 유산은 정의와 선언을 포함하는 헤더 파일인 oleacc.h나 이진 구성 요소인 oleacc.dll 등의 명칭에 반영되어 있다. 1996년 3월 마이크로소프트의 액티브X 브랜드 강화 전략의 일환으로 OLE 접근성은 액티브X 접근성(ActiveX Accessibility, 때로는 AXA로 지칭)으로 이름이 변경되었으며, 1996년 3월 샌프란시스코에서 열린 마이크로소프트 전문 개발자 컨퍼런스에서 이와 같이 발표되었다. 이후 액티브X 브랜드가 인터넷 관련 기술로 한정되면서, 액티브X 접근성은 액티브 접근성으로 명칭이 바뀌었고 흔히 MSAA로 약칭하게 되었다.
MSAA는 1997년 4월 마이크로소프트 액티브 접근성 소프트웨어 개발 키트(SDK) 버전 1.0의 일부로 처음 출시되었다. 이 SDK 패키지에는 문서, 프로그래밍 라이브러리, 샘플 소스 코드, 그리고 보조 기술 벤더들이 제품에 포함할 수 있는 재배포 가능 키트(RDK)가 포함되어 있었다. RDK에는 윈도우 95를 위한 업데이트된 운영 체제 구성 요소가 포함되었다. 윈도우 98 및 윈도우 NT 4.0 서비스 팩 4 이후로 MSAA는 윈도우 플랫폼의 모든 버전에 내장되었으며, 시간이 지남에 따라 주기적인 업그레이드와 패치가 이루어졌다.
윈도우에서 보조과학기술 애플리케이션을 위한 프로그래밍 방식의 노출은 역사적으로 MSAA를 통해 제공되어 왔다. 그러나 최신 애플리케이션들은 이제 윈도우 비스타와 닷넷 프레임워크 3.0에서 도입된 마이크로소프트 UI 자동화(UIA)를 사용하고 있다.
버전 기록
[편집]출시된 액티브 접근성의 버전은 다음과 같다:[2]
| 버전 | 설명 |
|---|---|
| 1.0 | 윈도우 95용 초기 애드온 출시. RDK는 운영 체제의 영어 버전에서만 지원되었다. (1997년) |
| 1.1 | 윈도우 98에 포함됨. |
| 1.2.x | 윈도우의 영어 버전과 국제 버전 모두에서 사용할 수 있게 된 MSAA의 첫 번째 개정판. (1998년) |
| 1.3.x | 더 많은 언어에 대한 추가 지원이 추가됨. 국제 텍스트 리소스 라이브러리를 위한 위성 동적 링크 라이브러리(oleaccrc.dll)가 도입됨. 이후 시스템 구성 요소가 윈도우 NT 4.0 서비스 팩 6 이상, 윈도우 98, 윈도우 2000 및 윈도우 Me에 통합됨. (1999년) |
| 2.0 | MSAA의 첫 번째 주요 개정판으로, 동적 주석(Dynamic Annotation) 및 MSAA 텍스트 지원이 추가됨. 이 버전은 윈도우 XP에 통합됨. 이후 윈도우 버전들에서 MSAA 프레임워크에 소규모 개정이 이루어짐. 2003년에 이전 플랫폼(윈도우 95, 98, 2000, Me, NT)용 RDK 2.0 버전이 제공됨. (2000년~2008년) |
| 3.0 | 프레임워크가 윈도우 자동화 API 3.0(Windows Automation API 3.0)의 일부가 됨. 이는 MSAA와 UI 자동화(UIA)에 의해 윈도우 플랫폼 접근성 API 세트로 통합됨. 윈도우 자동화 API는 윈도우 7에 포함되어 있으며 윈도우 비스타 및 XP에서 사용 가능함. (2009년) |
동기 및 목표
[편집]MSAA 개발의 동기가 된 요인은 기저의 운영 체제 또는 애플리케이션과 보조과학기술 제품 사이에 원활하고 가용한 통신 메커니즘을 허용하는 것이었다.
MSAA의 프로그래밍적 목표는 윈도우 컨트롤이 이름, 화면상의 위치, 컨트롤 유형과 같은 기본 정보와 가시성, 활성화 여부, 선택 여부와 같은 상태 정보를 노출할 수 있도록 하는 것이다.
기술 개요
[편집]MSAA는 컴포넌트 오브젝트 모델(COM)을 기반으로 한다. COM은 애플리케이션과 운영 체제가 통신하기 위한 메커니즘을 정의한다.
그림 1은 MSAA의 상위 수준 아키텍처를 보여준다.
애플리케이션(예: 워드 프로세서)은 자신의 사용자 인터페이스(UI)에 대한 정보를 제공하거나 서빙하기 때문에 MSAA에서 '서버'라고 불린다. 접근성 도구(예: 스크린 리더)는 애플리케이션의 UI 정보를 소비하고 상호작용하기 때문에 MSAA에서 '클라이언트'라고 불린다.
MSAA 프레임워크의 시스템 구성 요소인 Oleacc.dll은 접근성 도구(클라이언트)와 애플리케이션(서버) 사이의 통신을 돕는다. 코드 경계는 UI 접근성 정보를 제공하는 애플리케이션과 사용자를 대신해 UI와 상호작용하는 접근성 도구 사이의 프로그래밍적 경계를 나타낸다. MSAA 클라이언트가 자체 프로세스를 가질 때 이 경계는 프로세스 경계가 될 수도 있다.
UI는 접근 가능한 객체들의 계층 구조로 표현되며, 변경 사항과 동작은 윈이벤트(WinEvents)로 표현된다.
접근 가능한 객체
[편집]접근 가능한 객체(accessible object)는 MSAA의 핵심 인터페이스이며, IAccessible COM 인터페이스와 정수형 ChildId로 표현된다. 이는 애플리케이션이 UI의 구조를 나타내는 트리 구조를 노출할 수 있게 한다. 이 트리의 각 요소는 해당 UI 요소를 조작할 수 있게 하는 일련의 속성과 메서드를 노출한다. MSAA 클라이언트는 표준 API를 통해 프로그래밍 방식의 UI 정보에 접근할 수 있다.
역할, 이름, 값, 상태
[편집]MSAA는 프로그램의 요소에 대한 작은 정보 덩어리를 보조과학기술(AT) 객체에 전송하여 정보를 전달한다. 사용자가 애플리케이션과 상호작용할 수 있도록 보조과학기술이 의존하는 네 가지 중요한 정보는 요소의 역할(role), 이름(name), 값(value), 상태(state)이다.
- 역할(Role): 보조과학기술을 통해 사용자에게 해당 컨트롤이 버튼인지 표인지 등 어떤 유형의 객체인지 전달한다. 이를 위한 IAccessible 메서드는 get_accRole이다.
- 이름(Name): 다음 페이지로 이동하는 버튼의 '다음'이나 입력 상자의 '이름'과 같이 요소에 대한 레이블을 제공한다. 이를 위한 IAccessible 메서드는 get_accName이다.
- 값(Value): 슬라이더 바의 수치나 편집 가능한 텍스트 상자의 내용과 같이 지정된 객체의 값을 제공한다. 모든 객체가 값을 가지는 것은 아니다. 이를 위한 IAccessible 메서드는 get_accValue이다.
- 상태(State): 체크박스의 체크 여부와 같이 컨트롤의 현재 조건을 식별한다. 상태는 컨트롤이 선택될 수 있는지, 포커스를 받을 수 있는지, 또는 다른 유형의 변경 가능한 기능이 있는지 알려준다. 이를 위한 IAccessible 메서드는 get_accState이다.
마이크로소프트는 컨트롤과 그 기능에 대한 전체 목록을 제공한다.[3]
역할
[편집]역할 정보는 개발자가 상호작용하려는 UI 컨트롤의 유형을 기반으로 한다. 예를 들어, 개발자가 클릭 가능한 버튼을 구현하는 경우 구현할 역할로 Pushbutton을 선택한다. 다음 표는 MSAA 역할과 관련 설명의 예시 목록을 보여준다.
| 역할 | 설명 |
|---|---|
| ROLE_SYSTEM_APPLICATION | 객체가 애플리케이션의 주 창을 나타냄. |
| ROLE_SYSTEM_BUTTONMENU | 객체가 메뉴를 드롭다운하는 버튼을 나타냄. |
| ROLE_SYSTEM_CARET | 객체가 시스템 캐럿(caret)을 나타냄. |
| ROLE_SYSTEM_DIALOG | 객체가 대화 상자 또는 메시지 박스를 나타냄. |
| ROLE_SYSTEM_DOCUMENT | 객체가 문서 창을 나타냄. 문서 창은 항상 애플리케이션 창 내에 포함됨. 이 역할은 다중 문서 인터페이스(MDI) 창에만 적용되며 MDI 제목 표시줄을 포함하는 객체를 가리킴. |
| ROLE_SYSTEM_GRAPHIC | 객체가 그림을 나타냄. |
| ROLE_SYSTEM_LIST | 객체가 리스트 박스를 나타내며 사용자가 하나 이상의 항목을 선택할 수 있게 함. |
| ROLE_SYSTEM_MENUBAR | 객체가 사용자가 메뉴를 선택하는 메뉴 표시줄(창의 제목 표시줄 아래 위치)을 나타냄. |
| ROLE_SYSTEM_PROGRESSBAR | 객체가 진행 표시줄을 나타내며, 진행 중인 작업의 완료 백분율을 동적으로 보여줌. 이 컨트롤은 사용자 입력을 받지 않음. |
| ROLE_SYSTEM_PUSHBUTTON | 객체가 푸시 버튼 컨트롤을 나타냄. |
| ROLE_SYSTEM_RADIOBUTTON | 객체가 라디오 버튼이라고도 불리는 옵션 버튼을 나타냄. 상호 배타적인 옵션 그룹 중 하나임. 이 속성을 가진 단일 부모를 공유하는 모든 객체는 단일 상호 배타적 그룹의 일부로 간주됨. 별도의 그룹으로 나누려면 ROLE_SYSTEM_GROUPING 객체를 사용함. |
| ROLE_SYSTEM_SCROLLBAR | 객체가 세로 또는 가로 스크롤 바를 나타내며, 클라이언트 영역의 일부이거나 컨트롤에서 사용됨. |
| ROLE_SYSTEM_TITLEBAR | 객체가 창의 제목 표시줄 또는 캡션 표시줄을 나타냄. |
| ROLE_SYSTEM_TOOLBAR | 객체가 자주 사용되는 기능에 쉽게 접근할 수 있도록 컨트롤들을 그룹화한 도구 모음을 나타냄. |
| ROLE_SYSTEM_WINDOW | 객체가 창 프레임을 나타내며 제목 표시줄, 클라이언트 및 창에 포함된 다른 자식 객체들을 포함함. MSAA에서 이 창 객체는 종종 윈도우의 Hwnd 객체와 동일함. |
이름
[편집]애플리케이션 요소의 이름은 개발자가 코드에서 할당한다. 아이콘, 메뉴, 체크박스, 콤보 박스 및 기타 컨트롤과 같은 많은 객체에는 사용자에게 표시되는 레이블이 있다. 컨트롤(예: 버튼)에서 사용자에게 표시되는 모든 레이블은 객체의 이름 속성의 기본값이 된다. 객체의 이름이 사용자에게 의미가 있고 컨트롤을 적절하게 설명하는지 확인해야 한다. 이름 속성에는 버튼이나 목록과 같은 컨트롤 역할이나 유형 정보가 포함되어서는 안 된다. 그렇지 않으면 역할 속성(MSAA API의 GetRoleText 함수에서 가져옴)의 텍스트와 충돌하게 된다.
값
[편집]값(Value)은 개발자가 객체의 정보를 문자열 형태로 반환하고자 할 때 사용된다. 백분율, 정수, 텍스트 또는 시각적 정보가 포함된 객체에 대해 값이 반환될 수 있다. 예를 들어, 스크롤 바 및 트랙바 접근 가능 객체에서 반환된 속성값은 문자열로 백분율을 나타낼 수 있다.
모든 객체에 값이 할당되는 것은 아니다.
상태
[편집]상태(State) 속성은 특정 시점에서의 객체 상태를 설명한다. 마이크로소프트 액티브 접근성은 oleacc.h에 정의된 객체 상태 상수를 제공하며, 이를 조합하여 객체의 상태를 식별한다. 미리 정의된 상태 값이 반환되면 클라이언트는 GetStateText를 사용하여 상태를 설명하는 지역화된 문자열을 가져올 수 있다. 모든 객체는 상태 속성을 지원한다.
과제 및 한계
[편집]마이크로소프트는 윈도우 95 출시 도중과 그 이후에 액티브 접근성 객체 모델을 설계했다. 이 모델은 역할을 기반으로 하며, 각 역할은 사용자 인터페이스 요소의 유형을 나타낸다. 이러한 역할은 당시 흔히 사용되던 사용자 인터페이스 요소로 제한되어 있다. 예를 들어, 여러 UI 요소를 하나로 결합한 분할 버튼(split button)을 보조과학기술이 처리하는 데 도움이 되는 텍스트 객체 모델이 없다. MSAA는 마크업 언어나 서식 있는 텍스트 포맷(RTF) 문서와 같은 스타일이 적용된 텍스트를 표현하려고 시도하지 않는다. MSAA에는 여전히 값(Value) 속성이 있지만, 여기에는 스타일이 없는 단순한 텍스트만 담을 수 있다. 당시에는 서식 있는 텍스트의 속성을 표현하는 데 마이크로소프트 텍스트 객체 모델(MS-TOM)이 더 적절하다고 여겨졌다. 그러나 MS-TOM의 복잡성과 마이크로소프트 외부에서의 제한적인 초기 채택으로 인해 서식 있는 텍스트에 대한 접근이 저해되었다.
또 다른 한계는 객체 모델을 탐색하는 것과 관련이 있다. MSAA는 윈도우의 창 관리자(Window Manager)와 유사한 방식으로 UI를 접근 가능한 객체들의 계층 구조로 표현한다. 클라이언트는 IAccessible::accNavigate 메서드를 사용하여 하나의 접근 가능한 객체에서 다른 객체로 이동한다. 그러나 서버들은 accNavigate를 예측 불가능한 방식으로 구현하거나 아예 구현하지 않는 경우가 많았다. 하지만 클라이언트는 모든 MSAA 서버에 대해 모든 접근 방식을 처리할 수 있어야 한다. 이러한 모호성은 클라이언트 구현자에게 추가적인 작업을 의미하며, 그 복잡성은 서버 구현에 따라 문제를 일으킬 수 있다.
COM 기반의 이진 인터페이스인 IAccessible은 불변(immutable)이므로 다른 인터페이스를 만들지 않고는 변경할 수 없다. 그 결과 기존의 IAccessible 기반 객체 모델을 통해서는 새로운 역할, 동작 또는 속성을 노출할 수 없다. 기본 UI 요소에 대한 공통된 정보 집합을 의도했지만, 새로운 상호작용 방식에 대한 정보를 포함하도록 확장하기는 어렵다는 것이 밝혀졌다.
가용성
[편집]MSAA는 처음에 윈도우 95의 애드온으로 제공되었다. 이후 모든 윈도우 버전에 통합되었다.
관련 기술
[편집]마이크로소프트 UI 자동화(UIA): MSAA의 후계자는 사용자 인터페이스 자동화(UIA)이다. 그러나 여전히 MSAA 기반 애플리케이션이 존재하기 때문에, UI 자동화와 MSAA 애플리케이션 간의 통신을 허용하기 위해 브리지가 사용된다. 두 API 간에 정보를 공유할 수 있도록 MSAA-to-UI 자동화 프록시와 UI 자동화-to-MSAA 브리지가 개발되었다. 전자는 MSAA 정보를 소비하여 UI 자동화 클라이언트 API를 통해 사용할 수 있게 하는 구성 요소이다. 후자는 MSAA를 사용하는 클라이언트 애플리케이션이 UI 자동화를 구현한 애플리케이션에 액세스할 수 있도록 한다.
접근 가능한 리치 인터넷 애플리케이션(WAI-ARIA): ARIA 속성에서 MSAA 속성으로의 일반적인 매핑이 존재한다.[4]
IAccessible2: MSAA는 IAccessible2의 뿌리를 제공한다. IAccessible2는 MSAA에서 이루어진 작업을 활용하고 추가적인 기능을 더했다.
윈도우 자동화 API(Windows Automation API): 윈도우 7부터 마이크로소프트는 자사의 접근성 기술을 윈도우 자동화 API라는 프레임워크 아래 패키징하고 있다. MSAA는 이 프레임워크의 일부가 된다.
마이크로소프트 액티브 접근성의 구현
[편집]액티브 접근성은 윈도우 95 이후의 모든 윈도우 버전에서 개발자가 사용할 수 있다. 처음 도입된 이후 MSAA는 인터넷 익스플로러, 모질라 파이어폭스, 마이크로소프트 오피스 등을 포함한 많은 비즈니스 및 소비자용 애플리케이션에서 UI에 대한 프로그래밍 방식의 접근 지원을 추가하는 방법으로 사용되어 왔다. 스크린 리더, 화면 확대기, 보충 대체 의사소통(AAC) 장치와 같은 접근성 보조 도구 외에도, 이 기술은 QuickTest Pro, Functional Tester, SilkTest와 같은 테스트 자동화 소프트웨어에서도 사용되어 왔다.
애플리케이션 및 보조과학기술 제품에서의 더 많은 MSAA 구현 사례는 마이크로소프트 접근성 사이트나 보조과학기술 정보 웹사이트에서 검색하여 확인할 수 있다.[5][6][7]
각주
[편집]- ↑ NFB-RD Mailing List February 1996 보관됨 2016-03-03 - 웨이백 머신, "OLAE [sic] accessibility"
- ↑ Supported Platforms: Active Accessibility - MSDN
- ↑ Microsoft Developer Network (MSDN): https://msdn.microsoft.com/en-us/library/bb773173(VS.85).aspx Windows Controls.
- ↑ Microsoft Developer Network (MSDN): UI Automation Specification
- ↑ Microsoft: Accessibility in Microsoft Products.
- ↑ Microsoft: History of Microsoft's Commitment to Accessibility.
- ↑ Trace Center: Assistive Technology Information Links 보관됨 2012-07-23 - archive.today.
외부 링크
[편집]- 마이크로소프트 액티브 접근성
- 공식 웹사이트 - 마이크로소프트의 접근성 (영문)