ํ ์ ํฌ๊ธฐ๋ก ์๋ผ๋จน๋ Next.js ํ์ต์ ๋ฆฌ์ฉ์ ๋๋ค.
2.11) SSR 1. ์๊ฐ ๋ฐ ์ค์ต
2.12) SSR 2. ์ค์ต
getServerSideProps
getServerSideProps๋ ํ์ด์ง๊ฐ SSR ๋ฐฉ์์ผ๋ก ์ฌ์ ๋ ๋๋ง์ด ์ด๋ฃจ์ด์ง๊ฒ ํ๋ค.
export const getServerSideProps = () => {
// ์ปดํฌ๋ํธ๋ณด๋ค ๋จผ์ ์คํ๋์ด์, ์ปดํฌ๋ํธ์ ํ์ํ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๋ ํจ์
const data = "hello";
return {
props: {
data,
},
};
};
getServerSideProps๋ ์ฝ์๋ ์ด๋ฆ์ ํจ์์ธ๋ฐ ์ด๋ฅผ exportํ๋ฉด ํด๋น ํ์ด์ง๋ ๊ทธ๋๋ถํฐ SSR๋ก ๋์ํ๊ฒ ๋๋ค.
์ด๋ป๊ฒ ์๋ํ๋๊ฐ
1. ํด๋น ํ์ด์ง ๊ฒฝ๋ก๋ก ํ์ด์ง๋ฅผ ์์ฒญ
2. ๋ฅ์คํธ ์๋ฒ๊ฐ ์ฌ์ ๋ ๋๋ง์ ํ๊ฒ ๋ ๋ getServerSideProps ํจ์๋ฅผ ๋จผ์ ์คํ
-> ํด๋น ํ์ด์ง์์ ํ์ํ ๋ฐ์ดํฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ๋ฐฑ์๋ ์๋ฒ๋ก๋ถํฐ ๋ถ๋ฌ์ค๋ ๋ฑ์ ๊ธฐ๋ฅ์ ์ํ
getServerSideProps ํจ์๋ ํ์ด์ง ์ญํ ์ ํ๋ ์ปดํฌ๋ํธ๋ณด๋ค ๋จผ์ ์คํ์ด ๋์ด ํด๋น ์ปดํฌ๋ํธ์ ํ์ํ ๋ฐฑ์๋ ๋ฐ์ดํฐ ๋ฑ์ ๋ฏธ๋ฆฌ ๋ถ๋ฌ์ค๋ ์ญํ ์ ํ๋ ํจ์์ด๋ค.
ํจ์์ ์ฝ์๋์ด์ง ๊ตฌ์กฐ(ํ๋ ์์ํฌ์ ๋ฌธ๋ฒ)
return ๊ฐ์ props๋ผ๋ ํ๋กํผํฐ๋ก ๊ฐ์ฒด๋ก ์ ๋ฌํ๋๋ก ํด์ผํ๋ค.
ํน์ง
getServerSideProps๋ ์ค์ง ์๋ฒ ์ธก์์๋ง ์คํ์ด ๋๋ ํจ์์ด๋ค.
๋ฐ๋ผ์ console.log ๋ฑ ์ถ๋ ฅ์ ์งํํ๋ฉด ๋ธ๋ผ์ฐ์ ์ฝ์์ ๋ณด์ด์ง ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. (๋์ ํฐ๋ฏธ๋ ์ฝ์์๋ ์ถ๋ ฅ์ด ๋๋ค.)
export default function Home({
data,
}: InferGetServerSidePropsType<typeof getServerSideProps>) {
...
๋ํ ์ด ํ์ด์ง ์ปดํฌ๋ํธ๋ ์๋ฒ์์ ํ๋ฒ ์คํ๋๊ณ , ๋ธ๋ผ์ฐ์ ์์ ํ ๋ฒ ๋ ์คํ์ด ๋๋ค.
1) ์ฌ์ ๋ ๋๋ง์ ์ํด ์๋ฒ์ธก์์ ์คํ
2) ๋ธ๋ผ์ฐ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค ํํ๋ก ์ ๋ฌ๋๊ณ ๋ธ๋ผ์ฐ์ ์ธก์์ ์คํ
์ด๋ ๋ธ๋ผ์ฐ์ ์ ๊ทผํ๋ window๋ฅผ ํ์ด์ง ์ปดํฌ๋ํธ์ ์์ฑํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฒ ํ๋ค.
๋ฐ๋ผ์ ๋ธ๋ผ์ฐ์ ์์๋ง ์คํ๋๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ถ๋ค๋ฉด useEffect๋ฅผ ์ฌ์ฉํ ์ ์๋ค. (useEffect๋ ๋ง์ดํธ ๋ ์ดํ์ ๋์ํ๋ ์ฝ๋์ด๊ธฐ ๋๋ฌธ์)
useEffect(() => {
console.log(window);
}, []);
getServerSideProps๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ props ํ์
Next.js์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ํ ๋ด์ฅ ํ์
์ด ์กด์ฌ.
InferGetServerSidePropsType : getSerberSideProps์ ๋ฐํ๊ฐ ํ์
์ ์๋์ผ๋ก ์ถ๋ก ํด์ค
export default function Home({
data,
}: InferGetServerSidePropsType<typeof getServerSideProps>) {
...
getServerSideProps์์ query string ์ป๋ ๋ฐฉ๋ฒ
export const getServerSideProps = async (
context: GetServerSidePropsContext
) => {
const q = context.query.q;
const books = await fetchBooks(q as string);
return {
props: { books },
};
};
//@/lib/fetch-books.ts
import { BookData } from "@/types";
export default async function fetchBooks(q?: string): Promise<BookData[]> {
let url = `http://localhost:12345/book`;
if (q) {
url += `/search?q=${q}`;
}
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error();
}
return await response.json();
} catch (err) {
console.error(err);
return [];
}
}
'FE > Next.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Next.js] Page Router - ISR (4) | 2025.05.06 |
---|---|
[Next.js] page router - SSG(์ ์ ์ฌ์ดํธ ์์ฑ) (1) | 2025.05.06 |
[Next.js] page router ์ฌ์ ๋ ๋๋ง๊ณผ ๋ฐ์ดํฐํ์นญ (0) | 2025.05.05 |
[Next.js] page router ํ์ด์ง๋ณ ๋ ์ด์์ ์ค์ (1) | 2025.05.03 |
[Next.js] page router - API Routes (0) | 2025.05.03 |