본문 바로가기
Frontend

FOUC: App Router 환경 Ant Design v5 SSR 설정

by 미래 감자 2026. 2. 4.

❗ 문제 상황

Next.js 15(App Router) 환경에서 Ant Design v5를 사용해 구현한 SelectBox 컴포넌트가 페이지 새로고침 시 일시적으로 스타일이 풀리는 문제를 겪었다.

  • 첫 렌더링 시 레이아웃이 깨짐
  • 잠깐 기본 스타일로 보였다가 다시 정상 적용

FOUC(Flash of Unstyled Content) 증상이 발생


🔍  발생 원인

Ant Design v5는 전통적인 CSS 파일을 사용하는 대신 CSS-in-JS 방식으로 런타임에 스타일을 생성한다.

서버에서 HTML만 내려오고 CSS는 클라이언트 JS가 실행된 뒤에야 생성되는 것이다.

1. 서버 → 스타일 없는 HTML 전달
2. 브라우저 → HTML 먼저 렌더링
3. 클라이언트 JS 실행
4. Antd 스타일 생성 및 주입

이 과정에서 스타일이 없는 상태가 잠깐 노출되며, 그 결과 CSS가 “풀린 것처럼” 보이게 되는 것이다.

 

즉, SSR 환경에서 Ant Design v5 스타일이 서버 HTML에 포함되지 않는다.

 

✅ 해결 방법

Next.js 15 이상(App Router) 환경에서 Ant Design v5를 SSR과 함께 올바르게 사용하려면 @ant-design/nextjs-registry를 반드시 적용해야 한다.

 

이 레지스트리는:

  • 서버 렌더링 시 Antd 컴포넌트가 사용하는 스타일을 미리 수집
  • 해당 CSS를 <style> 태그로 HTML에 직접 주입
  • 브라우저가 HTML + CSS를 동시에 렌더링하도록 보장

👉 결과적으로 FOUC를 완전히 방지한다.

 

1.  패키지 설치

npm install antd @ant-design/nextjs-registry

 

2.  app/layout.tsx 설정

import { AntdRegistry } from "@ant-design/nextjs-registry";

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang="ko">
      <body>
        <AntdRegistry>{children}</AntdRegistry>
      </body>
    </html>
  );
}