웹 접근성 점검부터 배포까지 오류를 줄이는 코딩 순서

profile_image
작성자 접근성 설계자 차윤슬
댓글 0건 조회 45회

버튼은 보이는데 키보드로 선택할 수 없고, 오류 메시지는 뜨는데 화면 읽기 프로그램이 알아채지 못한다면 기능이 완성됐다고 보기 어렵습니다. 웹 접근성 점검은 출시 직전에 검사 도구를 한 번 실행하는 작업이 아니라, 요구사항을 정하는 순간부터 배포 후 모니터링까지 이어지는 개발 과정입니다.

특히 일정이 촉박한 웹개발 프로젝트에서는 접근성을 나중으로 미루기 쉽습니다. 그러나 HTML 구조와 컴포넌트 설계가 굳어진 뒤 문제를 고치면 수정 범위가 CSS, 자바스크립트, 테스트 코드까지 번집니다. 아래 순서대로 점검하면 초보 개발자도 무엇을 먼저 확인해야 하는지 판단할 수 있습니다.

1. 화면을 만들기 전에 사용자 행동부터 적습니다

페이지별 핵심 작업을 한 문장으로 정의하기

코딩을 시작하기 전에 사용자가 페이지에서 끝내야 하는 작업을 적어보세요. 쇼핑몰 상품 페이지라면 ‘상품 정보를 확인하고 옵션을 선택해 장바구니에 담는다’, 회원가입 화면이라면 ‘필수 정보를 입력하고 오류를 수정해 가입을 완료한다’처럼 표현합니다. 이 문장이 명확해야 접근성 테스트의 시작점과 성공 조건도 선명해집니다.

다음에는 마우스 없이 작업을 끝낼 수 있는지 종이에 동선을 그려봅니다. 로고, 검색창, 메뉴, 본문, 구매 버튼 순서가 논리적인지 살피고, 모달이나 드롭다운이 열렸을 때 초점이 어디로 이동해야 하는지도 표시합니다. 화면의 좌우 배치보다 정보를 이해하고 조작하는 순서가 먼저입니다.

코딩과 프로그래밍의 범위를 팀에서 다르게 이해하면 접근성 업무가 단순 마크업 수정으로 축소될 수 있습니다. 기본 개념은 코딩 용어 설명프로그래밍 개념 자료를 함께 참고하되, 실제 프로젝트에서는 기획·디자인·개발·검수의 책임 범위를 별도로 합의하는 편이 좋습니다.

  • 핵심 과업: 사용자가 반드시 완료해야 하는 행동을 페이지마다 한 개 이상 적습니다.
  • 입력 수단: 마우스, 키보드, 터치 환경에서 같은 결과에 도달하는지 확인합니다.
  • 정보 순서: 화면을 위에서 아래로 읽었을 때 제목과 내용의 관계가 자연스러운지 봅니다.
  • 예외 상황: 입력 오류, 네트워크 지연, 권한 부족 상태에서 다음 행동이 안내되는지 적습니다.
  • 완료 기준: ‘접근성 적용’처럼 모호하게 쓰지 말고 ‘Tab 키만으로 제출 가능’처럼 검증 가능한 문장으로 바꿉니다.

실무 팁: 요구사항 문서에 ‘키보드 사용 가능’이라고만 적지 마세요. 시작 위치, 이동 순서, 초점 표시, 닫은 뒤 돌아갈 위치까지 적어야 개발자와 테스터가 같은 결과를 기대할 수 있습니다.

2. 디자인 시안을 받으면 색보다 구조를 먼저 봅니다

제목 계층과 반복 요소의 역할 확인하기

완성된 시안을 보면 색상 대비부터 검사하고 싶지만, 먼저 페이지의 뼈대를 확인해야 합니다. 최상위 제목 아래에 어떤 중간 제목이 이어지는지, 카드 목록과 부가 정보가 어느 영역에 속하는지, 탐색 메뉴와 본문이 구별되는지를 살펴보세요. 글자를 크게 그렸다는 이유만으로 제목이 되는 것은 아니며, 실제 HTML에서도 제목 요소로 표현할 수 있어야 합니다.

아이콘만 있는 버튼은 의미를 화면 모양에 의존하기 쉽습니다. 돋보기, 하트, 점 세 개처럼 익숙한 아이콘도 서비스와 사용자에 따라 해석이 달라질 수 있으므로 접근 가능한 이름을 정해야 합니다. 툴팁은 보조 설명으로 사용할 수 있지만, 마우스를 올려야만 핵심 의미를 알 수 있게 설계하면 키보드와 터치 사용자에게 불리합니다.

색상은 상태를 빠르게 전달하지만 유일한 단서가 되어서는 안 됩니다. 필수 입력란을 빨간 테두리로만 표시하거나 상승과 하락을 초록색과 빨간색으로만 나누면 일부 사용자가 차이를 알아보기 어렵습니다. 색상에 텍스트, 아이콘, 패턴 또는 위치 단서를 함께 제공하는지 디자인 검토 단계에서 확인하면 개발 중 임시 문구를 덧붙이는 일을 줄일 수 있습니다.

  1. 화면마다 페이지 목적을 나타내는 대표 제목이 있는지 확인합니다.
  2. 제목 크기만 보지 말고 상위·하위 정보 관계가 끊기지 않는지 점검합니다.
  3. 버튼, 링크, 탭처럼 비슷하게 생긴 요소가 실제 행동에 맞는 역할을 갖는지 구분합니다.
  4. 일반 상태, 마우스 오버, 키보드 초점, 비활성, 오류 상태의 시안이 모두 준비됐는지 확인합니다.
  5. 텍스트가 확대되거나 두 줄로 바뀌어도 버튼과 카드가 잘리지 않는지 검토합니다.
  6. 동영상, 차트, 지도처럼 시각 정보가 많은 콘텐츠에 자막이나 텍스트 대안이 필요한지 표시합니다.

디자이너에게 전달할 질문 목록

“접근성에 맞나요?”라는 질문은 답하기 어렵습니다. 대신 “검색 결과가 0건이면 어떤 문구가 읽히나요?”, “모달이 열리면 첫 초점은 제목과 닫기 버튼 중 어디인가요?”, “오류 색상을 보지 않아도 잘못된 필드를 찾을 수 있나요?”처럼 사용자 행동을 기준으로 질문하세요. 질문이 구체적일수록 디자인 수정 여부와 개발 처리 범위를 빠르게 결정할 수 있습니다.

  • 본문과 배경, 버튼 문자와 버튼 배경의 대비를 별도로 확인했습니까?
  • 초점 표시가 브랜드 색상과 겹쳐 사라지는 화면은 없습니까?
  • 링크를 주변 문장과 색상만으로 구별하고 있지는 않습니까?
  • 자동 재생, 깜빡임, 움직이는 배너를 멈추거나 숨길 방법이 있습니까?
  • 확대 시 고정 헤더와 채팅 버튼이 본문을 과도하게 가리지 않습니까?

3. HTML을 작성할 때 기본 요소의 기능을 살립니다

ARIA보다 시맨틱 HTML을 먼저 선택하기

접근성 코딩에서 가장 효과적인 출발점은 복잡한 속성을 외우는 것이 아니라 목적에 맞는 HTML 요소를 선택하는 일입니다. 페이지 이동은 링크, 현재 화면의 동작은 버튼, 사용자가 값을 입력하는 곳은 레이블과 연결된 입력 요소로 구현합니다. 클릭 이벤트를 붙인 일반 영역은 겉보기에는 버튼처럼 동작해도 키보드 조작, 초점, 이름 전달을 개발자가 모두 다시 구현해야 합니다.

시맨틱 HTML을 사용하면 브라우저가 기본 키보드 동작과 의미를 제공하므로 코드도 짧아집니다. 예를 들어 실제 버튼은 Tab 키로 초점을 받고 Enter나 Space 키로 실행됩니다. 반대로 일반 요소에 버튼 역할만 부여하면 키 입력 처리와 비활성 상태, 초점 스타일을 빠뜨리기 쉽습니다. 기본 요소로 해결할 수 없는 사용자 인터페이스인지 먼저 판단한 뒤 필요한 부분에만 ARIA를 적용하세요.

폼에서는 보이는 레이블과 코드상 이름이 연결돼야 합니다. placeholder는 입력 예시를 보여주는 용도이지 레이블을 대신하지 못합니다. 입력을 시작하면 사라지고, 값과 안내 문구의 대비가 약할 수 있기 때문입니다. 오류가 발생했을 때는 무엇이 잘못됐는지뿐 아니라 어떻게 고칠 수 있는지도 가까운 위치에서 안내해야 합니다.

  • 문서 언어: 페이지의 기본 언어가 올바르게 선언됐는지 확인합니다.
  • 랜드마크: 헤더, 탐색, 본문, 보조 영역, 푸터를 의미에 맞게 나눕니다.
  • 제목: 시각적 크기가 아니라 문서의 정보 계층에 따라 제목 수준을 선택합니다.
  • 링크 문구: ‘여기’나 ‘더보기’만 반복하지 말고 목적지를 예측할 수 있게 씁니다.
  • 대체 텍스트: 이미지가 전달하는 목적을 문맥에 맞춰 적고 장식 이미지는 중복 낭독을 피합니다.
  • 폼 연결: 레이블, 도움말, 필수 여부, 오류 문구가 해당 입력 요소와 연결됐는지 봅니다.

컴포넌트 단위 완료 조건 만들기

버튼 하나를 만들 때 기본 상태만 확인하면 다른 화면에서 문제가 반복됩니다. 기본, 비활성, 로딩, 오류, 긴 문구, 아이콘 포함 상태를 한곳에서 시험하세요. 디자인 시스템이나 컴포넌트 카탈로그가 있다면 키보드 사용법과 접근 가능한 이름을 함께 문서화해 이후 웹개발 작업의 기준으로 삼을 수 있습니다.

커스텀 탭이나 자동완성처럼 상호작용이 복잡한 컴포넌트는 키보드 규칙을 구현 전에 합의해야 합니다. Tab 키가 모든 탭을 하나씩 방문할지, 방향키가 같은 그룹 안에서 이동할지 정하지 않으면 개발자마다 다른 동작을 만들 수 있습니다. 사용자가 선택을 바꿨을 때 콘텐츠가 즉시 갱신되는지, 별도 실행이 필요한지도 화면 안내와 일치해야 합니다.

  1. 마우스를 연결하지 않은 상태에서 컴포넌트의 모든 기능을 실행합니다.
  2. 초점이 보이고, 비활성 요소로 불필요하게 이동하지 않는지 확인합니다.
  3. 화면 읽기 프로그램에 전달될 이름·역할·상태가 시각 정보와 일치하는지 봅니다.
  4. 문구 길이를 평소의 두 배로 늘려 잘림과 겹침을 검사합니다.
  5. 자바스크립트 오류나 느린 응답이 발생해도 사용자가 현재 상태를 이해할 수 있는지 확인합니다.

개발 원칙: 접근성 속성을 많이 추가했다고 품질이 높아지는 것은 아닙니다. 잘못된 역할과 상태는 정보가 없는 경우보다 사용자를 더 혼란스럽게 만들 수 있으므로, 기본 HTML의 기능을 보존하는 쪽부터 검토합니다.

4. 자동 검사와 손 테스트를 순서대로 겹칩니다

도구가 찾는 오류와 사람이 찾아야 할 문제 나누기

자동 검사 도구는 누락된 속성, 일부 색상 대비 문제, 잘못 중첩된 구조처럼 규칙으로 판단할 수 있는 오류를 빠르게 찾습니다. 개발 중에는 변경한 컴포넌트를 수시로 검사하고, 통합 단계에서는 대표 페이지 전체를 다시 검사하세요. 오류 수가 0이라는 결과만 목표로 삼기보다 각 경고가 실제 사용자에게 어떤 영향을 주는지 이해하는 것이 중요합니다.

자동화만으로 링크 문구가 문맥상 충분한지, 초점 이동이 자연스러운지, 대체 텍스트가 이미지 목적을 설명하는지는 판단하기 어렵습니다. 예를 들어 모든 이미지에 대체 텍스트가 존재해도 파일명이나 ‘이미지’라는 단어만 들어 있다면 실질적인 도움은 되지 않습니다. 따라서 자동 검사를 통과한 뒤 반드시 키보드, 확대 화면, 화면 읽기 환경에서 핵심 과업을 수행해야 합니다.

테스트 범위가 너무 넓다면 방문량과 업무 중요도를 기준으로 우선순위를 정합니다. 로그인, 검색, 결제, 문의 접수처럼 서비스 이용을 좌우하는 경로를 먼저 선택하고, 각 경로에서 정상 상황과 오류 상황을 모두 시험하세요. 같은 템플릿을 쓰는 페이지는 대표 표본을 정하되 콘텐츠 길이와 언어가 다른 사례를 포함하는 편이 안전합니다.

  1. 첫 번째: 코드 검사와 브라우저 개발 도구로 명확한 마크업 오류를 제거합니다.
  2. 두 번째: 마우스 없이 Tab, Shift+Tab, Enter, Space, Esc, 방향키를 사용해 과업을 완료합니다.
  3. 세 번째: 화면을 확대하고 좁은 너비에서 가로 스크롤, 잘림, 고정 요소 겹침을 확인합니다.
  4. 네 번째: 화면 읽기 프로그램으로 제목 목록, 랜드마크, 폼 이름, 상태 변경을 들어봅니다.
  5. 다섯 번째: 오류를 심각도와 발생 경로로 분류하고 수정 후 같은 조건에서 재검사합니다.

버그 티켓을 재현 가능한 문서로 바꾸기

‘스크린 리더에서 이상함’처럼 적힌 버그는 수정과 검증이 어렵습니다. 사용한 브라우저와 보조 기술, 시작 페이지, 입력 순서, 실제 결과, 기대 결과를 남기세요. 가능하다면 해당 요소의 보이는 문구와 키보드 입력도 함께 기록합니다. 특정 제품 조합에서만 재현된다고 단정하기 전에 다른 환경에서 한 번 더 확인하면 제품 문제와 코드 문제를 구분하는 데 도움이 됩니다.

심각도는 코드의 복잡도가 아니라 사용자 영향으로 정합니다. 구매 버튼에 도달할 수 없는 문제는 수정이 간단해도 출시를 막을 수준일 수 있고, 장식 이미지의 불필요한 낭독은 불편하지만 과업을 완전히 차단하지는 않을 수 있습니다. 이 기준을 팀이 공유하면 접근성 버그가 일반 기능 버그보다 무조건 뒤로 밀리는 상황을 줄일 수 있습니다.

  • 차단: 핵심 기능을 시작하거나 완료할 대체 경로가 없습니다.
  • 중대: 기능은 가능하지만 중요한 정보가 누락되거나 매우 많은 시행착오가 필요합니다.
  • 보통: 우회할 수 있으나 반복 사용 시 상당한 불편이 발생합니다.
  • 경미: 이해와 조작에는 큰 영향이 없지만 일관성 또는 품질 개선이 필요합니다.
  • 재검사 조건: 수정된 코드뿐 아니라 같은 컴포넌트를 사용하는 다른 화면도 확인합니다.

5. 배포를 늦추지 말자는 주장도 검증 기준과 함께 봅니다

완벽해질 때까지 출시를 막는 방식의 한계

접근성 문제가 하나라도 있으면 배포해서는 안 된다는 입장도 있습니다. 사용자 권리를 생각하면 충분히 이해할 수 있지만, 모든 페이지와 보조 기술 조합에서 오류가 전혀 없음을 증명하는 것은 현실적으로 어렵습니다. 장기간 출시를 멈추면 기존의 더 불편한 버전을 계속 사용하게 만들 수도 있습니다. 중요한 것은 문제의 존재를 숨기지 않고 사용자 과업을 차단하는 결함과 개선 가능한 결함을 구별하는 것입니다.

반대편에는 ‘일단 출시하고 사용자 제보가 오면 고치자’는 주장도 있습니다. 그러나 접근이 막힌 사용자는 제보 양식 자체를 이용하지 못하거나 서비스를 조용히 떠날 수 있습니다. 제보가 없다는 사실은 문제가 없다는 증거가 아닙니다. 최소한 로그인, 탐색, 입력, 제출, 결제 같은 핵심 경로는 배포 전에 사람이 직접 점검해야 합니다.

따라서 출시 판단표에는 자동 검사 통과 여부만 넣지 말고 사용자 영향, 우회 경로, 수정 예정일, 담당자를 함께 기록하세요. 차단 수준의 오류는 배포 전에 해결하고, 경미한 문제를 안고 출시한다면 공개된 작업 목록과 다음 배포 일정에 포함합니다. 이 방식은 완벽주의와 속도 우선주의 사이에서 팀이 설명 가능한 결정을 내리게 합니다.

  • 키보드만으로 핵심 과업을 완료하지 못하면 배포 중단 후보로 분류합니다.
  • 입력 오류의 원인과 수정 방법을 알 수 없으면 폼 출시 전에 보완합니다.
  • 대체 경로가 있다면 실제로 같은 결과와 비용, 소요 시간으로 이용 가능한지 확인합니다.
  • 미해결 문제마다 사용자 영향, 임시 대응, 담당자, 목표 일정을 기록합니다.
  • 수정이 다음 배포로 밀렸다면 회귀 테스트 항목을 먼저 만들어 누락을 방지합니다.

운영 환경에서만 드러나는 변화를 추적하기

배포 후에는 콘텐츠 편집자가 올린 제목 구조, 외부 위젯 업데이트, 광고와 팝업, 번역 문구 때문에 새로운 문제가 생길 수 있습니다. 정적 페이지 검사만 반복하지 말고 실제 운영 데이터에서 사용량이 높은 경로와 오류가 잦은 폼을 선정해 정기적으로 다시 살펴보세요. 컴포넌트가 수정될 때 관련 접근성 테스트가 함께 실행되도록 개발 절차에 연결하면 회귀 오류를 더 일찍 발견할 수 있습니다.

접근성 개선이 개발팀만의 업무라는 시각에도 거리를 둘 필요가 있습니다. 개발자는 올바른 구조와 상호작용을 구현할 수 있지만, 모호한 버튼 문구와 대체 텍스트, 영상 자막, 고객 지원 경로는 콘텐츠와 운영 정책의 영향을 받습니다. 결국 좋은 웹 접근성은 특정 도구를 구매하거나 검사 점수를 높이는 활동이 아니라, 각 팀이 사용자에게 전달하는 의미와 동작을 지속해서 관리하는 프로그래밍 품질 체계에 가깝습니다.

  1. 배포 직후 실제 주소에서 핵심 경로를 다시 실행합니다.
  2. 외부 인증, 결제, 지도, 채팅 위젯의 키보드 이동과 안내 문구를 확인합니다.
  3. 고객센터에 접근성 문제를 제보할 수 있는 명확한 연락 경로를 제공합니다.
  4. 월별 또는 배포 주기별로 대표 페이지 표본을 바꾸어 검사합니다.
  5. 오류 건수뿐 아니라 해결 시간, 재발률, 핵심 과업 성공 여부를 함께 추적합니다.
  6. 속도를 중시하는 의견과 완성도를 중시하는 의견이 충돌하면 실제 사용자 영향과 검증 결과를 판단 근거로 남깁니다.

웹 접근성 점검부터 배포까지 오류를 줄이는 코딩 순서

댓글목록

등록된 댓글이 없습니다.