2022년 4월 25일 • ☕️ 5 min read
일반적으로 웹에 접근할 수 있다는 것은 웹에서 제공하는 컨텐츠 및 기능을 사용할 수 있다는 것이다. 즉 누구나 기능을 사용할 수 있어야 한다. 개발자는 모든 사용자가 키보드, 마우스 또는 터치를 사용하여 서비스와 상호작용할 수 있다 가정하고는 한다. 이러한 생각은 일반적으로는 잘 작동하는 사용자 경험으로 이어질 수 있지만 누군가에게는 단순한 성가심에서 서비스와 상호작용을 중단하는 문제를 발생시킨다.
따라서 접근성은 일반 사용자의 범위 밖에 있는 사용자의 경험을 의미하지만, 오직 특정 장애를 겪고 있는 사용자와 관련이 된 것은 아니다. 주로 접근성에 대한 논의를 신체적 장애가 있는 사용자에게 초점을 맞추는 경향이 있지만, 우리 모두는 어떠한 이유든 액세스할 수 없는 인터페이스를 접할 수 있다. 특정 지역, 네트워크 환경, 접근 장치에 따라 제대로 동작하지 않는 경우를 본 적이 있을 것이며 모두 접근성 문제이다.
WCAG(Web Content Accessibility Guidelines) 2.0를 간단하게 요약하면 다음과 같다.
WCAG는 4가지 원칙을 중심으로 구성된다.
WCAG에서 접근성에 대한 의미와 개요를 자세히 다루고 있지만 부담스러운 내용으로 느껴질 수 있다. 하지만 부담을 덜어주기 위해 따르기 쉬운 체크리스트로 정리한 글이 있다.
일명 WebAIM 체크리스트는 개발자가 구현해야 하는 것에 대한 간략하지만 높은 퀄리티를 제공한다. 이를 사용하면 당사 서비스의 접근성에 발전이 있을 것이다.
개발자의 자원은 제한적이기에 소수로 여겨지는 집단은 배제될 수 있다. 그렇기에 서비스 내에 접근성을 도입해야 할 이유를 찾기 어려울 수 있다. 접근성은 모든 사용자에게 당사의 서비스를 사용할 수 있도록 포괄적인 경험을 만들기 때문에 중요하다. 이는 곧 기업의 이미지로 상당한 영향을 미칠 수 있다. 예를 들면
캐나다에서는 WCAG에 따른 지침을 충족하도록 법으로 지정하여 많은 기업들이 웹 접근성에 대한 많은 투자를 하고 있다. 옆 나라 미국 역시 관련 고소건은 매해 늘어나고 있고, 당사의 서비스가 인기 있고 누구나 액세스할 수 없다면 고소를 당할 수 있다는 것이다. 대한민국은 미국의 문화를 이어 받는(?) 경우가 많기 때문에 접근성을 높이는데 미리 참여할 수 있다.
마지막으로 접근성은 SEO 크롤러에게도 점점 중요해지고 있다.
모든 레이아웃을 div 태그로 만드는 대신 시멘틱 태그를 사용을 하도록 한다. 대표적으로 탐색에는 nav, 하단 글 영역에는 footer, 컨텐츠 영역을 래핑 하는 section, 기사는 article 등이 있다.
작은 폰트 사이즈를 사용하지 말자. 일반적으로 사용해야 하는 가장 작은 폰트 사이즈는 12px이지만 되도록 16px을 유지하려고 노력한다.
px 대신 rem(em) 단위를 사용하여 폰트 사이즈를 지정하자. rem 단위를 사용하면 사용자가 장치 및 브라우저에서 폰트 사이즈를 조정할 수 있다. px을 사용하여 정의된 폰트사이즈는 사용자가 페이지를 명시적으로 크기 조절한 경우에만 조정된다.
일반적으로 포커스 상태는 개발자가 의도적으로 기능을 막지 않는 한 유효한 기능이다. 따로 표시를 추가해주지 않고는 outlint: 0
을 주지 않도록 하여 포커스 상태를 명확하게 나타내도록 한다.
일반적으로 기본 포커스 상태를 유지하여 이에 의존하는 사용자가 다양한 사이트에서 일관된 경험을 할 수 있도록 하는 것이 좋다. 링크, 버튼, 입력 등, 모든 폼 컴포넌트에는 포커스에 대한 명확한 상태 표시가 있어야 한다.
div를 버튼으로 사용하지 않는다. div는 포커스를 맞출 수 없으며 키 이벤트가 활성화되지 않는다. div 또는 외에 비대화형 태그를 반드시 이용해야 하는 경우 키를 누를 때 동일한 키보드 이벤트를 트리거 해야한다.
비대화형 요소를 포커스 가능하게 만들기 위해 어트리뷰트를 지정한다. <div id="myDiv" tabindex=0 role="button" enter>Dummy text</div>
이렇게 하면 컴포넌트를 탭으로 액세스할 수 있을 뿐만 아니라 .focus()
을 이용해 개발자가 의도적으로 포커스를 맞출 수 있고, 태그를 유의미하게 만들 수 있다.
앵커를 버튼으로 사용하지 않는다. 링크는 버튼이 아닌 링크의 역할을 해야한다.
사용자가 실수로 이웃 요소를 잘못 클릭하지 않도록 탭은 최소 40x40px 간격을 유지하도록 한다.
aria-label
을 사용하여 버튼의 동작을 간략하게 설명해야한다. 예를들어 장바구니 페이지에서 상품을 지우는 버튼은 다음과 같이 작성할 수 있다. <button aria-label="장바구니에서 상품을 제거합니다." class="trash-icon" />
href
어트리뷰트가 없으면 태그 사용 이유를 다시 생각해 보자. 또한 href
가 포함되지 않은 a 태그는 SEO에 영향을 미칠 수 있다.alt=""
어트리뷰트를 추가하여 의미를 전달하지 않는다는 의미를 전달해야 한다.건너뛰기(skip navigation)를 사용하는 자세한 방법은 WebAIM에서 확인할 수 있다.
접근성은 자칫 지엽적이라 생각할 수 있다. WCAG를 읽는데 부담을 느끼는 독자들에게 이 글이 유용했기를 바란다. 접근성은 아직도 활발한 논의가 이루어지고 있는 주제이다. 관심이 있다면 트위터에서 #a11y 해시태그를 팔로우해서 피드를 받아 볼 수 있고, 논제에 자유롭게 참여할 수도 있다.
필자 역시 더 나은 a11y 포스팅을 업데이트하기 위해 노력할 것이다.