접근성 CI를 만들기로 한 이유 — VPAT, 수동 검사의 한계

HANUI·
접근성VPATCIWCAG자동화의사결정

접근성 CI 구축기 시리즈

(1편)
  1. 1.접근성 CI를 만들기로 한 이유 — VPAT, 수동 검사의 한계

월요일에 통과한 버튼이 금요일에 항의 메일로 돌아왔다.

그 주에 생긴 일

수요일 오후 4시. 디자이너가 CTA 버튼 배경을 #3B82F6에서 #5AA0FF로 조정했다. 브랜드 톤을 맞춘 거였다. QA 체크리스트는 통과했다. 목요일 릴리스. 금요일 오전 10시, 저시력 사용자로부터 이메일이 왔다. "버튼이 안 보입니다."

대비율을 다시 쟀다. 4.5:1 기준에서 2.8:1. WCAG 2.1 AA 위반이다.

왜 못 잡았나

  • QA는 매 릴리스마다 접근성 체크리스트를 처음부터 다시 돌리지 않는다. 이번 주 변경분 위주로 본다.
  • 색상 변경은 "UI 수정"으로 분류됐다. 접근성 리뷰 대상이 아니었다.
  • 디자이너, 개발자, QA 셋 중 대비율을 재본 사람은 없었다.

한 사람의 실수가 아니다. 프로세스가 이 영역을 비워두고 있었다.

시장이 묻는 것

접근성은 이제 기술 이슈가 아니라 계약 이슈다.

  • 미국 연방 조달: Section 508 준수 증빙(VPAT) 없으면 입찰 원천 배제
  • EU 기업 조달: EN 301 549 기반 문서 요구
  • 민간 B2B: 글로벌 대기업이 공급사 평가 항목에 접근성 점수 포함
  • ADA 소송: 2023년 미국에서 8,800건 접수 — 평균 합의금 2~7만 달러

"저희가 접근성 검사 한 번 했습니다"는 더 이상 증빙이 아니다. 지속 모니터링의 근거가 필요하다.

그럼 자동화가 답인가

아니다. 정확히 말하면, 반만 답이다.

axe-core 같은 엔진이 기계적으로 잡아내는 건 대략 이런 것들이다.

  • 색상 대비
  • ARIA 속성 누락·오용
  • form label 연결
  • heading 구조
  • alt 속성 누락
  • 중복 ID

Deque Systems가 2023년 발표한 자료 기준, axe는 **WCAG 위반의 3040%**를 잡는다. 6070%는 여전히 사람이 테스트해야 한다.

못 잡는 것들:

  • alt가 의미 있게 쓰였는지 (alt="image"도 통과한다)
  • 키보드 포커스 순서가 논리적인지
  • 스크린 리더가 읽어주는 흐름이 이해되는지
  • 에러 메시지가 명확한지

자동화는 사람을 대체하지 않는다. 사람이 깊은 검사에 집중하도록 바닥을 까는 것이다.

"그냥 수동 QA 강화하면 되지 않나"

실제로 이런 반론을 들었다. 수치로 답했다.

QA 1인이 접근성 체크리스트 1회 돌리는 데 23일. 릴리스 주기 2주. 연간 26회. **인건비 기준 57천만 원.**

CI 구축 초기 비용은 개발자 2~3주 공수. 그 후 운영 비용은 거의 0이다. 회귀 감지 범위는 비교할 수 없이 넓어진다.

수동 검사를 없애자는 게 아니다. 수동이 할 수 없는 영역을 자동화로 덮자는 것이다.

처음부터 "위반 0"을 강제하면 안 된다

가장 큰 실수는 처음부터 엄격하게 시작하는 것이다.

기존 코드에 이미 위반이 있는 상태에서 "위반 0 강제"를 걸면 PR이 전부 막힌다. 팀은 거부감을 가진다. 접근성 CI는 2주 만에 비활성화된다. 실제로 그런 사례를 여러 번 봤다.

제안한 방식은 두 단계다.

  • Phase 1 (2~4주): 위반 수만 기록. 차단 없음. PR 코멘트로 증감만 표시.
  • Phase 2: "더 늘지만 마" 정책. 새 위반만 차단. 기존 위반은 별도 스프린트로 해소.

기존 부채를 외면하는 게 아니다. 회귀와 개선을 분리하는 거다.

조직에 어떻게 설득했나

세 가지 프레이밍을 썼다.

① 품질 아니라 리스크 "접근성 개선"이 아니라 "법/계약 리스크"로 포지셔닝. 경영진은 이쪽에 더 반응한다.

② 공수 절감 수치화 수동 QA 공수 vs CI 운영 공수를 분기 단위로 그렸다. 엑셀 한 장이면 설득된다.

③ "다 고치자"가 아니라 "더 늘지만 마" 베이스라인 → 게이팅 2단계. 팀이 감당 가능한 속도로.

다음 편에

구체적으로 어떤 도구를 쓰고, CI 설정을 어떻게 했는지는 2편에서 다룬다. Playwright + axe-core + GitHub Actions 조합, 그리고 실제 코드.

열린 질문 셋

  • 지금 우리 제품은 어느 시장을 포기하고 있나? VPAT가 없어서.
  • 회귀는 누가 막고 있나? 사람인가, 프로세스인가, 시스템인가?
  • 자동화가 잡는 30%와 못 잡는 70% 중, 조직은 어디에 비용을 쓰고 있나?

HANUI

KRDS 기반 React 컴포넌트 라이브러리. 공공 웹 개발을 더 쉽게.