포커스가 없는 위치에서 콘텐츠가 바뀌면(장바구니 개수, "저장됨" 토스트, 검색 결과 수) 화면을 보는 사용자는 눈으로 알아채지만 스크린 리더 사용자는 아무 신호도 받지 못합니다. `aria-live="polite"`를 준 영역은 내용이 바뀔 때마다 스크린 리더가 지금 읽던 것을 마치고 그 변화를 알려주고, `aria-live="assertive"`는 즉시 끼어들어 읽습니다.
`polite`가 기본값이고 거의 항상 옳은 선택입니다. `assertive`는 세션 만료처럼 정말 급한 경고에만 씁니다 — 남용하면 계속 말이 끊겨 오히려 불편합니다. 에러 메시지처럼 요소가 통째로 새로 나타나는 경우는 `role="alert"`(암묵적으로 assertive)를 쓰기도 합니다.
데모 왼쪽은 실제 화면, 오른쪽은 스크린 리더가 실제로 읽는 내용을 문자로 옮긴 트랜스크립트입니다. 담기 버튼이 자동으로 눌릴 때마다 화면과 별개로 오른쪽에 새 줄이 추가됩니다.
언제 쓰나
토스트 알림, 실시간 카운터, 자동완성 결과 수, 폼 검증 요약처럼 포커스 없이 바뀌는 모든 곳에 씁니다. 애니메이션 되는 숫자나 로딩 스피너에 매번 붙이면 스크린 리더가 계속 떠들게 되니 주의하세요.