복잡한 동적 웹 UI 컴포넌트(예: 커스텀 드롭다운, 탭 메뉴, 모달 다이얼로그)를 HTML과 CSS만으로 구현할 때, WAI-ARIA 속성을 사용하여 웹 접근성을 어떻게 보장할 수 있는지 구체적인 속성(예: role, aria-expanded, aria-labelledby)과 그 활용 사례를 들어 설명해주세요.
힌트 · 시맨틱 마크업의 한계점, ARIA의 역할, 키보드 접근성, 스크린 리더 상호작용을 고려하여 답변하세요.
모범답안
HTML과 CSS만으로는 시맨틱 마크업의 한계로 인해 복잡한 동적 UI 컴포넌트의 의미와 상태를 스크린 리더 사용자에게 명확히 전달하기 어렵습니다. WAI-ARIA는 이러한 간극을 메워 웹 접근성을 향상시키는 데 필수적입니다.
예를 들어, 커스텀 드롭다운 메뉴를 구현할 때, 버튼에 role="button"과 aria-haspopup="true"를 부여하여 이 요소가 팝업 메뉴를 트리거함을 알립니다. 메뉴가 열리고 닫히는 상태는 aria-expanded 속성으로 관리하며, true 또는 false 값을 가집니다. 메뉴 항목들은 role="menuitem"으로 지정하고, 메뉴 전체는 role="menu"로 감싸는 것이 좋습니다.
탭 메뉴의 경우, 각 탭 버튼에는 role="tab"을, 해당 탭 패널에는 role="tabpanel"을 부여합니다. 현재 활성화된 탭을 나타내기 위해 aria-selected="true"를 사용하고, 탭 버튼과 패널 간의 연결은 aria-controls 속성을 사용하여 명확히 합니다.
모달 다이얼로그는 role="dialog"로 지정하고, 모달의 제목을 스크린 리더가 인식하도록 aria-labelledby 속성을 사용하여 제목 요소의 ID를 연결합니다. 또한, 모달이 열렸을 때 사용자가 모달 외부로 포커스를 이동할 수 없도록 aria-modal="true"를 설정하는 것도 중요합니다.
이러한 ARIA 속성들을 적절히 활용하면, 키보드만으로도 모든 기능을 사용할 수 있게 하고 스크린 리더 사용자가 컴포넌트의 역할, 상태, 상호작용 방식을 정확히 이해하도록 도와 웹 접근성을 크게 향상시킬 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 HTML / CSS 면접 질문
- Sass나 Less와 같은 CSS 전처리기(CSS Preprocessors)를 사용하는 주된 이점은 무엇이며, 실제 프로젝트에서 어떤 기능(예: 변수, 믹스인, 중첩 등)들을 활용하여 CSS 개발의 효율성과 유지보수성을 높일 수 있는지 설명해주세요.
- 대규모 웹 애플리케이션에서 CSS를 효과적으로 관리하고 확장하기 위한 아키텍처 패턴(예: BEM, SMACSS, OOCSS) 중 하나를 선택하여 설명하고, 해당 패턴을 실제 프로젝트에 적용했을 때의 장점과 한계점을 구체적인 사례와 함께 논해주세요.
- 웹 페이지 로딩 성능 최적화를 위해 Critical CSS를 추출하고 인라인하는 기법에 대해 설명하고, 이 과정에서 발생할 수 있는 잠재적인 문제점(예: FOUC, 캐싱 문제)과 해결 방안을 논해주세요.
- 브라우저의 렌더링 파이프라인(DOM, CSSOM, Render Tree, Layout, Paint, Compositing)을 설명하고, 특정 CSS 속성(예: width 변경 vs transform: scale()) 변경이 렌더링 성능에 미치는 영향이 왜 다른지, 그리고 이를 최적화하기 위한 방법(예: will-change 속성)에 대해 논해주세요.
- CSS Custom Properties(CSS 변수)를 활용하여 다크 모드, 브랜드 테마 등 동적인 테마 시스템을 구축하는 방법을 설명하고, JavaScript와의 연동 및 폴백(fallback) 전략에 대해 구체적인 코드 예시와 함께 논해주세요.
- CSS Houdini가 기존 CSS의 한계를 어떻게 극복하려 하는지, 그리고 Houdini의 주요 API(예: Worklet, Properties and Values API, Layout API, Paint API) 중 하나를 선택하여 설명하고, 이를 활용하여 어떤 종류의 UI/UX를 구현할 수 있을지 구체적인 아이디어를 제시해주세요.