강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

dhj8011님의 프로필 이미지
dhj8011

작성한 질문수

한 입 크기로 잘라먹는 Next.js(v15)

9.3) 배포하기

Vercel에 배포하는 과정에서 generateMetaData가 문제를 일으킵니다.

해결된 질문

작성

·

51

0

안녕하세요! 언제나 멋진 강의 감사드립니다.

다름이 아니라, 프로젝트를 Vercel에 배포하는 과정에서 아래와 같은 컴파일 실패 에러가 빌드 로그에서 검출되어서 이에 대해 여쭤보고 싶습니다.

image.png


화면 상에서는
src/app/(with-searchbar)/search/page.tsx
에 선언한 generateMetaData 함수가 Next.js 페이지의 요구조건을 충족시키지 못한다라는 내용으로 보여지는데요, 이런 경우에는 해당 요소에서 어떤 부분을 확인해볼 수 있을까요?

해당 페이지에 대한 코드도 함께 첨부해 드리겠습니다.

 

  • \app\(with-searchbar)\search\page.tsx

 

import BookItem from "@/components/book-item";
import BookListSkeleton from "@/components/skeleton/book-list-skeleton";
import { BookData } from "@/types";
import { delay } from "@/util/delay";
import { Metadata } from "next";
import { Suspense } from "react";

//index 페이지와 다르게 search 페이지는 QueryString과 같은 동적인 값에 의존하고 있기 때문에 static 페이지로는 설정할 수 없지만, 데이터 캐시를 최대한 이용하는 것으로 최적화
async function SearchResult({q}:{q:string}) {

  await delay(2000);
  const response = await fetch(
    `${process.env.NEXT_PUBLIC_API_SERVER_URL}/book/search?q=${q}`,
    {cache: "force-cache"}
  );

  if(!response.ok){
    return <div>오류가 발생했습니다 ...</div>
  }

  const books: BookData[] = await response.json();

  return (
    <div>
      {books.map((book) => (
        <BookItem key={book.id} {...book} />
      ))}
    </div>
  );
}

//현재 페이지의 메타데이터를 동적으로 생성하는 함수
export async function generateMetaData({
  searchParams,
}: {
  searchParams: Promise<{q?: string}>;
}): Promise<Metadata> {
  const {q} = await searchParams;

  return {
    title: `${q} : 검색 결과`,
    description : `검색어 ${q}의 검색 결과입니다`,
    openGraph: {
      title: `${q} : 검색 결과`,
      description : `검색어 ${q}의 검색 결과입니다`,
      images: ["/thumbnail.png"],
    }
  }
}

export default async function Page({
  searchParams,
}: {
  searchParams: Promise<{ q: string }>;
}) {

  const {q} = await searchParams;

  return (
    <Suspense key={q || ""} fallback={<BookListSkeleton count={3} />}>
      <SearchResult q={q ||""} />
    </Suspense>);
}

답변 2

0

이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

안녕하세요 이정환입니다.

함수 이름에 오타가있습니다. MetaData가 아닌 Metadata로 작성해주셔야 합니다 😃

generateMetaData -> generateMetadata

dhj8011님의 프로필 이미지
dhj8011
질문자

역시 생각외로 별거 아닌 부분도 꼼꼼히 봐야 하는 이유네요... 감사드립니다!

0

안녕하세요, 인프런 AI 인턴입니다. dhj8011님.

Vercel에 배포하는 과정에서 발생하는 generateMetaData 관련 문제는 주로 Next.js의 특정 필드가 올바르게 사용되지 않은 경우 발생할 수 있습니다. Next.js의 전역 설정 및 페이지 설정에서 generateMetaData와 같은 커스텀 기능을 사용할 때, 올바른 키 값과 로직이 중요합니다.

문제 해결을 위한 점검 사항:

  1. 타입 및 인터페이스 확인:

    • generateMetaData 함수에서 사용하는 searchParams 타입이 Promise<{ q?: string }>로 올바르게 설정되어 있는지 확인하세요. 이는 서버 컴포넌트에서 비동기 데이터를 처리할 때 필요합니다.
  2. 메타데이터 생성 시점 문제:

    • generateMetaData 함수가 제대로 호출되고 있는지 확인해야 합니다. 문제가 있을 경우, 해당 함수의 호출 위치와 조건을 점검하세요.
  3. Next.js 버전 및 설정 확인:

    • 사용 중인 Next.js 버전이 최신인지, 그리고 그에 맞는 설정이 잘 되어 있는지 확인하세요. Next.js는 버전 업그레이드 시 API 변경이 있을 수 있습니다.
  4. Vercel 및 로깅 확인:

    • Vercel의 빌드 로그를 다시 확인하여 다른 관련 에러 메시지가 있는지 찾아보세요. 이는 코드 문제뿐만 아니라 환경 설정 문제일 수도 있습니다.

아래는 비슷한 문제에 대한 기존 답변 링크입니다:
- checkFields, ‘default’>>() 에러?

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

dhj8011님의 프로필 이미지
dhj8011

작성한 질문수

질문하기