공공기관 고도화 실전
폼 에러 메시지/필수 표시 규칙 정리(검수 대응)
DDODDO_LAB
2026. 2. 26. 14:35
반응형
공공기관 검수 대응 가이드
공공기관 고도화에서
폼 영역은 접근성 QA의 핵심 체크 대상이다.
특히 자주 지적되는 항목:
- 필수 입력 표시가 시각적으로만 존재
- 에러 메시지가 입력창과 연결되지 않음
- 포커스 이동 미흡
- 색상으로만 상태 구분
- placeholder를 label처럼 사용
이번 글은
실무에서 바로 적용 가능한 규칙 중심으로 정리한다.

1. 필수 입력 표시 규칙
❌ 자주 틀리는 방식
<!-- HTML -->
<label>이름 *</label>
<input type="text">
문제:
- *가 시각적으로만 의미 있음
- 스크린리더는 필수인지 모름
✅ 올바른 방식
<!-- HTML -->
<label for="username">
이름 <span aria-hidden="true">*</span>
</label>
<input
type="text"
id="username"
required
aria-required="true">
핵심 포인트
- required 속성 사용
- aria-required="true" 명시
- 별표는 aria-hidden 처리
필수 안내 문구도 필요
폼 상단에
표시는 필수 입력 항목입니다.
같은 안내 문구를 제공하면 더 좋다.
2. 에러 메시지 구조 규칙
❌ 잘못된 구조
<!-- HTML -->
<input type="text">
<p class="error">이름을 입력하세요.</p>
문제:
- 입력 필드와 에러 메시지 연결 안 됨
✅ 올바른 구조
<!-- HTML -->
<label for="username">이름</label>
<input
type="text"
id="username"
aria-describedby="username-error"
aria-invalid="true">
<p id="username-error" class="error">
이름을 입력하세요.
</p>
핵심 포인트
- aria-describedby로 연결
- aria-invalid="true" 상태 표시
- id로 관계 명확화
3. 에러 발생 시 포커스 이동
공공기관 QA에서 자주 지적됨.
제출 시 에러가 있다면:
- 첫 번째 에러 필드로 포커스 이동
- 에러 메시지가 읽히도록 구성
JS 예시:
document.querySelector('.error-field').focus();
포커스가 이동하지 않으면
접근성 미흡 판정 받을 수 있다.
4. 색상만으로 상태를 구분하지 말 것
1. 빨간 테두리만 표시
2. 텍스트 없이 색상만 변경
✔ 아이콘 + 텍스트 + 색상 조합 권장
5. placeholder는 label이 아니다
❌ 잘못된 예
<!-- HTML -->
<input type="text" placeholder="이름">
문제:
- 입력하면 사라짐
- 스크린리더에서 불명확
- WCAG 위반 가능성
✔ label은 반드시 존재해야 한다.
6. 필수/선택 구분 방법
권장 패턴:
<!-- HTML -->
<label for="phone">
연락처
<span class="required" aria-hidden="true">*</span>
</label>
<input
id="phone"
required
aria-required="true">
선택 항목은 별도 표시:
<!--HTML -->
<label for="memo">
메모 (선택)
</label>
7. 실전 체크리스트 (검수 대응용)
필수 표시
- required 속성 존재
- aria-required="true"
- 별표는 aria-hidden
- 필수 안내 문구 제공
에러 메시지
- aria-describedby 연결
- aria-invalid 사용
- 포커스 이동 구현
- 색상 외 텍스트 제공
구조
- label 반드시 존재
- placeholder를 label로 대체하지 않음
- 입력 그룹 시 fieldset/legend 사용
8. fieldset / legend 사용 예 (그룹형)

<!-- HTML -->
<fieldset>
<legend>성별 선택</legend>
<label>
<input type="radio" name="gender" value="male">
남성
</label>
<label>
<input type="radio" name="gender" value="female">
여성
</label>
</fieldset>
라디오/체크박스 그룹은
fieldset + legend가 기본이다.
정리
폼 접근성은
“에러가 나면 빨갛게 바꾸는 것”
이 아니라
“관계를 명확히 연결하는 것”
이다.
필수 표시, 에러 연결, 포커스 이동.
이 세 가지만 정확히 지켜도
QA 통과 확률이 크게 올라간다.
반응형