빨간 테두리만 두르는 오류 표시는 색맹 사용자에게 잘 안 보이고(→ color-not-alone), 스크린 리더 사용자에게는 아예 존재하지 않는 정보입니다. 제대로 된 오류 표시는 어떤 필드가 틀렸는지, 왜 틀렸는지를 **글자로** 알려주고, `aria-describedby`로 입력 필드와 오류 메시지를 프로그래밍적으로 연결하고, `aria-invalid="true"`로 필드 자체의 상태를 표시합니다.
이렇게 연결하면 스크린 리더가 필드에 포커스를 줄 때 필드 이름과 오류 설명을 함께 읽어줍니다("Email, invalid, enter a valid email address"). 오류가 생겼을 때 포커스를 첫 번째 오류 필드로 옮기거나 요약을 `aria-live`로 알리면 더 나은 경험이 됩니다.
데모는 같은 유효하지 않은 입력을 두 가지로 처리합니다 — 테두리만 빨개지는 왼쪽과, 오류 문구가 함께 나타나는 오른쪽입니다.
언제 쓰나
폼 검증 로직을 짤 때 오류 상태와 오류 메시지를 항상 한 쌍으로 다루세요. aria-describedby는 오류 메시지가 나타났다 사라질 때 동적으로 붙였다 떼는 걸 잊기 쉬운 부분입니다.