프론트엔드 개발 · 심화
브라우저의 렌더링 파이프라인(DOM, CSSOM, Render Tree, Layout, Paint, Compositing)을 설명하고, 특정 CSS 속성(예: width 변경 vs transform: scale()) 변경이 렌더링 성능에 미치는 영향이 왜 다른지, 그리고 이를 최적화하기 위한 방법(예: will-change 속성)에 대해 논해주세요.
힌트 · 각 단계의 역할, GPU 가속, 레이어 생성, `transform`과 `opacity` 속성의 특성을 중심으로 설명하세요.
DOMCSSOMRender TreeLayoutPaint
모범답안
브라우저 렌더링 파이프라인은 DOM과 CSSOM을 조합해 렌더 트리를 만들고, 레이아웃 계산 후 페인팅, 그리고 컴포지팅 과정을 거쳐 화면에 요소를 그립니다.
width 변경은 레이아웃 단계를 다시 거쳐야 하므로 비용이 많이 듭니다. 반면 transform: scale()은 레이아웃 단계를 건너뛰고 GPU 가속을 활용하여 페인팅과 컴포지팅만으로 처리되므로 훨씬 빠릅니다. opacity도 마찬가지입니다.
성능 최적화를 위해 will-change 속성을 사용하면 브라우저가 해당 요소의 변경을 미리 예측하여 레이어를 생성하고 GPU 가속을 준비하도록 힌트를 줄 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 HTML / CSS 면접 질문
- 대규모 웹 애플리케이션에서 CSS를 효과적으로 관리하고 확장하기 위한 아키텍처 패턴(예: BEM, SMACSS, OOCSS) 중 하나를 선택하여 설명하고, 해당 패턴을 실제 프로젝트에 적용했을 때의 장점과 한계점을 구체적인 사례와 함께 논해주세요.
- 웹 페이지 로딩 성능 최적화를 위해 Critical CSS를 추출하고 인라인하는 기법에 대해 설명하고, 이 과정에서 발생할 수 있는 잠재적인 문제점(예: FOUC, 캐싱 문제)과 해결 방안을 논해주세요.
- 복잡한 동적 웹 UI 컴포넌트(예: 커스텀 드롭다운, 탭 메뉴, 모달 다이얼로그)를 HTML과 CSS만으로 구현할 때, WAI-ARIA 속성을 사용하여 웹 접근성을 어떻게 보장할 수 있는지 구체적인 속성(예: role, aria-expanded, aria-labelledby)과 그 활용 사례를 들어 설명해주세요.
- CSS Custom Properties(CSS 변수)를 활용하여 다크 모드, 브랜드 테마 등 동적인 테마 시스템을 구축하는 방법을 설명하고, JavaScript와의 연동 및 폴백(fallback) 전략에 대해 구체적인 코드 예시와 함께 논해주세요.
- CSS Houdini가 기존 CSS의 한계를 어떻게 극복하려 하는지, 그리고 Houdini의 주요 API(예: Worklet, Properties and Values API, Layout API, Paint API) 중 하나를 선택하여 설명하고, 이를 활용하여 어떤 종류의 UI/UX를 구현할 수 있을지 구체적인 아이디어를 제시해주세요.
- CSS Cascade Layers(@layer)가 도입된 배경과 @layer가 기존 CSS의 캐스케이드, 특수성(Specificity), 그리고 !important 규칙에 어떤 영향을 미치는지 상세히 설명하고, 이를 통해 대규모 프로젝트에서 CSS 충돌을 어떻게 효과적으로 관리할 수 있는지 논해주세요.