Next.js ๊ณผ์ ๋ฅผ ํ๋ฉฐ SSG ๋ ๋๋ง์ผ๋ก About ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. (ํ์ฌ ์๊ฐ ํ์ด์ง)
๊ทธ๋ฐ๋ฐ ํ ์คํธ๋ฅผ ์ํด npm run dev (yarn dev) ๋ก ๋ก์ปฌ ์๋ฒ๋ฅผ ํตํด ํ์ธํ๋ค๊ฐ,
DB ๋ฐ์ดํฐ (json-server ์ db.json) ๋ฅผ ๋ณ๊ฒฝํ๋๋ฐ
(๊ณผ์ ์์ json-server ๋ฅผ ํ์ฉ - ์๋ BaaS์ด์ง๋ง ์ด ๊ณผ์ ์์ ์์๋ก DB๋ก ์ผ์์ ์ฐ๊ณ ์๋ค)
๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๊ฐ ๋ฐ์๋์ง ์์๋ค .. ๐ฅ
์ด๋ SSG ๋ ๋๋ง ํน์ฑ ์ force-cache ๋ก ์บ์๊ฐ ์ ์ฅ๋์ด ์ ์ง๋๊ธฐ ๋๋ฌธ์ธ๋ฐ, ๊ฐ๋จํ ์บ์ ํ์ผ ์ญ์ ํ๋ ๋ฒ์ ์์๋ณด์.
์ ๋ฒ ๊ธ์์๋ ์ ๋ฆฌํ์ง๋ง, SSG๋ฅผ ๋ค์ ์ค๋ช ํด๋ณด์๋ฉด
๐ชจ SSG (Static Site Generation) ์น ๋ ๋๋ง ๋ฐฉ์์
๋น๋ ํ์๋ ๋ฏธ๋ฆฌ ํ์ด์ง๋ฅผ ๋ ๋๋ง ํด๋์ด์ (๋น๋ ๋ ์ปดํฌ๋ํธ ์์ฑ),
๋ธ๋ผ์ฐ์ ์์ ์์ฒญ ์ ๋ง๋ค์ด๋ ํ์ด์ง๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ์์ด๋ค.
๊ทธ๋์ static ์ ์ ๋ฐฉ์์ด๋ผ๊ณ ํ๋ฉฐ, ์ดํ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์๋ก๊ณ ์นจ์ ํด๋ ๋์ผํ ํ์ด์ง๋ง ์ถ๋ ฅ๋๋ค.
(ํ๋ฒ fetchํ ๋ฐ์ดํฐ๋ ๋ณ์น ์์)
(๋ฐ๊พธ๋ ค๋ฉด ๋น๋๋ฅผ ๋ค์ ํด์ผ)
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ 'ํ์ฌ ์๊ฐ ํ์ด์ง'์ ๊ฐ์ด ๊ฐ์ ธ์ค๋ ๋ฐ์ดํฐ ๋ด์ฉ์ด ๋ณํ ์ผ ์๋ ํ์ด์ง์ ์ ์ ํ๋ค.
(React์์ ์ผ๋ CSR-Client Side Rendering ๋ฐฉ์๋ณด๋ค SEO์๋ ์ ๋ฆฌํ๊ณ , TTV(time to view)๋ ์งง๋ค๋ ์ฅ์ ์ด ์๋ค)
Next.js์์ ์ด๋ค ์ค์ ๋ ํ์ง ์์ผ๋ฉด, ๊ธฐ๋ณธ์ ์ผ๋ก SSG๋ก ๋์ํ๊ฒ ๋์ด์๋ค.
(ํน์ ๋ฐ์ดํฐ fetch ์ cache: "force-cache" ๋ผ๋ ์ต์ ์ ์ฃผ๋ ๊ฒ๊ณผ๋ ๋์ผํ๋ค)
๐ค ํ์ง๋ง SSG ํ์ด์ง๋ฅผ ํ ์คํธํ ๋์๋ ์บ์ฑ๋ผ์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ฐ์์๋จ..
๊ทผ๋ฐ ์์ ๋งํ๋ฏ, ์ด SSG ํ์ด์ง ..
๋น๋ํ๊ธฐ๋ ์ ์ npm run dev ๋ yarn dev ๋ก ํ์ด์ง ์๋ฒ๋ฅผ ํ ์คํธํ ๋์๋
cache ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๊ฐ ๋ฐ์๋์ง ์๋๋ค.... ๐ฅฒ
์๋ฒ๋ฅผ ๊ป๋ค ์ผ๋ ๋ฐ์๋์ง ์๋ ๊ฒ์ ๋ง์ฐฌ๊ฐ์ง..
ํ ์คํธ ๋์ค์ ์ผ๋ง๋ ์ง DB ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ํ ๋ฐ.. ์ด๋ฅผ ๋ฐ์ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ๋ ๊น?!
>> ๐ก ์ ์ฅ๋ ์บ์๋ฅผ ๋น์์ค์ผ ํ๋ค !! ๐ช
๐ชน ์ ์ฅ๋ ์บ์ ๋น์ฐ๊ธฐ
next.js ํ๋ก์ ํธ์ ํด๋๋ฅผ ๋ณด๋ฉด, ๋ฃจํธ๊ฒฝ๋ก์ .next ํด๋๊ฐ ์๋ค.
๊ทธ ์์๋ cache -> fetch-cache ํด๋๊ฐ ์๊ณ -> ๊ทธ ์์ ๊ธด ๋ฌธ์์ด('40afb....'์ ๊ฐ์) ์ด๋ฆ์ ํ์ผ์ด ์๋ค.
ํด๋น ํ์ผ์ ์ด์ด๋ณด๋ฉด ์บ์ ๋ด์ฉ์ด ๊ฐ์ฒดํํ๋ก ์ ์ฅ๋์ด ์๋ ๊ฑธ ์ ์ ์๋ค.
(์์๋ณด๋, ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์บ์๋ .next/cache/fetch-cache ํด๋์ ์ ์ ํ์ผ๋ก ์์ฑ๋๋ค๊ณ ํ๋ค)
"date" ๋ ์บ์ ์ ์ฅ๋ ์๊ฐ์ ์๋ ค์ฃผ๊ณ ,
๊ทธ ์ธ์๋ ๋ด๊ฐ fetch ๋ก ์ด๋ค url์ ์์ฒญ๋ณด๋๋์ง๋, ์ด๋ค ๋ฉ์๋๊ฐ ๊ฐ๋ฅํ์ง๊น์ง๋ (GET, PATCH,..) ์จ ์๋ค.
{"kind":"FETCH","data":{"headers":{"access-control-allow-headers":"content-type",
"access-control-allow-methods":"GET, HEAD, PUT, PATCH, POST, DELETE","access-control-allow-
origin":"*","connection":"keep-alive","content-length":"111","content-type":"application/json",
"date":"Wed, 13 Mar 2024 12:44:00 GMT","keep-alive":"timeout=5","x-powered-by":"tinyhttp"},
"body":".....์๋ต","status":200,"url":"http://localhost:4000/companyInfo"},"revalidate":
31536000,"tags":[]}
์ฌํผ, ์ด ์บ์ ํ์ผ์ ์ง์์ฃผ๋ฉด ๋๋ค. ๋๋ ์์ง fetch ์์ฒญ์ ํ ํ์ด์ง์์๋ง ํ๋ฒ ์ด๊ฑฐ๋ผ ๋ค๋ฅธ ์บ์ํ์ผ์ ์์๋๋ฐ
๋ค๋ฅธ ์บ์ํ์ผ์ด ์๋ค๋ฉด ์ ๊ตฌ๋ถํด์ ๋ฐ์ดํฐ๊ฐฑ์ ์ ์ํ๋ fetch์์ฒญ์ ๋ํ ์บ์ํ์ผ๋ง ์ง์ฐ๋ฉด ๋ ๊ฑฐ ๊ฐ๋ค.
(์ฐ์ url ๋ก ๊ตฌ๋ถํด์..)
๋ด ๊ฒฝ์ฐ ์ด๋ฐ ์บ์ ํ์ผ์ด 2๊ฐ๊ฐ ์์๋๋ฐ, ๊ฐ์ ์์ฒญ์ ๋ํ ๊ฒ์ด์๋ค.
๊ทธ๋์ ํ๋๋ง ์ง์์๋ ์๋๊ณ , 2๊ฐ ๋ค ์ง์์คฌ๋๋ ์บ์๊ฐ ์์ ํ ์ฌ๋ผ์ง๋ฉด์
๋ค์ yarn dev ๋ก ์๋ฒ๋ฅผ ๋๋ ธ์ ๋ ๋ฐ์ดํฐ๊ฐ ๊ฐฑ์ ๋์๋ค. (๋์์ ์๋ก์ด ์บ์ํ์ผ ์์ฑ)
์ดํ ๋ค์ ์บ์ํ์ผ์ ์ง์ฐ๊ธฐ ์ ๊น์ง๋ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ ๋ณ๋์์ด ์ ์ง๋๋ค.
(๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ด ์๋์ง๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค ใ _ใ ๋๋ stackoverflow ์ฌ์ดํธ์ 2023๋ ๋ต๊ธ์ ๋ณด๊ณ ํด๊ฒฐํ๋ค.)