inflearn logo
강의

Course

Instructor

Next.js in Bite-Sized Pieces

5.3) Full Route Cache 3. Applying to Dynamic Routes

generateStaticParams() 응용 질문 드립니다.

2

yhklilly03051823

3 asked

0

안녕하세요. 강의 정말 잘 듣고 있습니다!


강의에서는 generateStaticParams 함수에서 return [{id: 1}, {id: 2}, {id: 3}] 으로 예시를 작성해주신 부분 관련해서
실서비스를 운영할 때는 id가 꼭 1, 2, 3으로 정해진다는 보장이 없기 때문에 아래와 같이 백엔드에서 불러온 id값을 return하게끔 응용해보았습니다.


export async function generateStaticParams() {
  const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/book`, {
    cache: "force-cache",
  });
  const books: BookData[] = await response.json();

  return books.map((book) => ({ id: book.id.toString() }));
}


  1. 해당 코드가 올바르게 작성된 걸까요?

  2. 이러한 방법이 자주 사용되는 방법인가요?


    예를 들면 만들어주신 api에는 페이징 기능이 없지만 실서비스 api에서 페이징 기능을 이용해 1페이지의 10개의 아이템들은 static하게 처리하고 이후 2페이지부터 동적으로 불러오게끔 하는 로직으로 구현한다고 하면 이러한 방식이 자주 사용되는지 궁금합니다.


react typescript next.js

Answer 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 하루세번펭수님.

generateStaticParams에서 백엔드 API로 도서 목록을 조회한 뒤, 각 도서의 id를 반환하는 방식은 올바른 응용 방법입니다.

export async function generateStaticParams() {
  const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/book`, {
    cache: "force-cache",
  });

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

  return books.map((book) => ({
    id: book.id.toString(),
  }));
}

이렇게 작성하면 빌드 시점에 API에서 조회된 모든 도서의 경로가 정적으로 생성됩니다. 예를 들어 API가 id 10, 20, 30을 반환한다면 /book/10, /book/20, /book/30이 정적 페이지로 생성됩니다. 실서비스에서 ID가 정해져 있지 않은 경우에는 이와 같이 데이터베이스나 백엔드 API에서 목록을 조회하는 방식이 자주 사용됩니다.

다만 API에 페이지네이션이 적용되어 있다면 첫 번째 페이지만 조회하는 것으로는 전체 도서의 정적 경로가 생성되지 않습니다. generateStaticParams는 빌드 시점에 반환된 경로만 정적으로 생성하므로, 2페이지 이후의 데이터를 정적으로 만들고 싶다면 모든 페이지를 순회하여 데이터를 가져오거나 별도의 전체 목록 API가 필요합니다.

반대로 첫 페이지의 일부 도서만 미리 정적으로 생성하고, 나머지 경로는 요청 시 생성하도록 구성하는 것도 가능합니다. 이 경우 generateStaticParams에서 첫 페이지의 ID만 반환하고 dynamicParams를 true로 설정하면, 반환하지 않은 경로는 최초 요청 시 생성된 후 캐시될 수 있습니다.

관련 질문을 참고해 주세요.

따라서 질문하신 코드는 적절하며, “자주 사용되는가?”에 대해서도 정적 생성이 필요한 주요 경로 목록을 백엔드에서 가져오는 방식은 충분히 일반적인 패턴입니다. 다만 데이터가 매우 많다면 모든 경로를 빌드 시 생성하는 데 시간이 오래 걸릴 수 있으므로, 인기 상품이나 첫 페이지 데이터만 미리 생성하고 나머지는 요청 시 생성하는 전략을 함께 고려하는 것이 좋습니다.

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

강의 업데이트 관련

0

65

1

에러핸들링- rootlayout에 관하여

0

67

2

버셀로 서버 배포 후 접속 시 500 에러 발생

0

125

2

컴포넌트와 레이아웃

0

89

2

@/styles/globals.css'

0

106

2

풀라우트캐시 동작 원리에서 데이터 캐시 관련 질문

0

99

2

next.js 프로젝트

0

93

1

Next.js + Tanstack Query BFF 구조 질문

1

125

2

Next.js 사전렌더링 이해하기 부분

0

111

2

모달 관련 질문

0

122

3

렌더링 관련 질문

0

132

2

중복으로 하나의 api를 요청할 때 캐싱 옵션 통일화

0

128

2

라우트 세그먼트 옵션 강좌 노트에 사소한 제보 남깁니다.

0

120

2

SSR시 context에 params말고 query를 사용하면 안되나요?

0

139

2

npx prisma db push 시 에러가 뜹니다.

0

166

3

vercel 배포를 실패하였습니다.

0

191

3

Image 컴포넌트 사용시 브라우저 콘솔에 경고는 왜 뜨는걸까요?

0

125

2

getServerSideProps 함수와 SSR의 관계

0

168

6

없는 페이지인데 풀라우트캐시로 저장이 되는 이유가 궁금합니다

0

116

2

실제 프로젝트에서 SSR 사용에 관해서 질문드립니다.

0

180

2

일반적인 nextjs project architecture에 대하여..

0

140

2

2.14 Search에서 작성한건 static이긴하지만 CSR이 아닌가요?

0

130

2

배포 시 오류 발생

0

150

2

백엔드 서버 오류납니다.

0

143

2