label, 포커스 관리, 대비, 대체 텍스트가 기본이다.웹 접근성은 사용자가 마우스를 쓰지 못하더라도, 화면을 보지 못하더라도, 혹은 일시적으로 손이 불편하거나 밝은 야외에서 화면을 보더라도 서비스를 이용할 수 있게 만드는 기준이다.
실무에서는 보통 다음 질문으로 풀어 설명하면 자연스럽다.
접근성은 일부 사용자만 위한 특수 요구사항이 아니다. 회원가입, 결제, 검색 같은 핵심 플로우가 더 분명해지고, 구조가 좋아지면서 전반적인 UX도 같이 좋아지는 경우가 많다.
또 시맨틱 마크업이 잘 되어 있으면 유지보수나 자동화 테스트, SEO에도 도움이 된다. 그래서 면접에서는 "접근성을 챙기면 사용자 범위가 넓어지고, 구조가 좋아져서 제품 품질 전체가 올라간다" 정도로 연결하면 좋다.
div만으로 화면을 만들기보다 button, nav, main, header, label 같은 태그를 맞게 써야 한다.
예를 들어 클릭 가능한 요소를 div로 만들면 키보드 포커스나 역할 정보가 부족해진다. 반대로 button을 쓰면 기본 키보드 조작과 역할 정보가 같이 따라온다.
입력창에는 눈에 보이는 텍스트뿐 아니라 코드상 연결된 label이 있어야 한다.
<label for="email">이메일</label>
<input id="email" type="email" />
placeholder만 넣고 label을 생략하면 스크린 리더 사용성이 떨어지고, 입력 목적도 덜 분명해질 수 있다.
탭으로 이동이 자연스러워야 하고, 모달이 열렸을 때 포커스가 모달 안에 머물러야 하며, 닫힐 때는 원래 버튼으로 돌아가는 식의 포커스 관리가 필요하다.
이 부분은 실무에서 자주 놓치는데, 면접에서는 "마우스 없이 써본다"는 식으로 검증 습관까지 말하면 좋다.
이미지에는 의미가 있을 때 적절한 alt가 필요하다. 장식용 이미지는 빈 alt로 처리하는 게 오히려 맞을 수 있다.
버튼도 아이콘만 넣지 말고 접근 가능한 이름이 있어야 한다.
예를 들어 돋보기 아이콘 버튼은 화면에는 아이콘만 보여도, 코드상으로는 aria-label="검색" 같은 정보가 필요할 수 있다.
에러를 빨간색으로만 보여주거나, 선택 상태를 색 차이만으로 구분하면 일부 사용자는 알아보기 어렵다.
색 외에 텍스트, 아이콘, 밑줄, 상태 문구를 같이 써야 한다.
예를 들어 커스텀 드롭다운을 직접 만들었다고 해보자. 겉보기에는 잘 동작해도 다음 문제가 자주 생긴다.
이럴 때는 직접 모든 상호작용을 구현하기보다, 가능한 경우 네이티브 요소를 우선 쓰거나 검증된 접근성 패턴을 따라가는 게 안전하다.
웹 접근성은 장애가 있는 사용자만 위한 별도 기능이라기보다, 누구나 서비스의 핵심 기능을 사용할 수 있게 만드는 기본 품질이라고 생각합니다. 프론트엔드에서는 시맨틱 태그를 맞게 쓰고, 입력창에 label을 연결하고, 키보드만으로 조작 가능한지와 포커스 흐름이 자연스러운지를 먼저 봅니다. 또 이미지 대체 텍스트, 아이콘 버튼의 접근 가능한 이름, 색 대비도 기본적으로 확인합니다. 실무에서는 커스텀 UI를 만들수록 접근성이 깨지기 쉬워서, 가능하면 네이티브 요소를 우선 활용하고 직접 만든 컴포넌트는 키보드와 스크린 리더 기준으로 꼭 점검합니다.
div 대신 button, a 같은 네이티브 요소를 우선 쓴다.