이미지가 자동 검사를 통과했다고 해서 이미지에 연결된 대체 텍스트가 스크린 리더에 의존하는 사용자에게 유용하다는 의미는 아닙니다. 이것이 GitHub가 2026년 8월 24일 Taarik Ashenafi와 Keenan Zhou가 작성한 엔지니어링 글에서 제시한 핵심 결론이며, GitHub Accessibility Scanner용 대체 텍스트 추가 기능을 개발한 뒤 도출한 결과입니다.
이 글은 2026년 WebAIM Million 보고서를 바탕으로 합니다. 이 보고서에 따르면 웹에서 가장 인기 있는 100만 개 사이트의 홈페이지에 있는 이미지 중 16.2%에는 대체 텍스트가 없습니다. 대체 텍스트가 있는 이미지 중 10.8%는 image, 원시 파일 이름, 인접 이미지에서 반복된 설명처럼 유용하지 않은 설명을 제공했습니다. 문제는 대부분의 자동 검사 도구가 설명의 품질이나 맥락 적합성이 아니라 이미지에 사용할 수 있는 이름이 존재하는지만 확인한다는 것입니다.
증명할 수 있는 것과 판단이 필요한 것을 구분하기
GitHub는 alt 속성이 존재하는지는 도구가 증명할 수 있는 객관적 사실인 반면, 텍스트가 이미지를 설명하기에 적합한지는 대체로 맥락에 의존하는 문제라고 봅니다. 따라서 이 추가 기능은 AI 모델의 자격 증명이나 네트워크 연결 없이 기본적으로 작동하는 다섯 가지 결정론적 규칙을 선택했습니다.
- 속성이 없거나 공백만 포함된 경우. 이는 일반적으로 이미지가 장식용임을 나타내는 alt=""와 구분됩니다.
- hero.png 또는 IMG_2847.jpg와 같은 파일 이름을 사용하는 경우.
- TODO 또는 tbd와 같은 임시 값을 남겨 둔 경우.
- image, logo, chart처럼 미디어 유형을 설명하는 일반적인 단어 하나를 사용하는 경우.
- 인접한 이미지에서 동일한 텍스트를 반복하는 경우.
모호한 설명 규칙은 더 복잡한 추측 대신 엄선된 목록과 정확한 일치를 사용합니다. 따라서 alt="image"는 보고하지만, “통합 로그인을 위한 버튼이 강조된 로그인 화면의 이미지”와 같은 더 긴 설명을 자동으로 모호하다고 판단하지는 않습니다. GitHub는 개발자가 도구를 비활성화하게 만들 수 있는 오탐을 생성하는 것보다 일부 사례를 놓치는 편이 낫다고 설명합니다.
HTML 순서보다 시각적 인접성이 더 중요하다
중복 텍스트를 처리하는 과정에서 DOM의 요소 순서가 사용자가 화면에서 보는 내용을 항상 반영하지는 않는다는 사실이 드러났습니다. 예를 들어 GitHub 로고가 헤더에 있고 다른 로고가 푸터에 있을 수 있지만, 추출된 목록에서는 시각적으로 떨어져 있음에도 서로 인접한 것으로 나타날 수 있습니다. 따라서 추가 기능은 바운딩 박스를 사용해 이미지의 위치를 검사하며, 이미지 사이의 거리가 이미지 크기에 비해 작을 때만 하나의 그룹 안에서 텍스트가 중복된 것으로 판단합니다.
이 임계값은 공식 표준에 근거한 숫자가 아니라 실제 페이지에 맞춰 조정해야 하는 추정값입니다. 측정 가능한 박스를 이용할 수 없을 때 규칙은 경고를 내보내지 않습니다. 발견하지 못한 경우보다 오탐이 개발자에게 더 명확하기 때문입니다.
비전 모델은 최종 판정이 아니라 제안이다
선택적 규칙은 가장 가까운 제목, 페이지 제목, figcaption 요소, 이미지가 링크나 버튼 안에 있는지 여부, 주변 텍스트 최대 600자를 포함해 페이지 맥락을 대체 텍스트와 이미지에 추가합니다. 이미지가 링크의 유일한 콘텐츠인 경우 링크의 존재는 특히 중요합니다. 이때 대체 텍스트는 단순한 시각적 설명이 아니라 링크 목적지를 설명하는 사용할 수 있는 이름이 되기 때문입니다.
이 데이터는 GitHub Models를 통해 비전 모델로 전송됩니다. GitHub에 따르면 처음의 문제는 대체로 모델이 이미지를 잘못 이해한 것이 아니라, 텍스트가 좋은 경우에도 개선을 제안하려는 경향이었습니다. 이를 줄이기 위해 적용 가능한 첫 번째 상태에서 중단하는 순서화된 결정 메커니즘과 과도한 검토를 막는 규칙을 사용했으며, 결과를 선택하기 전에 근거를 구성하도록 강제하는 구조화된 출력을 적용했습니다. 상태에는 장식용 이미지, 캡션 때문에 불필요하게 장황한 설명, 기능적 이미지, 정보성 이미지가 포함됩니다.
개인정보 보호, 비용 및 실무적 한계
모델 기반 규칙은 기본적으로 비활성화되어 있으며, 명시적으로 활성화하고 GitHub Models에 대한 액세스 토큰을 제공해야 합니다. 또한 이미지와 링크 URL에서 쿼리 매개변수와 프래그먼트가 제거되고, HTML을 모델에 보내기 전에 src 및 srcset 값이 (omitted)로 대체됩니다. 그럼에도 문제의 위치를 파악해 수정하려면 페이지 URL과 원본 HTML이 일반적인 스캐너 보고서의 일부로 계속 남습니다. Azure AI Vision 자격 증명이 구성된 경우 OCR 선택적 처리를 수행하기 위해 바이너리 이미지 데이터가 두 번째 서비스로 전송될 수도 있습니다.
모델 호출은 각 검사 실행에서 이미지마다 한 번씩 발생할 수 있으므로 이미지가 많은 사이트일수록 비용이 더 커집니다. 따라서 이 실험은 모든 commit에 추가하기보다 일정에 따라 검사를 실행하는 것이 적합하다고 봅니다.
현재 이 추가 기능은 img 유형의 HTML 요소만 다룹니다. 또한 인증으로 보호된 이미지는 브라우저 세션 밖에서 다시 가져올 때 로드에 실패할 수 있습니다. 아울러 검사가 계산된 사용할 수 있는 이름이 아니라 alt 속성 자체를 읽기 때문에 aria-label의 오류가 통과할 수 있습니다. 제안된 결과는 여전히 사람이 검토해야 하는 초안이며, 일부 경고는 내장된 스캐너 검사와 중복될 수 있습니다.
실제로 무엇이 달라지는가?
GitHub의 실험은 검사 도구를 구축할 때 일반화할 수 있는 규칙을 제시합니다. 명백한 오류를 입증하는 테스트는 저렴하고 예측 가능하며 기본적으로 활성화하고, 맥락적 문제를 의심하는 테스트는 선택 사항으로 만들고 판정이 아닌 제안으로 제공하라는 것입니다. 중요한 점은 사용자 경험 평가를 DOM의 내용이나 비전 모델의 의견으로 축소할 수 없다는 것입니다. 여기서 자동화는 검토 범위를 넓혀 주지만, 보조 기술을 사용하는 사람들과 사이트를 테스트하는 일을 대신하지는 않습니다.