TechFeedTechFeed
Next.js런타임

window is not defined — Next.js 서버 렌더에서 브라우저 객체 접근

ReferenceError: window is not defined
한 줄 해결: 서버(Node.js)에는 window·document 가 없는데 렌더·모듈 최상단에서 접근해 발생하며, 브라우저 전용 코드를 useEffect나 ssr:false 안으로 옮기면 됩니다.

이런 증상일 때

next build 또는 SSR 중 "window is not defined"(또는 document/localStorage/navigator)로 빌드가 실패하거나 서버 렌더가 깨집니다. 클라이언트에서는 잘 되던 코드가 서버 렌더 단계에서 터집니다.

원인

  • 컴포넌트 본문이나 모듈 최상단에서 window/document 에 직접 접근
  • window 를 쓰는 라이브러리를 SSR 단계에서 import
  • App Router 에서 use client 선언 없이 브라우저 API 사용

해결 방법

1
useEffect 안으로 이동

window 접근은 마운트 이후에만 일어나도록 useEffect 로 감쌉니다. useEffect 는 클라이언트에서만 실행됩니다.

useEffect(() => {
  const w = window.innerWidth
}, [])
2
typeof 가드

모듈 최상단이라면 typeof window 로 환경을 확인한 뒤 접근합니다.

if (typeof window !== 'undefined') { /* 브라우저 전용 */ }
3
ssr:false 동적 import

window 의존 라이브러리/컴포넌트는 SSR 을 꺼서 클라이언트에서만 로드합니다.

const M = dynamic(() => import('./M'), { ssr: false })
💡 예방: 브라우저 전용 라이브러리는 컴포넌트 레벨에서 동적 import 하거나 use client 경계 안에서만 쓰세요.
Next.jswindowSSRdocumentReferenceError

관련 에러

관련 가이드

React Compiler 1.0 실전 마이그레이션 가이드 — useMemo·useCallback 없는 React 개발Clerk vs Auth0 vs NextAuth.js 2026 — SaaS 인증 서비스 완전 비교Vercel AI SDK 6 완전 가이드 — 에이전트 1급 추상화, MCP 풀 지원, DevTools개발자 포트폴리오 사이트 만들기 2026