feat: 접근성 검사 표준 선택 기능 — WCAG/KWCAG 버전별 선택 지원

3가지 검사 모드(한 페이지, 사이트 크롤링, 목록 업로드) 모두에서 접근성 표준을
선택할 수 있도록 추가. WCAG 2.0 A/AA, 2.1 AA, 2.2 AA와 KWCAG 2.1, 2.2를
지원하며, KWCAG 선택 시 axe-core 결과를 KWCAG 검사항목으로 자동 매핑.

- KWCAG 2.2 (33항목) / 2.1 (24항목) ↔ WCAG 매핑 테이블 (kwcag_mapping.py)
- AccessibilityChecker에 표준 파싱 및 KWCAG 변환 로직 추가
- 전체 API 파이프라인에 accessibility_standard 파라미터 전파
- 프론트엔드 3개 폼에 공용 표준 선택 드롭다운 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
jungwoo choi
2026-02-14 08:36:14 +09:00
parent 21259eb40a
commit bffce65aca
19 changed files with 857 additions and 59 deletions

View File

@ -10,6 +10,10 @@ import { api, ApiError } from "@/lib/api";
import { isValidUrl } from "@/lib/constants";
import { useSiteInspectionStore } from "@/stores/useSiteInspectionStore";
import { cn } from "@/lib/utils";
import {
AccessibilityStandardSelect,
type AccessibilityStandard,
} from "./AccessibilityStandardSelect";
/** 최대 페이지 수 옵션 (0 = 무제한) */
const MAX_PAGES_OPTIONS = [10, 20, 50, 0] as const;
@ -28,6 +32,8 @@ export function SiteCrawlForm() {
const [maxPages, setMaxPages] = useState<number>(20);
const [maxDepth, setMaxDepth] = useState<number>(2);
const [concurrency, setConcurrency] = useState<number>(4);
const [accessibilityStandard, setAccessibilityStandard] =
useState<AccessibilityStandard>("wcag_2.1_aa");
const router = useRouter();
const { setSiteInspection } = useSiteInspectionStore();
@ -52,7 +58,8 @@ export function SiteCrawlForm() {
trimmedUrl,
maxPages,
maxDepth,
concurrency
concurrency,
accessibilityStandard
);
setSiteInspection(response.site_inspection_id, trimmedUrl);
router.push(
@ -93,7 +100,7 @@ export function SiteCrawlForm() {
</div>
{/* 옵션 영역 */}
<div className="grid grid-cols-1 sm:grid-cols-3 gap-4">
<div className="grid grid-cols-1 sm:grid-cols-4 gap-4">
{/* 최대 페이지 수 */}
<div>
<label className="text-xs text-muted-foreground mb-1.5 block">
@ -168,6 +175,13 @@ export function SiteCrawlForm() {
))}
</div>
</div>
{/* 접근성 기준 */}
<AccessibilityStandardSelect
value={accessibilityStandard}
onChange={setAccessibilityStandard}
disabled={isLoading}
/>
</div>
{/* 사이트 크롤링 시작 버튼 */}