From 8a89e4695db4ef393af832bc13d3d557c8c03ca6 Mon Sep 17 00:00:00 2001 From: f0ever0 Date: Mon, 29 Jul 2024 20:12:21 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[#26]=20docs:=20get-static-props=20?= =?UTF-8?q?=EB=B2=88=EC=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data-fetching/get-static-props.mdx | 127 +++++++----------- 1 file changed, 47 insertions(+), 80 deletions(-) diff --git a/pages/docs/pages/building-your-application/data-fetching/get-static-props.mdx b/pages/docs/pages/building-your-application/data-fetching/get-static-props.mdx index b9d4204..8e34753 100644 --- a/pages/docs/pages/building-your-application/data-fetching/get-static-props.mdx +++ b/pages/docs/pages/building-your-application/data-fetching/get-static-props.mdx @@ -3,11 +3,9 @@ title: getStaticProps description: Fetch data and generate static pages with `getStaticProps`. Learn more about this API for data fetching in Next.js. --- -{/* TODO: 번역이 필요합니다. */} - # getStaticProps -If you export a function called `getStaticProps` (Static Site Generation) from a page, Next.js will pre-render this page at build time using the props returned by `getStaticProps`. +페이지에서 `getStaticProps`(정적 사이트 생성) 라는 함수를 내보낸다면, Next.js는 `getStaticProps`로부터 반환된 props를 사용하여 이 페이지를 빌드 타임에 미리 렌더링을 합니다. ```tsx filename="pages/index.tsx" switcher import type { InferGetStaticPropsType, GetStaticProps } from 'next' @@ -44,70 +42,39 @@ export default function Page({ repo }) { } ``` -> Note that irrespective of rendering type, any `props` will be passed to the page component and can be viewed on the client-side in the initial HTML. This is to allow the page to be [hydrated](https://react.dev/reference/react-dom/hydrate) correctly. Make sure that you don't pass any sensitive information that shouldn't be available on the client in `props`. +> 렌더링 타입과 무관하게, 모든 props는 페이지 컴포넌트로 전달되며 초기 HTML 클라이언트 사이드에서 볼 수 있다는 것을 주의하세요. 이것은 [hydrated](https://react.dev/reference/react-dom/hydrate)가 제대로 실행되기 위함입니다. 클라이언트에서 사용하면 안되는 어떠한 민감한 정보도 props에 전달해서는 안됩니다. -The [`getStaticProps` API reference](/docs/pages/api-reference/functions/get-static-props) covers all parameters and props that can be used with `getStaticProps`. +[`getStaticProps` API reference](/docs/pages/api-reference/functions/get-static-props) 는 `getStaticProps`에서 사용할 수 있는 모든 파라미터와 props를 포함합니다. ## When should I use getStaticProps? -You should use `getStaticProps` if: +다음과 같은 상황에서 `getStaticProps` 를 사용할 수 있습니다. -- The data required to render the page is available at build time ahead of a user’s request -- The data comes from a headless CMS -- The page must be pre-rendered (for SEO) and be very fast — `getStaticProps` generates `HTML` and `JSON` files, both of which can be cached by a CDN for performance -- The data can be publicly cached (not user-specific). This condition can be bypassed in certain specific situation by using a Middleware to rewrite the path. +- 페이지 렌더링에 필요한 데이터가 유저의 요청 이전인 빌드 타임에 사용 가능해야 할 때 +- 데이터가 headless CMS 으로부터 제공될 때 +- 페이지가 SEO를 위해서 반드시 미리 렌더링 되어야 하고 매우 빨라야 할 때 - getStaticProps는 `HTML`과 `JSON` 파일을 생성합니다. 두 가지 모두 성능을 위해 CDN에 캐시를 저장합니다. +- 데이터는 개별 사용자 별로가 아니라 공개적으로 캐시되어야 할 때. 이 조건은 경로를 재설정하기 위해 미들웨어를 사용하는 방식으로 특정 상황에서 우회될 수 있습니다. ## When does getStaticProps run -`getStaticProps` always runs on the server and never on the client. You can validate code written inside `getStaticProps` is removed from the client-side bundle [with this tool](https://next-code-elimination.vercel.app/). +`getStaticProps` 항상 서버에서 실행되며 클라이언트에서는 실행되지 않습니다. [이 도구](https://next-code-elimination.vercel.app/)를 사용하여 클라이언트 bundle에서 제거된 `getStaticProps` 내부에 작성된 코드를 검증할 수 있습니다. -- `getStaticProps` always runs during `next build` -- `getStaticProps` runs in the background when using [`fallback: true`](/docs/pages/api-reference/functions/get-static-paths#fallback-true) -- `getStaticProps` is called before initial render when using [`fallback: blocking`](/docs/pages/api-reference/functions/get-static-paths#fallback-blocking) -- `getStaticProps` runs in the background when using `revalidate` -- `getStaticProps` runs on-demand in the background when using [`revalidate()`](/docs/pages/building-your-application/data-fetching/incremental-static-regeneration#on-demand-revalidation) +- `getStaticProps` 는 항상 next build 중 실행됩니다. +- `getStaticProps` 는 [`fallback: true`](/docs/pages/api-reference/functions/get-static-paths#fallback-true)를 사용할때 백그라운드에서 실행됩니다. +- `getStaticProps` 는 [`fallback: blocking`](/docs/pages/api-reference/functions/get-static-paths#fallback-blocking)을 사용할때 초기 렌더링 이전에 호출됩니다. +- `getStaticProps` 는 `revalidate`를 사용할때 백그라운드에서 실행됩니다. +- `getStaticProps` 는 [`revalidate()`](/docs/pages/building-your-application/data-fetching/incremental-static-regeneration#on-demand-revalidation)를 사용할때 수요에 따라 백그라운드에서 실행됩니다. -When combined with [Incremental Static Regeneration](/docs/pages/building-your-application/data-fetching/incremental-static-regeneration), `getStaticProps` will run in the background while the stale page is being revalidated, and the fresh page served to the browser. +[Incremental Static Regeneration](/docs/pages/building-your-application/data-fetching/incremental-static-regeneration)와 결합할 때, `getStaticProps`는 오래된 페이지가 재검증 되는 동안 백그라운드에서 실행될 수 있으며 브라우저에서 새 페이지가 제공됩니다. -`getStaticProps` does not have access to the incoming request (such as query parameters or HTTP headers) as it generates static HTML. If you need access to the request for your page, consider using [Middleware](/docs/pages/building-your-application/routing/middleware) in addition to `getStaticProps`. +`getStaticProps`는 정적 HTML을 생성하기 때문에, 쿼리 파라미터 또는 HTTP 헤더와 같이 들어오는 요청에 접근할 수 없습니다. 만약 페이지를 위한 요청에 접근하고 싶다면, `getStaticProps`와 [미들웨어](/docs/pages/building-your-application/routing/middleware) 를 함께 사용하는 것을 고려해야합니다. ## Using getStaticProps to fetch data from a CMS -The following example shows how you can fetch a list of blog posts from a CMS. +다음 예제는 CMS로부터 어떻게 blog posts 리스트를 가져오는지 보여줍니다. ```tsx filename="pages/blog.tsx" switcher -// posts will be populated at build time by getStaticProps() -export default function Blog({ posts }) { - return ( - - ) -} - -// This function gets called at build time on server-side. -// It won't be called on client-side, so you can even do -// direct database queries. -export async function getStaticProps() { - // Call an external API endpoint to get posts. - // You can use any data fetching library - const res = await fetch('https://.../posts') - const posts = await res.json() - - // By returning { props: { posts } }, the Blog component - // will receive `posts` as a prop at build time - return { - props: { - posts, - }, - } -} -``` - -```jsx filename="pages/blog.js" switcher -// posts will be populated at build time by getStaticProps() +// posts는 getStaticProps()에 의해 빌드 타임에 생성됩니다. export default function Blog({ posts }) { return (