웹 접근성 준수가 가져오는 프론트엔드 개발의 이점
이번 외대 종강시계 2.0 버전을 만들면서, 신경썼던 것 중 하나가 시맨틱 태그의 사용과 웹 접근성 준수였습니다. 처음 써보는 여러 태그들과 role 속성, WAI-ARIA등을 학습하고, 스크린 리더 디버깅을 병행하면서 프로젝트를 진행했는데요.
그 결과 스크린 리더로 사용 가능한 웹앱을 만들 수 있었고, Lighthouse 기준 접근성 100점을 달성하기도 했습니다. 물론 웹에 쉽게 접근할 수 있는 현재의 제가 보았을 때고, 점수는 점수일 뿐이니 아직도 많이 부족하다고 생각합니다.
이렇게 웹 접근성을 준수하는 마크업을 만들어보면서 제가 그동안 웹 접근성에 대해 오해를 하고 있었다는 생각을 하게 되었고, 예상하지 못했지만 웹 접근성을 준수하면서 개발하면 따라오는 장점들에 대해 알게 되었습니다.
이번 포스팅에서는 웹 접근성의 정확한 정의와 함께, 웹 접근성을 준수하면 취할 수 있는 여러 장점들을 유저 관점, 개발자 관점, 서비스 관점에서 살펴봅니다.
웹 접근성의 본질
Web accessibility means that websites, tools, and technologies are designed and developed so that people with disabilities can use them. - W3C
웹 표준 기구 W3C가 말하는 웹 접근성은 제약을 가진 유저들도 접근하고 사용할 수 있게끔 하는 웹사이트, 도구, 기술입니다. 전 세계에 사는 모든 다양한 유저가, 그들이 가진 불편함과 관계 없이 웹을 사용할 수 있게 하는 것이 웹 접근성의 목표입니다.
웹 접근성의 본질은 유저를 향해 있습니다.
웹 접근성과 관련된 기술 중에 시맨틱 마크업 정도밖에 몰랐었던 저로서는, 그동안 시맨틱 태그를 사용하면 취할 수 있는 장점으로 SEO 최적화와 의미론적인 마크업 작성을 통한 협업 효율 상승을 꼽았었습니다.
그런데 시맨틱 태그를 사용해보고 스크린 리더 디버깅을 해보니, 이제 저정도의 설명은 웹 접근성을 너무 과소평가하는 것이 아닌가 하는 생각이 듭니다. 웹 접근성은 모든 유저가 웹에 접근 가능하게 한다는 큰 비전을 가지고 있습니다.
div
태그와 같이 시맨틱하지 않은 태그들은 스크린리더를 사용하는 전맹, 약시 유저가 아예 웹의 여러 기능들을 사용하지 못하게 할 수도 있습니다. 아래 사진들은 애플의 보이스오버를 이용해 외대 종강시계 앱의 요소들을 읽게 한 것인데요.
button
요소는 버튼이라는 설명을 붙여 읽지만, div
요소는 그렇지 않아 스크린리더 사용자 입장에서는 누를 수 있는 요소임을 인식하지 못합니다.
<img src="이미지 URL" alt="개발자 기술 블로그 바로가기" />
img
요소는 이미지라는 설명을 붙이면서 alt
요소에 명시된 이미지에 대한 설명을 같이 읽는데요. alt
속성이 없으면 이미지의 src
속성을 읽어 스크린리더 사용성을 해칩니다.
이렇게 웹 접근성의 본질과, 웹 접근성이 어떠한 방식으로 유저에게 영향을 미치는지 간단하게 살펴봤습니다. 다음 섹션에서는 웹 접근성이 가져오는 이점들에 대해 살펴보겠습니다.
웹 접근성 준수의 이점들
1. 유저 관점 : 모두를 위한 UX
물론 스크린리더가 웹 접근성 준수의 전부는 아닙니다.
웹 접근성의 목표는 "모든 유저"입니다. 웹 접근성은 전맹, 약시 유저 말고도 일시적인 장애로 웹 접근이 불편한 유저, 색약, 광과민성 발작을 일으킬 수 있는 유저, 또는 제한된 하드웨어만으로 웹에 접근해야 하는 환경에서의 웹 접근도 고려합니다.
웹 접근성은 모든 유저의 UX를 고려하기 때문에, 비교적 쉽게 웹에 접근할 수 있는 유저들도 웹 접근성을 준수한 마크업의 혜택을 볼 수 있습니다.
접근성을 고려해 모든 사용자의 경험을 개선한 실생활의 예시를 들어보자면, 현재 많은 지하철역에 설치되어있는 엘리베이터가 있습니다. 2000년대부터 여러 지하철 역사에 설치되기 시작한 엘리베이터는 장애인 인권운동과 꾸준한 요구의 결과입니다.
하지만 이 엘리베이터는 장애인만 이용할 수 있는 것이 아니라, 거동이 편치 못하신 어르신이나 계단을 올라가기 힘든 상황인 비장애인들도 이용할 수 있는, 모두를 위한 시설이 되었습니다. 접근성에 대한 고려는 이렇게 모든 사람들의 편의를 증진시킵니다.
웹 접근성에서는 가장 대표적인 예시가 키보드 사용성입니다. button
, a
, input
등의 focusable한 요소들은 키보드의 탭 키로 빠르게 접근이 가능합니다.
키보드 사용성 증진은 스크린리더 사용자에게 웹과 상호작용 할 수 있는 요소들을 쉽게 찾을 수 있도록 합니다. 또한 백오피스와 같은 앱에서 빠른 작업이 필요한 유저에게도 충분히 도움이 됩니다. 아래 이미지는 외대 종강시계에서 tab키만을 사용해 focusable한 요소들을 탐색하는 예시입니다.
스크린리더를 켜놓고 접근하면, 다음과 같이 텍스트들을 읽습니다.
이때 여러 focusable 요소들 중 focus가 잡히는 순서, 혹은 focus여부 자체도 tabindex라는 속성을 통해 적절히 수정할 수 있습니다.
focus 요소의 순서는 개발시 일반적으로 고려되는 UX는 아니며, UX의 종류에는 이런 것도 있다는 깨달음을 줍니다. 웹 접근성은 일반적으로 생각되는 UX의 범위를 넓히고, 일반적인 웹 사용자들의 UX뿐 아니라 특수한 웹 사용자들의 UX까지 고려합니다.
그러한 예로 또 들 수 있는 것은 UX 라이팅입니다. 스크린리더는 화면의 텍스트를 읽기 때문에 화면의 텍스트가 해당 요소를 충분히 설명하고 있다면 스크린리더 사용자가 요소의 설명 을 들을 수 있고, 어떤 요소인지 파악할 수 있을 것입니다. 하지만 반대의 경우는 그렇지 못합니다. 단순한 예시를 보여드리겠습니다. 유저 정보를 수정하는 form의 submit 버튼입니다.
<!-- 버튼 요소에 대한 설명을 텍스트가 충분히 제공하지 않습니다. -->
<button type="submit" onClick="{onClickHandler}">수정</button>
<!-- 버튼 요소에 대한 설명을 텍스트가 충분히 제공합니다. -->
<button type="submit" onClick="{onClickHandler}">유저 정보 수정하기</button>
하지만 기획이나 디자인 측면에서 해당 UX 라이팅을 요소를 잘 설명하도록 수정할 수 없다면, 웹 접근성 측면에서는 요소에 대한 추가적인 설명을 제공할 수 있는 WAI-ARIA 표준을 사용해 요소에 추가적인 설명, accesible name을 넣어줄 수 있고, 스크린리더가 이를 읽게 할 수 있습니다. (aria-label
, aria-labelledby
, aria-describedby
)
<!-- aria-label 속성으로 요소에 추가적인 정보를 제공할 수 있습니다. -->
<button type="submit" onClick="{onClickHandler}" aria-label="유저 정보 수정하기">수정</button>
WAI-ARIA에서 정의한 설명 요소를 사용할 수 있지만, 제일 좋은 것은 텍스트의 내용과 시맨틱 태그 만으로 요소를 충분히 설명할 수 있는 요소입니다.
이런 지점에서 웹 접근성은 UX 라이팅의 범위를 확장하고, 화면 요소의 텍스트가 요소를 잘 설명하고 있는지, 추가적인 설명이 필요하지는 않는지 돌아보게 합니다.