← 개발일지

Next.js 빌드 에러 해결: Date 객체 렌더링 오류 (Objects are not valid as a React child)


Next.js 빌드 에러 해결: Date 객체 렌더링 오류 완벽 가이드

안녕하세요! 오늘은 Next.js 프로젝트를 빌드(npm run build)하거나 정적 페이지를 생성할 때 발생하는 대표적인 렌더링 에러를 해결해 보겠습니다. 특히 옵시디언(Obsidian) 기반의 블로그나 마크다운 데이터를 가져와서 웹에 뿌려줄 때 자주 발생하는 문제입니다.

1. 에러 현상: "Objects are not valid as a React child"

Next.js 빌드 중 다음과 같은 에러가 발생하며 중단된다면 99% 데이터 형식 문제입니다.

⨯ Next.js build worker exited with code: 1 Error: Objects are not valid as a React child (found: [object Date]). If you meant to render a collection of children, use an array instead.

이 에러는 React가 화면에 글자를 그려내려는데, 문자열(String)이 아닌 JavaScript의 Date 객체를 그대로 넘겨받았을 때 발생합니다.


2. 문제의 원인 분석

우리가 옵시디언이나 마크다운 문서 상단(Frontmatter)에 다음과 같이 작성하면:

---
date: 2026-04-13
---

gray-matter 같은 파싱 라이브러리는 이 2026-04-13을 단순한 글자가 아니라 JavaScript의 Date 객체로 자동 변환합니다.

문제는 React의 중괄호 { } 안에는 문자열이나 숫자만 들어올 수 있다는 점입니다. Date 객체를 그대로 렌더링하려고 하면 React는 이를 화면에 어떻게 표시해야 할지 몰라 빌드를 중단해버립니다.


3. 해결 방법: 명시적 문자열 변환 (Serialization)

해결책은 아주 간단합니다. 데이터를 JSX에 넣기 전에 **문자열(String)**로 바꿔주기만 하면 됩니다.

방법 1: 컴포넌트 내부에서 변환 (가장 쉬운 방법)

에러가 발생하는 페이지 파일(예: [slug]/page.tsx)에서 날짜를 출력하는 부분을 수정하세요.

TypeScript

// ❌ 수정 전: 에러 발생
<span>{post.date}</span>

// ✅ 수정 후 (1): 표준 ISO 형식 (2026-04-13T00:00:00.000Z)
<span>{post.date.toISOString()}</span>

// ✅ 수정 후 (2): 한국 날짜 형식 (2026. 4. 13.) - 추천!
<span>{post.date.toLocaleDateString('ko-KR')}</span>

방법 2: getStaticProps / 서버 컴포넌트에서 변환

Next.js의 데이터 페칭 단계에서 미리 문자열로 바꿔서 넘겨주는 것이 더 안전합니다.

JavaScript

// 데이터를 가져오는 시점에 변환
const post = {
  ...data,
  date: data.date.toISOString() // 여기서 이미 문자열로 변환됨
};

4. SEO를 위한 추가 팁: 날짜 형식 통일하기

블로그의 검색 엔진 최적화(SEO)를 위해서는 날짜 형식을 일정하게 유지하는 것이 좋습니다. date-fns와 같은 라이브러리를 사용하면 훨씬 깔끔하게 관리할 수 있습니다.

Bash

npm install date-fns

TypeScript

import { format } from 'date-fns';

// 2026-04-13 형식으로 깔끔하게 출력
<span>{format(new Date(post.date), 'yyyy-MM-dd')}</span>

5. 결론: "항상 직렬화를 확인하세요"

이 에러는 비단 Date 객체뿐만 아니라, 의도치 않게 컴포넌트 내부에 일반 Object를 넣었을 때도 발생합니다.

  • 체크리스트:

    1. 에러 메시지에 found: [object Date]가 있는지 확인한다.

    2. 마크다운 파싱 과정에서 날짜가 객체로 변환되었는지 확인한다.

    3. 반드시 .toISOString()이나 .toString()으로 변환 후 렌더링한다.

도움이 되셨나요? 같은 문제를 겪는 분들에게 유익한 정보가 되길 바랍니다. 궁금한 점은 댓글로 남겨주세요!


작성 정보

  • Date: 2026-04-13

  • Author: Gemini AI

  • Keywords: Next.js Prerender Error, React Child Date Object, Next.js Build Failure