SVG 접근성: 벡터 그래픽을 포용적으로 만드는 방법
모든 사람을 위해 작동하는 접근성 있는 SVG 그래픽을 만드세요. ARIA, 스크린 리더, 포커스 관리, 포용적 디자인에 대한 완전 가이드.

Founder of VectoSolve
Self-taught developer, founder and sole developer of VectoSolve since 2024. He builds the conversion engine and the cutting, embroidery and 3D printing exports.
How this article was made: drafted with AI assistance, then edited and fact-checked before publication. About the author
Key Takeaways
- 전 세계 10억 명 이상이 보조 기술에 의존합니다 — 접근성 있는 SVG는 윤리적이자 법적 의무입니다
-
장식용 SVG에는
aria-hidden="true"을, 정보 전달용에는role="img"과<title>/<desc>를 사용하세요 - WCAG 2.1은 그래픽과 UI 컴포넌트에 3:1, SVG 내 텍스트에 4.5:1 대비를 요구합니다
-
prefers-reduced-motion을 항상 존중하여 요청하는 사용자의 SVG 애니메이션을 비활성화하세요 - 실제 스크린 리더(NVDA, VoiceOver, TalkBack)로 테스트하세요 — 자동화 도구는 접근성 문제의 ~30%만 감지합니다
SVG 접근성이 중요한 이유
전 세계 10억 명 이상이 장애를 갖고 살아갑니다. SVG 그래픽을 접근성 있게 만들면 모든 사람이 콘텐츠를 이해하고 상호작용할 수 있습니다. 또한 법적 요건인 경우가 많습니다.
접근성 기초
보조 기술 이해하기
사람들이 SVG에 접근하는 방법:
- 스크린 리더 (NVDA, JAWS, VoiceOver)
- 키보드 내비게이션
- 스위치 장치
- 화면 돋보기
- 음성 제어
이미지에 대한 WCAG 가이드라인
핵심 요구사항:
WCAG 2.1 요구사항:
- 비텍스트 콘텐츠에는 대안이 필요
- 색상만으로 정보를 전달하지 않음
- 충분한 색상 대비
- 손실 없이 크기 조절 가능
- 포커스 가능한 요소는 키보드로 접근 가능
SVG 접근성 패턴
장식용 SVG
순수하게 시각적인 요소의 경우:
<svg aria-hidden="true" focusable="false">
<!-- 장식용 그래픽 -->
</svg>
사용 시기:
- 배경 패턴
- 시각적 장식
- 텍스트와 함께하는 중복 아이콘
- 순수하게 미적인 요소
정보 전달 SVG
의미 있는 그래픽의 경우:
<svg role="img" aria-labelledby="chart-title">
<title id="chart-title">매출 성장 2025</title>
<!-- 차트 콘텐츠 -->
</svg>
사용 시기:
- 차트와 그래프
- 다이어그램
- 인포그래픽
- 독립형 아이콘
복잡한 SVG
상세 정보의 경우:
<svg role="img" aria-labelledby="title desc">
<title id="title">조직도</title>
<desc id="desc">
CEO가 최상단에 있는 계층 구조,
세 명의 VP가 보고하며 각각 팀을 보유.
</desc>
<!-- 복잡한 다이어그램 -->
</svg>
Pro Tip: 복잡한 데이터 시각화(차트, 지도)의 경우, SVG와 함께 항상 숨겨진 <table> 대안을 제공하세요. 스크린 리더는 SVG 경로 데이터보다 테이블을 훨씬 효과적으로 파싱합니다.
A Full Year of Conversions for $49
Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime
Get the Annual DealSVG용 ARIA 속성
필수 속성
<!-- 역할 정의 -->
role="img" <!-- 정적 이미지 -->
role="graphics-document" <!-- 복잡한 인터랙티브 -->
<!-- 라벨 -->
aria-label="..." <!-- 간단한 설명 -->
aria-labelledby="..." <!-- 제목 요소 참조 -->
aria-describedby="..." <!-- 상세 설명 -->
<!-- 상태 -->
aria-hidden="true" <!-- AT에서 숨기기 -->
focusable="false" <!-- 포커스 방지 -->
Title과 Desc 요소
네이티브 SVG 접근성:
<svg role="img" aria-labelledby="icon-title icon-desc">
<title id="icon-title">경고</title>
<desc id="icon-desc">
주의를 나타내는 느낌표가 있는 노란 삼각형
</desc>
<path d="..."/>
</svg>
"접근성은 마지막에 추가하는 기능이 아닙니다 — 모든 것을 더 좋게 만드는 디자인 제약입니다. 접근성 있는 SVG는 잘 구조화된 SVG입니다.
인터랙티브 SVG 접근성
포커스 가능한 요소
인터랙티브 부분을 접근성 있게 만들기:
<svg>
<a href="/section-1" tabindex="0">
<rect x="0" y="0" width="100" height="50"/>
<text>섹션 1</text>
</a>
</svg>
포커스 인디케이터
가시적 포커스 상태:
svg a:focus,
svg [tabindex]:focus {
outline: 2px solid #0066cc;
outline-offset: 2px;
}
키보드 내비게이션
키보드 접근 보장:
svgElement.addEventListener('keydown', (e) => {
if (e.key === 'Enter' || e.key === ' ') {
// 요소 활성화
}
});
색상 접근성
대비 요구사항
WCAG 대비율:
최소 요구사항:
텍스트: 4.5:1 (일반), 3:1 (큰 텍스트)
그래픽: 배경 대비 3:1
UI 컴포넌트: 3:1
대비 테스트
검증 도구:
- 브라우저 DevTools
- 대비 체커
- 접근성 감사
색상 독립성
색상에만 의존하지 않기:
<!-- 나쁜 예: 색상만 -->
<circle fill="red"/> <!-- 에러 -->
<circle fill="green"/> <!-- 성공 -->
<!-- 좋은 예: 패턴 + 색상 -->
<circle fill="red">
<title>에러</title>
</circle>
<use href="#checkmark" fill="green">
<title>성공</title>
</use>
Free SVG Tools for Crafters
Design Checker · Color Separator · Mat Preview · Offset Generator · Text to SVG
Check Your SVG Free아이콘 접근성
아이콘 버튼
<button aria-label="대화상자 닫기">
<svg aria-hidden="true" focusable="false">
<path d="..."/>
</svg>
</button>
텍스트 포함 아이콘
<button>
<svg aria-hidden="true"><!-- 아이콘 --></svg>
문서 저장
</button>
독립형 아이콘
<svg role="img" aria-label="알림: 읽지 않은 메시지 3개">
<circle cx="12" cy="12" r="10" fill="#ff0000"/>
<text x="12" y="16" text-anchor="middle">3</text>
</svg>
애니메이션 접근성
사용자 설정 존중
@media (prefers-reduced-motion: reduce) {
svg * {
animation: none !important;
transition: none !important;
}
}
일시정지 컨트롤
<button id="toggle-animation">
애니메이션 일시정지
</button>
<svg class="animated-svg">
<!-- 애니메이션 콘텐츠 -->
</svg>
WCAG 2.1 성공 기준 2.3.1은 1초에 3번 이상 깜박이는 것이 없어야 한다고 요구합니다. SVG 애니메이션에 빠른 색상 변화나 스트로보 효과가 포함된 경우, 일시정지 컨트롤을 제공하고 prefers-reduced-motion을 존중하세요.
SVG 접근성 테스트
수동 테스트
체크리스트:
- 키보드만으로 내비게이션
- 스크린 리더로 테스트
- 200% 줌에서 확인
- 색상 대비 검증
- 사용자와 함께 테스트
자동 테스트
도구:
- axe DevTools
- WAVE
- Lighthouse
- Pa11y
스크린 리더 테스트
테스트 대상:
- NVDA (Windows, 무료)
- VoiceOver (Mac/iOS, 내장)
- TalkBack (Android, 내장)
- JAWS (Windows, 상용)
A Full Year of Conversions for $49
Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime
Get the Annual Deal일반 패턴 레퍼런스
로고
<a href="/">
<svg role="img" aria-label="회사명 - 홈">
<title>회사 로고</title>
<!-- 로고 경로 -->
</svg>
</a>
데이터 시각화
<svg role="img" aria-labelledby="chart-title">
<title id="chart-title">월별 매출 2025</title>
<desc>1월 ₩1,500만에서 12월 ₩6,750만으로
매출이 증가하는 막대 차트</desc>
<!-- 대체 테이블 제공 -->
</svg>
<table class="sr-only">
<!-- 접근성 있는 데이터 테이블 -->
</table>
아이콘 시스템
<svg class="icon" aria-hidden="true" focusable="false">
<use href="#icon-search"/>
</svg>
<span class="icon-label">검색</span>
VectoSolve와 접근성
접근성을 위한 깔끔한 출력
VectoSolve는 깔끔한 SVG를 생산합니다:
- 접근성 속성 추가가 용이
- 수정에 적합한 구조
- 접근성 있는 구현 준비 완료
변환 후 접근성
벡터화 후:
- 적절한 role 추가
- title/desc 요소 포함
- ARIA 속성 설정
- 보조 기술로 테스트
결론
접근성 있는 SVG는 모든 사람에게 혜택을 줍니다 — 더 시맨틱하고, 더 잘 구조화되며, 유지보수가 쉽습니다. 이러한 패턴을 따르고 정기적으로 테스트하면 벡터 그래픽이 진정으로 포용적임을 보장할 수 있습니다.
| WCAG 요구사항 | SVG 구현 | 영향 |
|---|---|---|
| 텍스트 대안 (1.1.1) | <title>과 <desc> 요소 | 스크린 리더가 이미지 목적을 안내 |
| 색상 대비 (1.4.11) | UI 그래픽에 최소 3:1 | 저시력 사용자에게 가시적 |
| 키보드 접근 (2.1.1) | focusable=true + tabindex | 인터랙티브 SVG가 키보드로 도달 가능 |
| 동작 감소 (2.3.3) | prefers-reduced-motion 미디어 쿼리 | 전정 장애를 위해 애니메이션 중지 |
Free SVG Tools for Crafters
Design Checker · Color Separator · Mat Preview · Offset Generator · Text to SVG
Check Your SVG Free출처 및 참고 자료
- MDN Web Docs: SVG 접근성 — SVG에서 ARIA 역할, 제목, 설명에 대한 종합 레퍼런스
- W3C SVG 2 사양 — SVG 요소와 속성에 대한 공식 접근성 요구사항
- web.dev: 접근성 — 포용적이고 성능 좋은 웹 경험을 구축하기 위한 Google 가이드
- Smashing Magazine: 접근성 있는 SVG — SVG 아이콘과 일러스트레이션을 스크린 리더 친화적으로 만드는 실용 튜토리얼