getInitialProps๋ ์๋ฒ์์ ํ์ด์ง์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฑ์ฐ๊ณ ๋ ๋๋งํ ํ์ด์ง๋ฅผ ํด๋ผ์ด์ธํธ์ ๋ณด๋ธ๋ค. ๋ฐ๋ผ์ SEO์ ์นํ์ ์ด๋ค.
๊ทธ๋ฌ๋ Next 9.3์์ getServerSideProps๊ฐ ๋์ ๋๋ฉด์ getServerSideProps๊ฐ getInitialProps๋ฅผ ๋์ฒดํ๊ฒ ๋์๋ค.
์ด๋ป๊ฒ getServerSideProps๊ฐ getInitialProps๋ฅผ ๋์ฒดํ๊ฒ ๋์์๊น?
์ด ๊ธ์์๋ ๋ ๊ฐ์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์ ์์๋ณด๊ณ ์ ํ๋ค.
getServerSideProps๋ฅผ ์ฌ์ฉํ๋ ํ์ด์ง๋ ํ์ด์ง ์์ฒญ ๋ง๋ค ํด๋น ์์ฒญ์ ๋ํ ์๋ต ์ ์ ์๋ฒ์์ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ค.
์์ฒญ๋ง๋ค ์๋ฒ์์ ๋งค๋ฒ ํ์ด์ง๋ฅผ ๋ ๋๋งํด์ผํ๊ธฐ ๋๋ฌธ์ SSG ๋ณด๋ค๋ ํ์ด์ง์ ๋ก๋ฉ ์๋๊ฐ ๋๋ ค์ง ์ ์์ง๋ง CSR์ ์ฌ์ฉํ๋ ๋ฐฉ์ ๋ณด๋ค๋ ์ฑ๋ฅ์ด ์ข๊ณ SEO์ ์นํ์ ์ด๋ค.
getInitialProps๋ getServerSideProps์ ๊ฑฐ์ ๋น์ทํ๊ฒ ์๋ํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ getServerSideProps๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น?
getInitialProps๋ณด๋ค getServerSideProps๋ ๋ญ๊ฐ ์ ์ฉํ ๊น?
getInitialProps๋ URL์ ํตํ ์ด๊ธฐ ๋ก๋ ๋ฐ a / ํ๊ทธ์ href์์ฑ์ผ๋ก ์ด๋ํ ๊ฒฝ์ฐ์๋ ์๋ฒ์์ ์คํ๋์ง๋ง next/link, next/router๋ฅผ ์ฌ์ฉํ ์ด๋ ์ฆ ํด๋ผ์ด์ธํธ ์ธก์์ ํ์ด์ง๋ฅผ ์ด๋ํ ๊ฒฝ์ฐ ์๋ฒ๊ฐ ์๋ ํด๋ผ์ด์ธํธ์์ ์๋ํ๋ค.
NextJs์ getIntialProps ๋ฌธ์์์๋ ํด๋น ๋ด์ฉ์ ํ์ธํ ์ ์๋ค.
For the initial page load, getInitialProps will run on the server only. getInitialProps will then run on the client when navigating to a different route via the next/link component or by using next/router. However, if getInitialProps is used in a custom _app.js, and the page being navigated to implements getServerSideProps, then getInitialProps will run on the server.
๐ getInitialProps ๊ณต์๋ฌธ์
์ด๋ ๊ฒ ์๋ํ๋ ๊ฒ์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ ์ getInitialProps ๋ด๋ถ์ ํด๋ผ์ด์ธํธ ์ธก์์ ์ํํ ์ ์๋ ๋ก์ง(์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ ๋ฑโฆ)์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ํ ์๋ฒ์์๋ง ์ํํ๋ ๋ก์ง๋ง ์กด์ฌํ๋ค ํ๋๋ผ๋ ํด๋ผ์ด์ธํธ ์ธก์์๋ ์๋ํ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ ์ธก ๋ฒ๋ค์๋ ํฌํจ๋์ด ๋ฒ๋ค ์ฌ์ด์ฆ๊ฐ ์ปค์ง๊ฒ ๋๋ค. ์ด๋ ์ดํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ๊ณผ๋ ์ฐ๊ฒฐ๋๋ค.
๋ฐ๋ฉด getServerSideProps๋ ์ด๊ธฐ ํ์ด์ง ๋ก๋๋ฟ๋ง ์๋๋ผ next/link, next/router๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ ๊ฒฝ์ฐ์๋ ์๋ฒ์์ ๋ ๋๋ง์ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ ์ธก์ ์ ๋ฌํ๋ค. ์ด๋ getServerSideProps ๋ด๋ถ์์ ํด๋ผ์ด์ธํธ ์ธก์์ ์ํํ ์ ์๋ ๋ก์ง์ด ์กด์ฌํด๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋๋ ์ด๋ป๊ฒ getInitialProps๊ฐ ํด๋ผ์ด์ธํธ์์ ์๋ํ๋์ง ๊ถ๊ธํด์ก๋ค.
ํ ์คํธ๋ฅผ ํ๊ธฐ ์ํด SSG(getStaticProps), SSR(getServerSideProps), legacy(getInitialProps)๋ฅผ ์ฌ์ฉํ๋ ํ์ด์ง๋ฅผ ๊ฐ์ ๋ด์ฉ์ผ๋ก ์์ฑํด ์คํํ๊ณ ๋น๋ ํด ๋ณด์๋ค.
์๋ ์ฌ์ง์ผ๋ก๋ง ํ์ธํด๋ getInitialProps๊ฐ ์กด์ฌํ๋ ํ์ด์ง์ ํด๋ผ์ด์ธํธ ๋ฒ๋ค ํ์ผ์ด ํฐ๋ค๊ณ ๋๊ปด์ง๋ค.
์คํ ํ ๋ก๋๋ js ํ์ผ์ SSR(getServerSideProps), legacy(getInitialProps) ๋ง ํ์ธํด ๋ณผ ์์ ์ด๋ค.
๋ด๊ฐ ํ
์คํธ๋ก ์์ฑํ ํ์ผ์ getServerSideProps๊ณผ getInitialProps ๋ชจ๋ ๋ด๋ถ์ lodash๋ฅผ ์ฌ์ฉํด ๋ณด์๋ค.
์ฐ๋ฆฌ๊ฐ ๊ณต๋ถํ ๋ด์ฉ์ ์ํ๋ฉด ํด๋ผ์ด์ธํธ ์ธก ๋ฒ๋ค์ lodash๊ฐ ์์ด์ผ ํ๋ค.
๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ์ด getInitalProps์๋ง lodash๊ฐ ํฌํจ๋์ด ์๋ ๊ฑธ๋ก ํ์ธ๋๋ค.
๋น๋ ํ, /.next/server/pages ํด๋์ ์๋ ํ์ผ์ ์๋์ ๊ฐ๋ค.
https://next-code-elimination.vercel.app/
์ ์ฌ์ดํธ๋ ํด๋ผ์ด์ธํธ ์ธก ๋ฒ๋ค ํ์ผ์์ ์๋ฒ ์ธก ์ฝ๋๊ฐ ์ฌ๋ผ์ง ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค.
์ฝ๋๋ฅผ ์์ ํด ์์ ๋ ํด๋ณผ ์ ์๋ค.
์๋ ์ฌ์ง๊ณผ ๊ฐ์ด ํด๋ผ์ด์ธํธ ์ธก ๋ฒ๋ค ํ์ผ์ getInitialProps์ ๋ด๋ถ ๋ก์ง์ด ๊ทธ๋๋ก ๋จ์ ์๋๊ฑธ ํ์ธํ ์ ์๋ค.
NextJs๋ ์ฐจ๋จ ๋ฐ์ดํฐ(blocking data) ์์ฒญ์ด ์๋ค๋ฉด ํ์ด์ง๊ฐ ์ ์ (์ฌ์ ๋ ๋๋ง ๊ฐ๋ฅ)์ธ์ง ์๋์ผ๋ก ํ์ธํ๋ค.
์ด ํ์ธ์๋ ํ์ด์ง์ getInitialProps์ getServerSideProps๊ฐ ์์ ๋ ๊ฒฐ์ ๋๋ค.
์ ์ ์ผ๋ก ์์ฑ๋ ํ์ด์ง๋ ํด๋ผ์ด์ธํธ ์ธก์์ JS ํ์ผ์ด ๋ก๋๋๊ณ ์ ์ ์ธ HTML์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ถ๊ฐํ์ฌ (hydation) ์์ ํ๊ฒ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ ํ์ด์ง๊ฐ ๋๋ค.
์๋ ์ ์ ์ต์ ํ์ ์ต๋ ์ด์ ์ ์๋ฒ ์ธก ๊ณ์ฐ์ด ํ์ํ์ง ์์ผ๋ฉฐ CDN์์ ์ฌ์ฉ์์๊ฒ ์ฆ์ ์คํธ๋ฆฌ๋ฐํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์ด์ฉํ ๋, ๋น ๋ฅธ ๋ก๋ฉ ์๋๋ฅผ ๊ฒฝํํ ์ ์๋ค.
getInitialProps๋ฟ๋ง ์๋๋ผ getServerSideProps ๋ํ ํ์ด์ง ๋ด์ ์กด์ฌํ ๋, ํด๋น ํ์ด์ง๋ ์๋ ์ ์ ์ต์ ํ๋์ง ์๋๋ค.
๋น๋ ํ, /.next/server/pages ํด๋์ ์๋ ํ์ผ์ ์๋์ ๊ฐ๋ค.
getInitialProps์ getServerSideProps๋ .jsํ์ผ๋ก ๋น๋ ๋์๋ค.
getStaticProps๊ฐ ์กด์ฌํ์ง ์์๋ getInitialProps๋ getServerSideProps๊ฐ ์กด์ฌํ์ง ์๋ ํ์ด์ง๋ ์๋์ผ๋ก ์ ์ ์ต์ ํ๊ฐ ๋๋ค.
๊ทธ๋ฌ๋ ์ปค์คํ
App ํ์ผ ๋ด๋ถ์ getInitialProps๊ฐ ์กด์ฌํ๋ค๋ฉด getStaticProps๊ฐ ์๋ ํ์ด์ง๋ ์ต์ ํ๊ฐ ๋์ง ์๋๋ค.
์ด๋ฒ ๊ธ์ ์์ฑํ๋ฉฐ ๋์ ๊ฒฐ๋ก ์ getInitialProps ์ฌ์ฉ์ ํ์ง ๋ง์์ด๋ค.
์ฌ์ค ์ฒ์๋ถํฐ ๋ต์ ์ ํด์ ธ ์์์ง๋ง ๊ทธ๋๋ ์ getInitialProps ์ฌ์ฉ์ ์ง์ํ๋์ง์ ๋ํด์๋ ์์๋ณผ ํ์๊ฐ ์์๋ ๊ฑฐ ๊ฐ๋ค.
์์ง App ํ์ผ์์์ getInitialProps์ ๋์๊ณผ ์ปค์คํ _document์์์ getIntialProps๋ฅผ ์ ์ฌ์ฉํ์ง๋ ๋ชจ๋ฅธ๋ค. ์์ผ๋ก ์ด ๊ณผ์ ์ ๋ ์์๊ฐ๋ณด๋๋กํ์
์๋ชป๋ ๋ด์ฉ์ด๋ ์ถ๊ฐํ ๋ด์ฉ์ด ์๋ค๋ฉด ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค.
Next.js - Automatic Static Optimization
VERY ODD issue. Please advise. "getInitialProps" is not called if page has "getStaticProps"
getInitialProps vs. getServerSideProps in Next.js
๊ฐ์ฌํฉ๋๋ค.