프론트엔드 개발 · 심화
CSS Cascade Layers(@layer)가 도입된 배경과 @layer가 기존 CSS의 캐스케이드, 특수성(Specificity), 그리고 !important 규칙에 어떤 영향을 미치는지 상세히 설명하고, 이를 통해 대규모 프로젝트에서 CSS 충돌을 어떻게 효과적으로 관리할 수 있는지 논해주세요.
힌트 · 레이어 순서, 레이어 내부/외부 특수성, !important의 우선순위 변화, CSS 관리 용이성을 중심으로 설명하세요.
@layer캐스케이드 제어특수성 조정!important 재정의CSS 충돌 방지
모범답안
CSS Cascade Layers(@layer)는 CSS가 커지면서 스타일 충돌 관리가 어려워지는 문제를 해결하기 위해 도입되었습니다. 기존에는 CSS 파일 순서, 선택자 특수성, !important 규칙만으로 스타일 우선순위를 결정했는데, 규모가 커질수록 예측하기 어려워졌죠.
@layer를 사용하면 스타일을 논리적인 레이어로 묶고, 레이어 순서를 명시적으로 정의할 수 있습니다. 레이어 순서가 캐스케이드에 영향을 미쳐, 나중에 선언된 레이어의 스타일이 우선 적용됩니다.
특수성의 경우, 레이어 내부에서는 기존 규칙을 따르지만, 레이어 외부에서는 레이어 순서가 우선합니다. 즉, 특수성이 낮더라도 나중에 선언된 레이어의 스타일이 먼저 적용될 수 있습니다. !important는 레이어 내부에서는 여전히 강력하지만, 레이어 외부에서는 레이어 순서에 따라 재정의될 수 있습니다.
이러한 특징 덕분에 대규모 프로젝트에서 CSS 충돌을 효과적으로 관리할 수 있습니다. 예를 들어, 디자인 시스템 레이어, 컴포넌트 레이어, 유틸리티 레이어 등으로 나누어 관리하면 스타일 충돌을 예측하고 해결하기 쉬워집니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 HTML / CSS 면접 질문
- 브라우저의 렌더링 파이프라인(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를 구현할 수 있을지 구체적인 아이디어를 제시해주세요.