아티클

NVDA 추가 기능 개발 가이드라인 1부

2018-07-27 10:33:42

 안녕하세요. 엔비전스입니다.

이번 글부터 NVDA 추가 기능 개발에 대해 살펴보고자 합니다.
추가 기능은 특정 프로그램의 없는 기능을 확장하거나, 기존에 존재하는 기능을 개선하는 데 사용될 수 있습니다. NVDA의 추가 기능은, NVDA의 기능을 확장하거나 특정 프로그램의 접근성을 향상시키거나 또는 새로운 점자 디스플레이 및 음성 엔진을 추가하는 데 쓰이는 패키지입니다.
이 시리즈는 NVDA의 추가 기능 제작을 통해 개발자가 자신의 프로그램 또는 기업 내 프로그램의 접근성을 향상시키는 데 도움을 드리기 위해 기획되었으며, 1부에서는 NVDA의 추가 기능을 제작하기 전 알아야 할 기본적인 내용에 대해 살펴보겠습니다.

추가 기능이란?

추가 기능은 특정 응용 프로그램의 기능을 보완하거나, 해당 프로그램에 없는 새로운 기능을 추가하여 프로그램의 기능을 향상시키는 작은 프로그램입니다. Firefox나 Chrome과 같은 브라우저는 추가 기능을 통해 브라우저의 모양을 변경하거나, 동작을 추가하거나 수정합니다.

스크린 리더에서의 추가 기능의 역할

스크린 리더에서의 추가 기능의 역할 또한 앞에서 설명한 추가 기능의 역할과 많은 점을 공유합니다. 스크린 리더에서의 추가 기능의 역할은 다음과 같은 것들이 될 수 있습니다.
  • 스크린 리더 사용자는 웹 페이지의 효율적인 탐색을 위해 가상 커서 기능을 사용합니다. 추가 기능을 통해 가상 커서에서 사용되는 여러 단축키 또는 동작 방법을 변경하여 스크린 리더 사용자가 좀 더 편리하게 탐색할 수 있도록 기능을 개선할 수 있습니다.
  • 하나의 단축키로 자주 사용하는 프로그램을 빠르게 실행하거나, 자주 입력하는 텍스트의 입력하는 시간을 줄이는 것과 같은 반복적인 작업을 추가 기능을 통해 개선할 수 있습니다.
  • 새로운 점자 디스플레이 또는 음성 엔진을 추가 기능을 통해 확장하여 스크린 리더에서 사용할 수 있도록 개선할 수 있습니다.

운영체제 접근성 API

스크린 리더의 추가 기능을 개발하기 전, 운영체제에서 지원하는 접근성 API에 대해 간단히 살펴보겠습니다.

보조 기술(스크린 리더 등)은 운영체제의 접근성 API를 통해 애플리케이션의 체크박스, 라디오 버튼, 웹페이지에서의 링크, 버튼과 같은 UI 요소와 상호작용합니다. 접근성 API를 통해 UI의 컨트롤의 이름, 역할, 상태, 속성 등의 정보를 운영체제와 보조 기술(스크린리더) 사이에서 통신 함으로써 최종 사용자에게 위에 정보를 알려줍니다. 접근성 API가 보조기술 사용자에게 전달하는 정보 중 대표적인 것들을 몇 가지 자세히 살펴보겠습니다.
  • 역할: (버튼, 편집 창, 라디오 버튼과 같이 보조기술 사용자가 어떤 UI 요소인지를 인식할 수 있도록 합니다.
  • 이름: (<확인>, <취소>)와 같은 UI 요소의 이름입니다. 웹페이지에 제공된 편집창에 레이블이 대표적인 예라 할 수 있습니다.
  • 상태: (선택됨, 선택 안 됨)과 같은 각 UI 요소의 상태 정보입니다. 

예를 들어, <접근성 체크 상자>로 이름, 역할, 상태를 설명하면 다음과 같습니다.

  • 체크 상자: 요소의 역할입니다. 스크린 리더 사용자는 이 요소가 체크 상자임을 알 수 있습니다.
  • 선택됨: 현재 이 체크 상자는 선택되었음을 알리는 상태 정보입니다. 스크린 리더 사용자는 이 요소가 체크 상자이고, 이 체크 상자가 선택되었음을 알 수 있습니다.
  • 접근성: 요소의 이름입니다. 스크린 리더 사용자는 이 요소가 체크 상자이고 선택되었으며, 체크 상자가 <접근성>이란 이름을 가졌음을 알 수 있습니다.
운영체제별로 사용되는 접근성 API가 다를 수 있지만, 접근성 API가 수행하는 공통적인 역할은 동일하다 할 수 있습니다. 이 아티클에서는 WINDOWS 운영체제에서 사용되는 API에 대해 간단히 살펴보겠습니다. 
  • MSAA: 마이크로소프트가 만든 API이며, 1997년에 WINDOWS 95를 위한 접근성 API로 도입되었습니다. 현재는 UIA(UI Automation)이 사용되고 있습니다. WINDOWS에서 기본으로 제공하는 메모장과 같은 데스크톱 애플리케이션의 접근성을 개선하는 데 사용됩니다.
  • UIA(UIA Automation): 마이크로소프트에서 MSAA의 후속 버전으로 2005년에 발표한 접근성 API이며, 여러 장치에서 범용적으로 실행할 수 있는 UWP 애플리케이션 및 MS 오피스와 같은 애플리케이션의 접근성을 개선하는 데 사용됩니다.
  • IAccessible2: Linux Foundation에서 관리되고 있는 IAccessible2는 MSAA에 대한 Microsoft의 초기 작업을 보완하는 새로운 접근성 API입니다. 대표적으로 Mozilla Firefox, Chrome 등의 브라우저의 보조기술에 접근성을 개선하는 데 사용됩니다.

다른 스크린 리더의 추가 기능과 NVDA의 추가 기능의 차이점

여러 스크린 리더는 추가 기능을 지원합니다. 스크린 리더 별로 추가 기능 제작을 위한 풍부한 기능을 제공하고 있지만, NVDA와 이러한 다른 스크린 리더의 추가 기능의 대표적인 차이점은, NVDA의 추가 기능은 Python 언어로 작성할 수 있어 NVDA에서 기본으로 제공하는 추가 기능을 위한 기능 외에도 Python의 라이브러리를 활용하여 추가 기능을 작성할 수 있습니다.

NVDA에서 지원하는 추가 기능의 유형

NVDA는 엑셀, 인터넷 익스플로러와 같은 특정 프로그램에서만 동작하거나, NVDA가 시작될 때부터 종료될 때까지 특정 응용 프로그램에 국한되지 않고 작동하는 다양한 상황에 맞는 추가 기능을 제작할 수 있습니다. 이는 다른 스크린 리더 또한 마찬가집니다. NVDA는 다음과 같은 추가 기능을 지원합니다.
  • Global plugin(글로벌 플러그인): 스크린 리더 사용자는 웹페이지, MS워드에서의 문서 등 다양한 상황에서 많은 이미지와 마주칩니다. 최근 인공지능 기술의 발달로 많은 기업에서 이미지 인식을 지원하는 솔루션을 선보였습니다. 이러한 솔루션들과 연계하여 NVDA가 특정 프로그램과 상관없이 어디에서나 이미지를 만났을 때 이미지 인식 기능을 사용할 수 있도록 하는 것과 같이 상황에 국한되지 않고 동작하는 추가 기능을 제작하려 할 때 글로벌 플러그인으로 제작할 수 있습니다.
  • App module(앱 모듈): 앱 모듈은 프로그램이 실행되는 동안에만 실행됩니다. NVDA가 실행 중인 응용 프로그램의 창과 편집 창, 체크박스, 라디오 버튼과 같은 컨트롤과의 상호작용하는 방식을 변경합니다. 메모장과 같은 특정 프로그램의 접근성을 개선하고자 할 때 앱 모듈을 제작할 수 있습니다.
  • 드라이버 : 새로운 음성 엔진이나 점자 디스플레이를 NVDA에서 사용할 수 있도록 하려 할 경우 드라이버 추가 기능을 작성할 수 있습니다. 이 아티클에서는 드라이버 추가 기능 제작에 대해 다루지 않습니다.
NVDA의 추가 기능이란, 앱 모듈, 글로벌 플러그인, 드라이버와 같은 요소들이 모여 하나의 추가 기능으로 완성됩니다.

NVDA 추가 기능 설치

NVDA 추가 기능 패키지는 파일 확장 명이 .nvda-addon인 zip 파일입니다. NVDA 2012.2 이상에서 추가 기능 관리자를 통해 추가 기능을 설치할 수 있습니다. 또는 NVDA 2012.3 이상을 사용하는 경우 WINDOWS 탐색기와 같은 파일 관리자를 통해 설치할 수 있습니다. 추가 기능을 설치하는 자세한 방법은 다음과 같습니다:
  1. NVDA(기본적으로 Insert 키임)+N 키를 눌러 NVDA 메뉴를 엽니다. 또는, 시스템 트레이에서 NVDA 아이콘을 클릭합니다.
  2. 방향키를 사용하여 도구 (T) 메뉴를 확장한 다음, 추가 기능 관리 메뉴까지 이동한 다음 Enter 키를 눌러 실행합니다. 추가 기능 관리자 화면이 표시됩니다.
  3. Tab 키로 설치 (I) 버튼까지 이동한 다음, Space 키를 눌러 실행하여 <추가 기능 설치 파일 선택> 대화상자를 엽니다.
  4. 추가 기능 파일(.nvda-addon)가 있는 폴더로 이동한 다음, 추가 기능 파일에 초점을 이동한 후 열기 (O) 버튼을 눌러 추가 기능 설치를 진행합니다.
WINDOWS 탐색기와 같은 파일 관리자에서 추가 기능을 설치하려면, 추가 기능 파일이 있는 폴더로 이동한 다음 Enter 키 또는 파일을 더블 클릭하여 추가 기능 설치를 진행할 수 있습니다.

NVDA 추가 기능 개발을 위한 시스템 환경 설정

NVDA 추가 기능을 개발하려면, 시스템에 Python과 같은 다양한 프로그램을 설치해야 합니다. 본 시리즈 전반에서는 편의를 위해  NVDA 사용자 환경 폴더 내 globalPlugin, appModules 폴더에 작업물을 저장합니다. NVDA 추가 기능을 위해 필수로 설치해야 하는 프로그램은 다음과 같습니다:
  • NVDA 설치: 추가 기능 제작을 위한 NVDA를 http://nvaccess.org 사이트에서 내려받아 설치합니다. 기존에 NVDA가 설치되어 있다면, 다양한 방법으로 추가 기능 제작을 위한 테스트 환경을 구성할 수도 있습니다.
  • 추가 기능 제작을 위한 편집기 설치: NVDA의 추가 기능을 제작하려면 추가 기능 파일을 편집하기 위한 편집기를 필수로 설치해야 합니다. 유니코드를 지원하는 편집기(대표적으로 Notepad++) 등을 설치해야 합니다.
  • 추가 기능을 위한 폴더 만들기: NVDA의 새로운 추가 기능을 만들기 위해서는 추가 기능을 위한 폴더를 만들어야 합니다. 추가 기능 폴더를 만드는 방법은 다음 섹션에서 설명합니다.

추가 기능이 저장된 폴더 열기

추가 기능을 작성하기 위해서는 추가 기능이 설치된 폴더를 열어야 합니다. NVDA는 NVDA 사용자 환경 설정이 저장된 폴더에 추가 기능 파일이 저장됩니다. 추가 기능이 저장되는 폴더는 다음의 방법을 통해 열 수 있습니다:
  1. 시작 키를 누른 다음 <NVDA>를 입력하여 <NVDA 사용자 환경 폴더 탐색> 항목을 찾은 다음 클릭합니다. NVDA 환경 설정이 저장된 폴더가 열립니다.
  2. addons 폴더를 클릭하여 엽니다. NVDA에 설치한 추가 기능 목록이 표시됩니다(아티클 전반에서는 add-ons 폴더가 아닌 appModules, globalPlugins 폴더에 작업물을 저장합니다).
  3. addons 폴더에 추가 기능을 위한 폴더를 만듭니다. 추가 기능 폴더의 이름은 영어로 지정하는 것이 좋습니다.

추가 기능 폴더의 구조

추가 기능은 다음과 같은 파일 및 폴더로 구성됩니다:
  • manifest.ini: 이 파일에는 추가 기능 제작자, 추가 기능 관련 문서 등의 정보가 포함됩니다. 이 파일은 필수로 만들어야 합니다.
  • Doc 폴더: 이 폴더에는 추가 기능과 관련된 문서가 저장됩니다.
  • 모듈 폴더: 필요에 따라 appModules, globalPlugins, synthDrivers, brailleDisplays과 같이 여러 모듈을 하나의 추가 기능에 포함할 수 있습니다. 각 모듈 폴더에는 *.py(Python에서 사용하는 파일 확장자), 필요에 따라 *.dll, 사운드 파일(*.wav/*.mp3 등) 과 같은 추가적인 파일을 포함할 수 있습니다.
다음 아티클에서는 NVDA 추가 기능의 구성 요소에 대해 살펴보겠습니다.

 

 

댓글 0
댓글을 작성하려면 해주세요.