ν°μ€ν 리 λ·°
Next 14λ²μ μμλ
fetch μ΅μ κΈ°λ³Έκ°μ SSG λ λλ§μ²λΌ μ μ λ°μ΄ν°λ₯Ό λΉλνκ² λμλ€.
νμ§λ§ μ€μ λ‘ μλ¬΄λ° μ΅μ μ μ μ§ μμμ λ, μμμΉ μμ λ¬Έμ κ° λ°μν μ μλ€.
μλ λ‘μ§μ fetch μ΅μ μ μ£Όμ§ μκ³ SSG λ λλ§μ ꡬννμλ€.
// SSG > page.tsx
import { Post } from "@/types/type";
import React from "react";
const SSGPage = async () => {
const response = await fetch("http://localhost:4000/posts", {
cache: "force-cache",
});
const data: Post[] = await response.json();
console.log("data", data);
return (
<>
<div>SSGPage</div>
<div>{JSON.stringify(data)}</div>
βοΈ SSR μ»΄ν¬λνΈ (Test.tsx) λ€μ΄κ° μ리 βοΈ
</>
);
};
export default SSGPage;
export default SSGPage;
λΉλ ν SSG νμ΄μ§κ° Static(μ μ )μΌλ‘ μ λ λλ§ λμλ€.


βοΈνμν μ리μ { cache: "no-store" } μ΅μ μ μ€ SSR λ λλ§ μ»΄ν¬λνΈλ₯Ό import νμ¬ μΆκ°νμλ€.
// Test.tsx
import { Post } from "@/types/type";
import React from "react";
const Test = async () => {
const response = await fetch("http://localhost:4000/posts", {
cache: "no-store",
});
const data: Post[] = await response.json();
console.log("data", data);
return (
<>
<div>Test</div>
<div>{JSON.stringify(data)}</div>
</>
);
};
export default Test;
λΉλ ν SSG νμ΄μ§κ° Dynamic(λμ )μΌλ‘ λ°λμλ€.

πμ¦, μ μ μΈ νμ΄μ§μ λμ μΈ μ»΄ν¬λνΈλ₯Ό μΆκ°νλ©΄ νμ΄μ§ μ μ²΄κ° λμ μΌλ‘ λ°λλ€ !
κ·Έλ λ€λ©΄, λ°μ΄ν°λ₯Ό μΆκ°νμ λλ μ΄λ»κ² μλν κΉ?
π€μμ μλ
κΈ°μ‘΄ SSGμ htmlμμ (JSON.stringify λΆλΆ)μ λ³νμ§ μκ³ κ³ μ ,
μΆκ°ν λμ μ»΄ν¬λνΈ (Test.tsx)μλ§ κ°μ΄ μΆκ° λ κ²μΌλ‘ μμνλ€.
π¨μ€μ μλ
λ°μ΄ν° μΆκ° ν μλ‘κ³ μΉ¨ μ μ 체 νμ΄μ§(html + λμ μ»΄ν¬λνΈ)μ κ°μ΄ μΆκ°λμλ€.
πν΄κ²° λ°©λ²
fetch μ΅μ μ { cache: "force-cache" } λ‘ λμ΄ λΉλνλ κΈ°μ‘΄ htmlμ κ³ μ , λμ μ»΄ν¬λνΈλ§ λ³ννλ λͺ¨μ΅μ 보μΈλ€.
// SSG > page.tsx
import { Post } from "@/types/type";
import React from "react";
import Test from "./Test";
const SSGPage = async () => {
const response = await fetch("http://localhost:4000/posts", {
cache: "force-cache", βοΈμΆκ°
});
const data: Post[] = await response.json();
console.log("data", data);
return (
<>
<div>SSGPage</div>
<div>{JSON.stringify(data)}</div>
<Test />
</>
);
};
export default SSGPage;
14λ²μ Nextμμ ν¨μΉ μ΅μ μ μ무κ²λ μ£Όμ§ μμμ λ “force-cache” μ΅μ μ μ€ λ― μ μ μΈ htmlμ΄ μμ±λμμ§λ§,
λμ μΈ μ»΄ν¬λνΈκ° μΆκ°λμμ λ νμ΄μ§ μ μ²΄κ° λ³λλλ λ¬Έμ κ° λ°μνλ€.
λ°λΌμ νΉμ λͺ¨λ₯Ό μν©μ λλΉν΄ ν¨μΉ μ΅μ μ μ ννκ² λͺ μνλ κ²μ΄ νμνλ€κ³ λκΌλ€.
15λ²μ μμλ κΈ°λ³Έκ°μ SSRλ‘ μ£Όκ³ , SSGλ₯Ό λ°λ‘ μ€μ νλ λ°©ν₯μΌλ‘ κ°μ λμλ€κ³ νλ€.
'Forntend > Trouble Shooting' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [LoL info App] 0314 νΈλ¬λΈμν (0) | 2025.03.17 |
|---|---|
| [LoL info App] 0313 νΈλ¬λΈμν (0) | 2025.03.17 |
| vercel λ°°ν¬ μ€λ₯ - μλ‘κ³ μΉ¨ 404: NON_FOUND (0) | 2025.02.09 |
| [Pokemon PJ_Day 3]Dynamic Routeμ QueryString (0) | 2025.02.06 |
| [Pokemon PJ_Day 2] μ‘°κ±΄λΆ μ€νμΌλ§, Array.from, μ΄λ²€νΈ λ²λΈλ§ λ°©μ§ (0) | 2025.02.05 |