크리티컬 CSS가 적절한 문제인지 결정하기
감사 레이블(audit)이나 추정이 아니라 증거로 시작하세요. 우선순위 페이지에 대해 대표적인 모바일 및 데스크톱 프로필에서 냉캐시 로드를 기록하세요. 워터폴과 트레이스를 검사하세요: 스타일시트가 첫 콘텐츠를 지연시키고 있으며 그 크기가 의미 있을 만큼 큰가요? DevTools Coverage는 한 세션에서 사용된 CSS를 보여줄 뿐 모든 라우트나 상태를 대표하지 않습니다.
유지보수가 적은 작업을 먼저 시도하세요: 사용하지 않는 규칙 제거, 출력 파일 축소 및 압축, 라우트별 CSS만 로드, 그리고 plain CSS의 @import 체인을 피하세요. web.dev는 추출과 지연을 고급 기법으로 분류합니다.
측정된 첫 렌더 지연이 CSS와 연관되고, 냉방문(cold visit)이 중요하며 초기 레이아웃을 유지할 수 있을 때.
서버 지연, 이미지, 폰트, 자바스크립트 또는 이미 작은 스타일시트가 병목인 경우 인라인 CSS는 도움이 되지 않을 가능성이 큽니다.
초기 뷰포트를 테스트 행렬로 정의하기
초기 뷰포트(때로는 'above the fold')는 스크롤하기 전 방문자가 보는 화면입니다. 기기, 확대 비율, 언어, 쿠키, 콘텐츠 변형이 이것을 바꾸므로 보편적 높이는 없습니다. 데스크톱 한 장의 스크린샷으로는 휴대폰이나 번역된 헤드라인을 놓칠 수 있습니다.
명명된 프로파일을 사용하세요. 좁은 레이아웃과 넓은 레이아웃, 주요 브레이크포인트, 서로 다른 로그인 구조, 그리고 상단에 나타나는 동의 배너, 프로모션, 유지보수 메시지, 유효성 검사 오류 등을 포함하세요.
템플릿, 뷰포트, 로케일, 인증, 동의, 상단 페이지 변형을 기록하여 세트 생성과 테스트에 사용하세요.
빠른 스크롤, 메뉴, 폼 포커스를 테스트하세요. 지연된 규칙의 제어가 전체 CSS 적용 전에도 나타날 수 있다면 안전하지 않습니다.
단일 소스 오브 트루스로부터 소규모 집합 추출하기
프로덕션 빌드에서 크리티컬 CSS를 생성하세요. 추출은 뷰포트에서 사용된 규칙을 식별할 수 있지만 조건부, 동적, 전환 규칙을 검토해야 합니다. 디자인 시스템을 템플릿에 수기 복사해서는 안 됩니다; 컴포넌트와 마크업이 진화하면서 괴리가 발생합니다.
출력은 릴리스와 함께 생성·버전 관리되어야 하며, 원본 CSS가 권위 있는(오소리티티) 소스로 남아야 합니다. 초기 사용 가능한 상태에 필요한 규칙만 인라인하세요. 큰 인라인 블록은 HTML을 지연시키고 이후 페이지에서 외부 CSS 캐시로 재사용할 수 없습니다. 변경이 개선인지 판단하기 전에 냉방문과 웜 네비게이션을 비교하세요.
압축된 인라인 바이트, 남은 스타일시트 바이트, 중복된 규칙을 추적하세요. 블로킹 요청이 하나 줄었다고 해서 반드시 순이익은 아닙니다.
추출 결과가 비었거나 인라인 크기 예산을 초과하거나 리뷰된 기준선에서 예기치 않게 변경되면 빌드를 플래그하세요.
나머지 CSS를 안전하게 로드하고 정책 제약을 존중하기
나머지 스타일시트는 하위 콘텐츠와 이후 상태가 완성된 모양을 보기 전에 도착해야 합니다. 문서화된 패턴으로 CSS를 preload로 요청한 뒤 로드되면 stylesheet로 바꾸는 방식이 있으며, 비자바스크립트(no-JS) 폴백도 포함해야 합니다. preload는 리소스를 일찍 요청하지만 CSS를 적용하지는 않습니다. 불완전한 집합은 눈에 띄는 재스타일을 일으킬 수 있습니다.
인라인 로드 핸들러를 사용하기 전에 Content Security Policy를 확인하세요. web.dev는 정책이 인라인 onload 자바스크립트를 금지할 수 있으므로 호환 가능한 로더나 다른 설계를 사용하라고 권합니다. 자바스크립트를 비활성화한 상태로도 테스트하세요. 미디어 쿼리로 한정된 파일은 인쇄(print) 같은 진짜 조건부 스타일에는 도움이 되며, 미일치(nonmatching) 쿼리는 렌더 차단하지 않지만 여전히 다운로드될 수 있습니다.
자바스크립트가 없는 방문자도 전체 CSS를 받고 우선 순위 여정을 완료하는지 검증하세요.
상단 뷰포트에서 늦게 로드되는 폰트나 이미지 문제는 별도로 조사하세요. 크리티컬 CSS는 해당 페치 동작을 해결하지 않습니다.
시각적, 기능적, 캐시 회귀를 테스트하기
각 명명된 뷰포트와 상단 페이지 상태에서 시각 비교를 사용하세요. 스타일이 적용되지 않은 텍스트, 겹침, 숨겨진 내비게이션, 누락된 포커스 표시기, 레이아웃 이동, 그리고 지연된 CSS가 적용될 때의 깜빡임(snap) 등을 확인하세요. 키보드 내비게이션, 터치 경로, 오류 및 빠른 스크롤을 모두 실행해 보세요. 지연된 규칙이 컨트롤을 사용 불능으로 만든다면 그 규칙은 크리티컬 경로에 포함되거나 디자인을 변경해야 합니다.
냉캐시와 웜캐시 방문을 테스트하세요. 냉캐시 테스트는 CSS 대기 제거가 렌더를 개선하는지 보여주고, 웜캐시 테스트는 반복되는 인라인 바이트 비용을 보여줍니다. 캐시된 이전 HTML과 배포 후 복귀도 테스트하세요. 캐시된 HTML이 참조할 수 있는 자산을 유지하고, 핑거프린트된 스타일시트 URL을 덮어쓰지 마세요.
첫 콘텐츠와 주요 가시 콘텐츠를 비교한 뒤 트레이스를 사용해 개선 또는 회귀를 설명하세요.
포커스, 대비, 모션 선호도, 확대(줌), 읽기 순서를 포함하세요. 렌더가 빨라진 것이 접근성에 문제가 있으면 성공이 아닙니다.
되돌릴 수 있는 전달 기능으로 운영하기
파이프라인에 책임자를 지정하고 입력, 아티팩트, 템플릿, 테스트 프로파일, 인라인 크기 제한을 문서화하세요. CSS, 마크업, 컴포넌트 라이브러리, 기능 플래그 또는 상단-뷰포트 서드파티가 변경될 때마다 테스트를 실행하세요. Coverage는 리뷰를 안내하지만 하나의 기록으로는 규칙이 모든 곳에서 안전하다는 것을 증명할 수 없습니다.
가능한 경우 되돌릴 수 있는 구성 뒤에서 릴리스하세요. 알려진 양호한 스타일시트 경로, 아티팩트 버전, 빌드 식별자, 복구 방법을 기록하세요. 회귀가 나타나면 먼저 호환 가능한 전달을 복원한 뒤 누락된 상태를 진단하세요. SIU는 이 워크플로우를 사용해 고객 영향이 확산되기 전에 핵심 경로를 안정화합니다.
새 배너, 동의 플로우, 로케일, 브레이크포인트 또는 계정 레이아웃이 있으면 재생성 및 테스트가 필요합니다.
생성 가능한 호환 전달로 템플릿과 전달 구성을 되돌리세요. 이전 문서가 참조할 수 있는 불변(asset URL)을 변경하지 마세요.
