접근성


사람들은 다양한 방식으로 웹에 접근합니다. 어떤 사람은 화면을 보면서 마우스를 움직입니다. 어떤 사람은 화면을 볼 수 없어서 소리로 읽어주는 것을 듣습니다. 어떤 사람은 마우스를 전혀 사용하지 않고 키보드나 음성, 또는 손으로 누르는 스위치로 페이지를 탐색합니다. 접근성이란 이 모든 사람이 사용할 수 있는 페이지를 만드는 실천이며, 그 대부분은 HTML을 원래 의도된 방식대로 작성하는 것으로 귀결됩니다.
접근성이 중요한 이유
**접근성(Accessibility)**이란 각자의 상황이나 브라우징 방식이 무엇이든 모든 사람이 여러분의 페이지를 사용할 수 있도록 하는 것을 의미합니다. 어떤 사람은 화면을 볼 수 없어서 페이지를 소리로 읽어주는 소프트웨어를 통해 이용합니다. 어떤 사람은 마우스를 쓰지 않고 키보드로 페이지를 탐색합니다. 어떤 사람은 편하게 읽으려면 더 큰 글자나 더 강한 색상이 필요합니다.
계단 옆에 경사로가 있는 건물을 떠올려 보세요. 경사로는 계단을 오르기 힘든 사람에게 도움이 되면서, 계단을 이용할 수 있는 사람에게는 아무런 손해도 주지 않습니다. 접근성을 갖춘 HTML도 마찬가지입니다. 더 많은 사람이 페이지를 이용할 수 있게 해주면서도 누구에게도 불리하게 만들지 않습니다.
다행스러운 점은 HTML이 처음부터 접근성을 갖추고 있다는 것입니다. 각 콘텐츠에 맞는 요소를 사용하는 것만으로도 대부분의 작업이 저절로 해결됩니다.
토대가 되는 시맨틱 HTML
접근성을 위해 할 수 있는 가장 효과적인 일은 겉모습만 맞게 스타일을 입힌 범용 요소가 아니라, 콘텐츠의 의미에 맞는 요소를 사용하는 것입니다.
**시맨틱 HTML**이란 콘텐츠가 어떻게 보이는지가 아니라 무엇인지에 맞춰 태그를 고르는 것을 의미합니다. 제목에는 <h1>부터 <h6>까지를 씁니다. 버튼에는 <button>을 씁니다. 링크에는 <a>를 씁니다. 목록에는 <ul>이나 <ol>을 씁니다. 이 요소들은 이미 스크린 리더가 알릴 수 있는 의미를 담고 있으므로, 청취자는 직접 보지 않고도 "이것은 버튼입니다" 또는 "이것은 제목입니다"라는 것을 알 수 있습니다.
이사할 때 상자에 라벨을 붙이는 것과 같습니다. "주방"이라고 적힌 상자는 상자를 싼 사람뿐 아니라 그것을 나르는 누구에게도 도움이 됩니다. 시맨틱 태그도 콘텐츠에 같은 방식으로 라벨을 붙여서, 브라우저와 보조 기술이 각 부분이 무엇인지 알 수 있게 해줍니다.
실제로는 버튼을 만들고 싶을 때 버튼처럼 보이게 스타일을 입힌 <div>가 아니라 <button>을 사용하는 것을 뜻합니다. <div>는 겉모습을 똑같이 만들 수 있지만, 그것이 무엇인지에 대해서는 아무 말도 하지 않습니다. 시맨틱 HTML 장에서 전체 목록을 다룹니다.
<button>, 제목에는 <h1>, 링크에는 <a>입니다. 각 태그는 이미 스크린 리더에게 자신이 무엇인지 알려주므로 그것을 공짜로 얻는 셈입니다. 스타일을 입힌 <div>는 겉모습은 같아도 아무것도 말해주지 않습니다. 텍스트 대체 수단, 레이블, 포커스, 키보드
어떤 콘텐츠는 스스로 말할 수 없습니다. 이미지는 여러분이 설명을 붙이기 전까지 스크린 리더에게 보이지 않습니다. 폼 필드는 레이블이 붙기 전까지는 그저 추측의 대상일 뿐입니다. 그리고 마우스에만 반응하는 페이지는 마우스를 쓰지 않는 모든 사람을 배제합니다. 이 네 가지 영역은 조금만 신경 써도 큰 효과를 얻을 수 있는 곳입니다.
몇 가지 확실한 습관이 대부분의 경우를 해결해줍니다.
- 이미지에는 alt 텍스트가 필요합니다.
alt속성은 이미지를 볼 수 없는 사람에게 그림을 설명해줍니다. 이미지가 단순히 장식용이라면 빈alt=""로 스크린 리더가 건너뛰도록 알려줄 수 있습니다.
<img src="red-fox.jpg" alt="A red fox curled up asleep in the snow">- 폼 필드에는 레이블이 필요합니다.
<label>은 방문자와 스크린 리더 모두에게 필드에 무엇을 입력해야 하는지 알려줍니다.
<label for="email">Email address</label>
<input id="email" type="email">- 버튼과 링크에는 명확한 텍스트가 필요합니다. "더 보기"만 있으면 맥락 없이 읽을 때 무슨 뜻인지 알 수 없지만, "요금 안내 더 보기"는 그 자체로 뜻이 통합니다.
- 키보드 순서는 읽는 순서와 일치해야 합니다. Tab 키를 누르는 사람은 HTML에 요소가 나타나는 순서대로 페이지를 이동하므로, 그 순서가 자연스러운지 확인하세요.
alt를 주고, 폼 필드에는 <label>을 주고, 버튼과 링크의 텍스트는 그 자체로 뜻이 통하게 쓰고, 탭 순서는 읽는 순서와 맞추세요. 어느 것도 시간이 오래 걸리지 않습니다. 장식용 이미지에는 빈 alt=""를 주어 건너뛰게 하세요. ARIA, 그리고 왜 먼저 손대면 안 되는가
접근성을 위해 만들어진 HTML 속성 집합이 있는데, 이를 ARIA라고 부릅니다. 이는 알맞은 곳에서 쓰면 유용하지만, 동시에 이 플랫폼에서 가장 오용되는 부분이기도 합니다. 그러니 무엇을 하는지, 그리고 언제 손대지 말아야 하는지를 함께 이해해둘 가치가 있습니다.
**ARIA**는 Accessible Rich Internet Applications의 줄임말입니다. 요소에 추가로 붙여서 보조 기술에게 더 많은 정보를 알려주는 속성 집합입니다. 이름을 보면 가장 먼저 손을 뻗어야 할 도구처럼 느껴지지만, 실제로는 대개 가장 마지막에 써야 할 도구입니다.
이유는 단순합니다. ARIA가 설명할 수 있는 대부분은 HTML이 이미 스스로 말해주고 있습니다. <button>은 이미 버튼으로 안내됩니다. 여기에 role="button"을 추가해도 아무것도 바뀌지 않습니다. 어떤 요소가 무엇인지를 설명하려고 ARIA를 추가하고 있다면, 그것은 대개 이미 그것을 말해주는 평범한 HTML 요소로 바꿔야 한다는 신호입니다.
이삿짐 상자에 포스트잇을 붙이는 상황을 떠올려 보세요. 상자에 이미 "주방"이라고 인쇄되어 있다면, "주방"이라고 적힌 포스트잇은 그저 잡음을 더할 뿐입니다. 포스트잇은 자체적으로 라벨이 없는 상자에 남겨두세요. ARIA는 HTML에 해당 요소가 없는 페이지 부분을 위한 것이며, 이는 생각보다 훨씬 드뭅니다.
<button>은 이미 스스로 버튼이라고 말해주기 때문입니다. ARIA는 HTML에 해당 요소가 없는 드문 부분을 위해 아껴두고, 나머지는 평범하게 두세요. 빠른 자체 점검
가장 흔한 문제를 잡아내는 데 전문 소프트웨어가 필요하지는 않습니다. 이미 여러분의 컴퓨터에 있는 도구로 몇 가지만 확인해도 대부분의 문제를 찾아낼 수 있고, 실행하는 데 몇 분밖에 걸리지 않습니다.
어느 페이지에서든 실행할 수 있는 짧은 체크리스트입니다.
- 마우스를 내려놓고 Tab 키를 눌러보세요. 모든 링크와 버튼에 자연스러운 순서로 도달할 수 있나요? Enter로 활성화할 수 있나요?
- 모든 이미지에
alt속성이 있나요? - 모든 폼 필드에
<label>이 있나요? - 버튼과 링크가 맥락 없이 그 자체로 읽어도 뜻이 통하나요?
- 텍스트가 배경과 비교해 또렷하게 읽히나요?
이것들을 자신의 페이지에서 직접 확인하는 데는 오래 걸리지 않으며, 사람들이 가장 자주 겪는 문제를 잡아냅니다. Tab 키가 어딘가에서 걸린다거나 이미지에 alt가 없다면, 고칠 만한 것을 찾은 셈입니다.
alt가 있는지, 모든 필드에 <label>이 있는지, 텍스트가 배경과 비교해 또렷하게 읽히는지 확인하세요. 몇 분만 들이면 사람들이 가장 많이 겪는 문제를 잡아낼 수 있습니다. 
