<img alt="Alfa" src="https://raw.githubusercontent.com/Siteimprove/alfa/HEAD/media/logo.svg" height="40">
:wheelchair: 대규모로 신뢰할 수 있는 접근성 준수 테스트를 수행하기 위한 오픈 및 표준 기반 도구 모음
Alfa는 오픈 및 표준 기반의 접근성 준수 테스트 엔진입니다. HTML, CSS, JavaScript를 사용하여 구축된 웹사이트가 웹 콘텐츠 접근성 지침 (WCAG)와 같은 접근성 표준을 충족하는지 테스트하는 데 사용됩니다. Alfa는 Siteimprove의 독점적인 접근성 준수 테스트 엔진의 가장 좋은 부분을 추출하여, 이전에 Alfa가 대체했던 것을 기반으로 오픈 접근성 준수 테스트 (ACT) 규칙 형식 위에 구현한 결과물입니다. 또한 Siteimprove 인프라에 의존하지 않고도 고급 규칙을 구현하고 실행할 수 있도록 하는 여러 개선 사항들을 포함하고 있습니다.
목차
목표
-
Alfa는 높은 F<sub>1</sub> 점수를 달성하는 것을 목표로, 오탐(false positives)과 미탐(false negatives) 사이의 균형을 맞추고자 합니다. 따라서 오탐이 발생했을 때, 오탐을 수정하는 것만큼 잠재적인 미탐을 방지하는 것이 중요합니다.
-
Alfa는 테스트 결과가 어떻게 도출되었는지에 대해 완전한 투명성을 유지하는 데 전념하고 있습니다. 따라서 테스트 결과에 영향을 줄 수 있는 모든 코드는 항상 Alfa 자체 내에 존재하며 제3자에게 속하지 않습니다. 하지만 이것이 Alfa가 제3자 종속성(third-party dependencies)에 의존하지 않는다는 의미는 아니며, 단지 제3자 종속성이 사용될 수 있는 범위에 제한이 있다는 것을 의미할 뿐입니다.
-
Alfa는 다양한 배경을 가진 사람들이 Alfa의 핵심 기능을 기반으로 구축할 수 있는 활발한 생태계를 조성하는 것을 목표로 합니다. 이를 위해 고품질 문서화가 성공에 매우 중요합니다. Alfa 내의 여러 서브시스템 중 어느 하나를 가져와 사용하더라도 간단한 경험이어야 하며, 각 서브시스템은 자신의 목적과 구조를 명확히 설명해야 합니다. 이 목표는 현재 아직 달성되지 않았으며 우선순위로 지정될 예정입니다.
사용법 (Usage)
Alfa는 npm 패키지를 통해 배포되며, 좋아하는 npm-호환 패키지 관리자를 사용하여 개별 패키지 세트로 설치할 수 있습니다:
$ npm install @siteimprove/alfa-<package-name>
이 패키지들은 단독으로는 거의 기능을 수행하지 못하지만, 함께 사용될 경우 콘텐츠 개발 및 게시 워크플로우의 모든 단계에 걸쳐 접근성 준수 테스트를 수행하기 위한 전체 도구 세트를 제공합니다. Alfa를 쉽게 시작하는 방법을 찾고 있다면 통합(integrations) 섹션을 확인해 보세요. 이미 준비된 솔루션이 있을 수도 있습니다!
개괄적으로, Alfa는 접근성 준수 테스트 (Accessibility Conformance Testing, ACT) 규칙 형식에 명시된 규칙 구현을 소비하고, 평가 및 보고 언어 (Evaluation and Report Language, EARL) 스키마로 인코딩된 감사 결과를 JSON-LD 형태로 생성합니다.
예시 (Examples)
사용 사례의 선별된 목록은 Alfa examples 저장소에서 찾을 수 있습니다.
다음은 기본적인 Alfa 사용법에 대한 개요입니다. 참고로, 이 코드는 실행되기 전에 JavaScript 코드로 빌드해야 하는 TypeScript 스니펫입니다:
당신이 Alfa를 처음 사용하는 상호작용은 아마도 다음과 유사할 것입니다:
import { Audit, Rule } from "@siteimprove/alfa-act";
const input: I;
...
Alfa는 규칙(rules) 측면에서 완전히 플러그인 방식이며 구현 형식만을 규정합니다. 따라서 규칙과 관련하여 설정할 것이 없습니다. 실행하려는 규칙을 전달하기만 하면 해당 규칙에 대한 결과가 제공됩니다. 시작하는 데 도움이 되도록, Alfa는 웹 콘텐츠 접근성 지침 (WCAG)을 기반으로 한 견고한 규칙 세트를 포함하고 있습니다. 이 규칙들의 자세한 내용은 Alfa hub에서 확인할 수 있습니다. 사용 방법은 다음과 같습니다:
import { Audit } from "@siteimprove/alfa-act";
import rules from "@siteimprove/alfa-rules";
...
우리가 빠진 마지막 부분은 입력(input)입니다. 감사(audit)를 실행할 때 어떤 특정 입력을 제공해야 하는지는 해당 감사에 포함된 규칙에 따라 달라지며, 각 규칙은 필요한 입력을 명시합니다. 기본 WCAG 규칙 세트의 경우, 입력은 웹 페이지가 됩니다. 시작하는 데 도움이 되도록, Alfa는 URL이 주어지면 해당 페이지의 표현을 가져와 기본 규칙의 입력으로 사용할 수 있는 스크레이퍼(scraper)를 포함하고 있습니다:
import { Audit } from "@siteimprove/alfa-act";
import { Scraper } from "@siteimprove/alfa-scraper";
...
사이트 전체의 여러 페이지를 감사해야 하지만, 각 페이지의 URL을 미리 알지 못하는 경우에도 Alfa는 스크레이퍼를 기반으로 연결된 페이지를 발견하고 스크랩하는 크롤러(crawler)도 포함하고 있습니다:
import { Audit } from "@siteimprove/alfa-act";
import { Frontier } from "@siteimprove/alfa-frontier";
import { Crawler } from "@siteimprove/alfa-crawler";
...
스크레이퍼와 크롤러 모두 Alfa integrations 저장소에 있으며, npmjs 레지스트리에서도 설치할 수 있다는 점에 유의하십시오.
더 복잡한 사용 사례의 경우, Alfa examples 리포지토리를 확인해 주세요. 이 곳에서는 Alfa를 사용하여 구성 요소 또는 전체 웹 페이지를 테스트하는 방법; 적합성 수준(conformance level), WCAG 버전 등을 기반으로 결과를 필터링하는 방법; 감사(audit) 실행 전에 페이지와 상호작용하는 방법(예: 메뉴 열기); Alfa가 요청하는 질문에 답변하는 방법(cantTell 결과 처리); 또는 기본 규칙 세트에 사용자 정의 규칙을 추가하는 방법을 보여줍니다.
커맨드 라인 인터페이스 (Command Line Interface)
Alfa는 커맨드 라인 인터페이스(CLI)와 함께 제공되어 단일 페이지를 감사하기 쉽습니다. CLI는 Alfa integrations 리포지토리에 있습니다.
통합 (Integrations)
Alfa는 다양한 도구에 사용할 수 있는 여러 기본 통합 기능을 제공하여 접근성 적합성 테스트를 개발 워크플로우의 일부로 쉽게 통합할 수 있게 합니다. 추가적인 통합 기능에 대한 제안이 있으시면 [이슈(issue)를 열어주세요]! 저희는 Alfa가 유용하게 사용될 수 있는 새로운 장소를 항상 찾고 있습니다. 통합 기능은 Alfa integrations 리포지토리에 있습니다.
:warning: 대부분의 통합 기능은 여전히 실험적이며 변경될 수 있습니다.
요구 사항 (Requirements)
Alfa는 최신 버전의 Node.js, Chrome, Firefox, Safari, Edge를 포함하되 이에 국한되지 않는 모든 ECMAScript 2022 호환 JavaScript 환경에서 실행됩니다. 소스 코드를 수정하여 이전 환경을 대상으로 Alfa를 빌드하는 것이 가능해야 하지만, Alfa가 최신 버전의 ECMAScript에서 도입된 데이터 구조에 의존하기 때문에 이를 명시적으로 지원하지는 않습니다.
빌드 (Building)
Alfa를 빌드하려면 Yarn 패키지 관리자 외에도 최근 버전(>= 20)의 Node.js가 필요합니다. Node.js와 Yarn을 설치한 후, Alfa 개발 의존성을 설치하세요:
작업을 마친 후에는 소스 파일의 변경 사항을 감지하고 변경될 때마다 연결된 빌드 단계를 실행하는 워처(watcher)를 시작할 수 있습니다:
참고로, 워처가 시작되면 프로젝트가 이전에 빌드되지 않은 경우 시간이 다소 걸릴 수 있지만 빌드를 수행합니다.
리포지토리에서 새로운 코드가 가져와질 때 의존성 및 코드 변경 사항으로 인해 설치를 다시 실행하거나, 코드가 변경된 경우에만 빌드를 실행해야 할 수도 있습니다:
테스트를 실행하고 모든 것이 작동하는지 확인하려면 다음을 사용하십시오:
특정 패키지에서 작업할 때는 이 테스트만 실행할 수 있습니다:
$ yarn test packages/alfa-<패키지-이름>
실험 (Experimenting)
특별한 scratches 디렉토리는 _스크래치 파일(scratch files)_을 위해 예약되어 있으며, 이는 작은 코드 예제나 더 큰 실험을 빠르게 실행하는 데 유용합니다. 이 디렉토리에는 필요한 프로젝트 참조 및 컴파일러 옵션을 설정하는 TypeScript 구성이 준비되어 있습니다. TypeScript 구성을 제외한 디렉토리 내의 모든 파일은 버전 관리 시스템에서 무시되므로, 어떤 파일을 추가해도 버전 관리 시스템에 커밋될 위험이 없습니다.
새로운 스크래치 파일을 만들려면 scratches 디렉토리 어디든 scratches/foo.ts와 같은 새로운 TypeScript 파일을 추가하고 다음을 수행하십시오:
그런 다음 지원되는 JavaScript 런타임(예: Node.js)에서 스크래치 파일의 빌드된 출력을 실행할 수 있습니다:
스크래치 파일은 이전 섹션에 따라 Alfa의 나머지 부분과 함께 빌드됩니다. 브랜치를 전환할 때 다른 스크래치 파일이 컴파일되지 않을 수 있습니다. 스크래치 파일을 제외하고 오직 Alfa 패키지만 빌드하려면 다음을 수행할 수 있습니다:
스크래치즈(scratches) 설정에는 @siteimprove/alfa-dom의 JSX 파서가 포함됩니다. 따라서 .tsx 파일을 생성하고 JSX 구문을 직접 사용하여 Alfa DOM 객체를 만들 수 있습니다.
아키텍처 (Architecture)
핵심적으로, Alfa는 Document Object Model (DOM)과 CSS Object Model (CSSOM) 인터페이스의 일부를 반영하는 트리 구조를 기반으로 구축되었습니다. 이 트리 구조는 HTML 문서와 연결된 CSS 스타일 시트로부터 정적으로 생성될 수도 있고, JavaScript 실행 기능을 제공하면서 브라우저 내부에서 추출될 수도 있습니다. 요소 쿼리나 스타일 계산과 같이 브라우저가 일반적으로 제공하는 다른 모든 것들 역시 Alfa가 해당 사양에 따라 구현합니다.
스타일 시스템 및 접근성 트리(accessibility tree)와 같은 브라우저 측면을 Alfa 내부에 직접 구현함으로써, 우리는 그렇지 않았다면 불가능했을 몇 가지 작업을 수행할 수 있는 능력을 얻게 됩니다. 아마도 가장 혁신적인 차이점은 CSS 속성의 계산일 것입니다. 여기서 Alfa는 선언된 CSS 속성을 캐스케이드(cascade), 상속(inheritance), 그리고 절대화(absolutisation)를 거쳐 추적할 수 있습니다.
코드 수준에서, Alfa는 여러 패키지로 구성된 모놀리식 리포지토리로 구조화되어 있으며, 각 패키지는 자체적인 책임 영역을 가집니다. Alfa의 전반적인 아키텍처에 대한 자세한 정보는 아키텍처 문서에서 찾을 수 있습니다. 또한, Alfa가 어떻게 탄생하게 되었는지 전체 그림을 파악하고 싶다면 아키텍처 결정 보고서(architecture decision reports)도 작성하고 유지 관리합니다.
가이드 (Guides)
Alfa를 사용하여 개발하는 방법에 대한 안내 목록은 가이드에서 찾을 수 있습니다.
펀딩 (Funding)
[<img src=
Alfa는 유럽연합(European Union)의 Horizon 2020 연구 혁신 프로그램의 지원을 받아 진행된 프로젝트의 일부입니다(grant agreement Nº780057). Alfa가 가능하도록 간접적으로 기여해주신 유럽 위원회(European Commission)와 모든 유럽 시민분들께 감사의 말씀을 전합니다. 여러분 최고예요! :raised_hands:
라이선스
Copyright © Siteimprove A/S. MIT 라이선스의 조건에 따라 공개되었습니다.