κ°μ
SSR μμ μλ²μμ κ³΅ν΅ λ‘κ·Έλ₯Ό λ¨κΈ°λ €κ³ νλλ° μ΄λ»κ² μμν΄μΌ νλμ§ Chat GPT μκ² λ¬Όμ΄λ³΄μλ€.
1. Next.js λ₯Ό μ΄μ©ν React Application μν
λ€μμ Next.jsλ₯Ό μ¬μ©νμ¬ React μ ν리μΌμ΄μ μ λ§λλ κ°λ¨ν μμ μ λλ€.
λ¨Όμ , Next.jsλ₯Ό μ€μΉν΄μΌν©λλ€. npm
μ μ¬μ©νμ¬ μ€μΉν μ μμ΅λλ€.
npm install next react react-dom
κ·Έλ¦¬κ³ μ΄μ λ€μκ³Ό κ°μ΄ pages
ν΄λλ₯Ό λ§λ€κ³ index.js
νμΌμ μμ±ν©λλ€.
// pages/index.js
function Home() {
return <div>Welcome to Next.js!</div>;
}
export default Home;
κ·Έλ¦¬κ³ λ§μ§λ§μΌλ‘ λ€μκ³Ό κ°μ΄ package.json
νμΌμ λ€μμ μΆκ°νμ¬ μ ν리μΌμ΄μ
μ μ€νν©λλ€.
{
"scripts": {
"dev": "next dev"
}
}
μ΄μ ν°λ―Έλμμ npm run dev
λͺ
λ Ήμ μ€ννκ³ λΈλΌμ°μ μμ http://localhost:3000
μΌλ‘ μ΄λνλ©΄ "Welcome to Next.js!"λΌλ ν
μ€νΈκ° νμλλ κ²μ λ³Ό μ μμ΅λλ€.
μ΄κ²μ Next.jsλ₯Ό μ¬μ©νμ¬ μμ±λ λ§€μ° κ°λ¨ν React μ ν리μΌμ΄μ μ λλ€. μ΄μ Next.jsλ₯Ό λ κΉμ΄ μ΄ν΄νκ³ μ»΄ν¬λνΈ, λΌμ°ν , λ°μ΄ν° κ°μ Έμ€κΈ° λ±μ μΆκ°νμ¬ μ ν리μΌμ΄μ μ λ λ°μ μν¬ μ μμ΅λλ€.
2. λΌμ°ν μΆκ°
λ€μμ Next.jsμμ λΌμ°ν μ μΆκ°νλ λ°©λ²μ λλ€.
pages
ν΄λ μμ μλ‘μ΄ νμΌμ μμ±νμ¬ λΌμ°νΈλ₯Ό μΆκ°ν©λλ€. νμΌ μ΄λ¦μ λΌμ°νΈ κ²½λ‘μ μΌμΉν΄μΌν©λλ€.
// pages/about.js
function About() {
return <div>About us</div>;
}
export default About;
Link
μ»΄ν¬λνΈλ₯Ό μ¬μ©νμ¬ λΌμ°νΈλ‘ μ΄λν μ μλ λ§ν¬λ₯Ό λ§λλλ€.
// pages/index.js
import Link from 'next/link';
function Home() {
return (
<div>
<div>Welcome to Next.js!</div>
<Link href="/about">
About us
</Link>
</div>
);
}
export default Home;
next/router
λͺ¨λμ μ¬μ©νμ¬ νλ‘κ·Έλλ° λ°©μμΌλ‘ λΌμ°ν μ μνν μ μμ΅λλ€.
jsxCopy code
// pages/index.js
import { useRouter } from 'next/router';
function Home() {
const router = useRouter();
const handleClick = (e) => {
e.preventDefault();
router.push('/about');
};
return (
<div>
<div>Welcome to Next.js!</div>
<Link href="/about">
About us
</Link>
<button onClick={handleClick}>Go to about page</button>
</div>
);
}
export default Home;
μ΄μ http://localhost:3000
μμ ν΄λ¦ κ°λ₯ν λ§ν¬μ λ²νΌμ΄ μμΌλ©°, ν΄λ¦νλ©΄ http://localhost:3000/about
νμ΄μ§λ‘ μ΄λν©λλ€.
3. μμ² λ§λ€ λ‘κ·Έλ₯Ό λ¨κΈ°λ €λ©΄?
Next.jsμμ κ° μμ²λ§λ€ λ‘κ·Έλ₯Ό λ¨κΈ°λ €λ©΄ λ―Έλ€μ¨μ΄ ν¨μλ₯Ό μ¬μ©ν μ μμ΅λλ€. λ―Έλ€μ¨μ΄ ν¨μλ μμ²κ³Ό μλ΅μ λν νΈλ€λ¬ ν¨μλ‘, μ΄λ₯Ό μ¬μ©νμ¬ λ‘κ·Έλ₯Ό λ¨κΈ°κ³ λ€μ λ―Έλ€μ¨μ΄λ‘ μμ²μ μ λ¬ν μ μμ΅λλ€.
λ€μμ Next.jsμμ λ―Έλ€μ¨μ΄ ν¨μλ₯Ό μ¬μ©νμ¬ κ° μμ²λ§λ€ λ‘κ·Έλ₯Ό λ¨κΈ°λ λ°©λ²μ λλ€.
server.js
νμΌμ μμ±ν©λλ€. μ΄ νμΌμ Next.jsμμ μλ² μΈ‘ λ λλ§μ ꡬμ±νλ λ° μ¬μ©λ©λλ€.
// server.js
const express = require('express');
const next = require('next');
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
app.prepare().then(() => {
const server = express();
// λ―Έλ€μ¨μ΄ ν¨μλ₯Ό λ±λ‘ν©λλ€.
server.use((req, res, next) => {
console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
next();
});
server.get('*', (req, res) => {
return handle(req, res);
});
server.listen(3000, (err) => {
if (err) throw err;
console.log('> Ready on http://localhost:3000');
});
});
server.js
νμΌμμ λ±λ‘ν λ―Έλ€μ¨μ΄ ν¨μλ κ° μμ²λ§λ€ λ‘κ·Έλ₯Ό μΆλ ₯ν©λλ€.console.log
λμ νμΌμ λ‘κ·Έλ₯Ό κΈ°λ‘νκ±°λ λ‘κ·Έ μλ²λ‘ μ μ‘νλ λ±μ μμ μ μνν μλ μμ΅λλ€.
μ΄μ Next.js μ ν리μΌμ΄μ μ μμνλ©΄ κ° μμ²μ λν λ‘κ·Έκ° μ½μμ μΆλ ₯λ©λλ€. λ―Έλ€μ¨μ΄ ν¨μλ₯Ό μ¬μ©νλ©΄ μμ²μ κ°λ‘μ±κ³ νμν μμ μ μνν μ μμΌλ―λ‘, μμ²μ κΈ°λ‘νλ κ² μΈμλ μΈμ¦, κΆν λΆμ¬, μΊμ± λ±μ μμ μ μνν μ μμ΅λλ€.
4. μ€νλ°©λ²
server.js
νμΌμ λ§λ νμλ λ€μ λͺ
λ Ήμ΄λ₯Ό μ¬μ©νμ¬ Next.js μ ν리μΌμ΄μ
μ μ€νν©λλ€.
node server.js
μ΄ λͺ
λ Ήμ΄λ Node.jsλ‘ server.js
νμΌμ μ€νν©λλ€. server.js
νμΌμ Next.jsμμ μλ² μΈ‘ λ λλ§μ ꡬμ±νλ λ° μ¬μ©λλ―λ‘, μ΄ νμΌμ μ€ννλ©΄ Next.js μ ν리μΌμ΄μ
μ΄ μλ²μμ μ€νλ©λλ€.
μ ν리μΌμ΄μ
μ΄ μ€νλλ©΄ λΈλΌμ°μ μμ http://localhost:3000
μ μ μνμ¬ μ ν리μΌμ΄μ
μ νμΈν μ μμ΅λλ€. μ΄λ server.js
νμΌμμ λ±λ‘ν λ―Έλ€μ¨μ΄ ν¨μκ° μμ²μ κ°λ‘μ±κ³ λ‘κ·Έλ₯Ό λ¨κΈΈ κ²μ
λλ€.
μλ²μμ μ ν리μΌμ΄μ
μ μ€ννλ €λ©΄ server.js
νμΌμ΄ ν¬ν¨λ λλ ν 리μμ μ λͺ
λ Ήμ΄λ₯Ό μ€νν΄μΌ ν©λλ€.
κ²°κ³Ό
[2023-03-08T08:03:00.827Z] GET /_next/static/chunks/webpack.js?ts=1678262580782
[2023-03-08T08:03:00.831Z] GET /_next/static/chunks/main.js?ts=1678262580782
[2023-03-08T08:03:00.834Z] GET /_next/static/chunks/react-refresh.js?ts=1678262580782
[2023-03-08T08:03:00.837Z] GET /_next/static/chunks/pages/_app.js?ts=1678262580782
[2023-03-08T08:03:00.841Z] GET /_next/static/chunks/pages/index.js?ts=1678262580782
[2023-03-08T08:03:00.842Z] GET /_next/static/development/_buildManifest.js?ts=1678262580782
[2023-03-08T08:03:00.848Z] GET /_next/static/development/_ssgManifest.js?ts=1678262580782
[2023-03-08T08:03:01.055Z] GET /_next/static/development/_devMiddlewareManifest.json
[2023-03-08T08:03:03.658Z] GET /
[2023-03-08T08:03:03.682Z] GET /_next/static/chunks/webpack.js?ts=1678262583664
[2023-03-08T08:03:03.683Z] GET /_next/static/chunks/main.js?ts=1678262583664
[2023-03-08T08:03:03.684Z] GET /_next/static/chunks/react-refresh.js?ts=1678262583664
[2023-03-08T08:03:03.688Z] GET /_next/static/chunks/pages/_app.js?ts=1678262583664
[2023-03-08T08:03:03.689Z] GET /_next/static/chunks/pages/index.js?ts=1678262583664
[2023-03-08T08:03:03.690Z] GET /_next/static/development/_buildManifest.js?ts=1678262583664
[2023-03-08T08:03:03.693Z] GET /_next/static/development/_ssgManifest.js?ts=1678262583664
[2023-03-08T08:03:03.885Z] GET /_next/static/development/_devMiddlewareManifest.json
[2023-03-08T08:03:05.912Z] GET /_next/static/development/_devPagesManifest.json
[2023-03-08T08:03:05.920Z] GET /_next/static/chunks/pages/about.js
wait - compiling /about...