๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

React (front) ์™€ Node (back) ์—ฐ๋™์‹œํ‚ค๊ธฐ ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฐฑ์—”๋“œ(Back-End)/Node js

React (front) ์™€ Node (back) ์—ฐ๋™์‹œํ‚ค๊ธฐ

์ง•์ง•์•ŒํŒŒ์นด 2023. 5. 18. 13:12
728x90
๋ฐ˜์‘ํ˜•

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” ์ฝ”๋”ฉ์• ํ”Œ์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-)>

=> Node+Express ์„œ๋ฒ„์™€ React ์—ฐ๋™ํ•˜๋ ค๋ฉด

 

๐Ÿš€ react์™€ node ์—ฐ๋™ํ•˜๊ธฐ

1) react

: HTML์„ ์ด์˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํˆด

- npx create-react-app react-project

- App.js ๋งŒ๋“ค๊ณ  ๊ฐœ๋ฐœํ•˜๊ธฐ npm run start

- ๊ฐœ๋ฐœ ๋๋‚œ๋‹ค๋ฉด -> npm run build

- -> html ํŒŒ์ผ (main page) ์ด ์ƒ์„ฑ

 

2) node

- server.js ๋งŒ๋“ค๊ธฐ

- npm init -y

- npm install express nodemon cors

- server ์‹คํ–‰ํ•˜๊ธฐ -> nodemon server.js

 

3) db ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด react๋กœ ๋ณด๋‚ด๊ธฐ

- ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋กœ react๊ฐ€ html ์ƒ์„ฑํ•˜๊ธฐ

- html ์„ ์„œ๋ฒ„๊ฐ€ ๋งŒ๋“ค๋ฉด server-side rendering

- htlm ์„ ๋ฆฌ์•กํŠธ๊ฐ€ ๋งŒ๋“ค๋ฉด client-side rendering

  - react-router-dom

 

โ˜€๏ธ Server.js

const express = require("express");
const app = express();
const path = require("path");

app.listen(8080, function () {
  console.log("listening on 8080");
});

// ๋ฆฌ์•กํŠธ์™€ nodejs ์„œ๋ฒ„๊ฐ„ ajax ์š”์ฒญ
app.use(express.json()); // ์œ ์ €๊ฐ€ ๋ณด๋‚ธ array/object ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๊ธฐ ์œ„ํ•ด ํ•„์š”
var cors = require("cors"); // ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์ฃผ์†Œ๋ผ๋ฆฌ ajax ์š”์ฒญ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ํ•„์š”
app.use(cors);

// static ์„ ์ด์šฉํ•˜์—ฌ ํŠน์ • ํด๋”์˜ ํŒŒ์ผ๋“ค ์ „์†ก ๊ฐ€๋Šฅ
app.use(express.static(path.join(__dirname, "react-project/build")));

app.get("/", function (req, res) {
  // res.sendFile(path.join(__dirname, "๋ฆฌ์•กํŠธ๋กœ ๋งŒ๋“  html ํŒŒ์ผ ๊ฒฝ๋กœ"));
  res.sendFile(path.join(__dirname, "react-project/build/index.html"));
});

// db ๋ฐ์ดํ„ฐ ๋ฝ‘์•„์„œ ๋ณด๋‚ด์ฃผ๋Š” API
// ex) db ์— ์žˆ๋Š” ์ƒํ’ˆ๋ช… ๋ณด์—ฌ์ค€๋‹ค๋ฉด
app.get("/product", function (req, res) {
  res.json({ name: "์ƒํ’ˆ๋ช…" });
});

// react router ์“ฐ๋Š” ๊ฒฝ์šฐ ์ตœํ•˜๋‹จ์— ์ถ”๊ฐ€ ํ•˜๊ธฐ
app.get("*", function (req, res) {
  // res.sendFile(path.join(__dirname, "๋ฆฌ์•กํŠธ๋กœ ๋งŒ๋“  html ํŒŒ์ผ ๊ฒฝ๋กœ"));
  res.sendFile(path.join(__dirname, "react-project/build/index.html"));
});

 

โ˜€๏ธ react-project/src/App.js

import logo from "./logo.svg";
import "./App.css";

function App() {
  return (
    <div className="App">
      <div>๋ฆฌ์•กํŠธ๋กœ ๋งŒ๋“  html ํŽ˜์ด์ง€</div>
    </div>
  );
}

export default App;

 

 

728x90
๋ฐ˜์‘ํ˜•
Comments