๐ŸŒ WEB/Node.js

React + Node.js ์—ฐ๋™ํ•˜๊ธฐ

์• ์ •์“ฐ 2020. 7. 30. 17:26

ํ•˜๋ฃจ์ข…์ผ ์‚ฝ์งˆํ•œ๊ฑฐ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ถ„๋ช… ์–ธ์  ๊ฐ€ ๋˜ ์“ธ๊ฒƒ์ด์–ด๋‹ˆ....

์šฐ์„  vscode๋กœ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

vscode ํ„ฐ๋ฏธ๋„์—์„œ 

 

npx create-react-app lasttest

 

lasttest๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

๋งŒ๋“ ํ›„ ํ„ฐ๋ฏธ๋„์—์„œ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๊ฒฝ๋กœ์—์„œ npm start๋กœ ์‹คํ–‰์ด ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ด ์นœ๊ตฌ๊ฐ€ ๋œฌ๋‹ค๋ฉด ๋ฐ”๋กœ node.js๋ž‘ ์—ฐ๋™ํ• ๊ฒŒ์š”.

 

npm install express --save

 

์„ค์น˜ํ•ด์ฃผ์„ธ์š” express๋Š” NodeJS์˜ ์›นํ”„๋ ˆ์ž„์›Œํฌ ์ž…๋‹ˆ๋‹ค. ๊ฐ„ํŽธํ•˜๊ฒŒ ์›น์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์ฃ 

๊ทธ๋‹ค์Œ์— ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ํด๋”๋ฅผ ๋‚˜๋ˆ„์–ด ์ค„๊ป€๋ฐ์š” root๊ฒฝ๋กœ์— serverํด๋”๋ฅผ ๋งŒ๋“ค์–ด์ค€ ๋‹ค์Œ์— 

server.js ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”

const express = require('express');
const app = express();
const api = require('./routes/index');
const bodyParser = require('body-parser');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.use('/api', api);

const port = process.env.PORT || 3001;

app.listen(port,()=>console.log(`Listening on port ${port}`));

port๋ฒˆํ˜ธ๋Š” ๋‹ฌ๋ผ๋„ ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•œ ๋‹ค์Œ์— 3๋ฒˆ์งธ ์ค„์— ์žˆ๋Š” routes/index๋ฅผ ๋งŒ๋“ค์–ด์ค„๊ฒŒ์š”

 

๋งŒ๋“ค์–ด๋‘” serverํด๋”์— routes/index.js ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š” 

var express = require('express');
var router = express.Router();
var mysql = require('mysql');


const connection = mysql.createConnection({
    host:'',
    port:,
    user:'',
    password:'',
    database:''
});
connection.connect();

router.get('/api',function(req,res){

    res.send({greeting:'Hello'});
});


module.exports = router;

 

 

npm install --save mysql 

 

mysql์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์„ค์น˜ํ•ด์ค๋‹ˆ๋‹ค.

connection๋ณ€์ˆ˜์— mysql ์ •๋ณด๋ฅผ ๋„ฃ์–ด์ฃผ๋Š”๋ฐ ์›๋ž˜ ๋”ฐ๋กœ ๋นผ์„œ ๋ฐ”์ธ๋”ฉํ•ด์„œ ๊ฐ€์ ธ์˜ค๋Š”๊ฒŒ ์ข‹์ง€๋งŒ... ๊ณต๋ถ€์šฉ์œผ๋กœ ์‰ฝ๊ฒŒ ๋ณด๊ธฐ ์œ„ํ•ด ์„ค์ •ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

'' ์•ˆ์—๋Š” DB์ •๋ณด ์ž‘์„ฑํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  Router์„ ์ด์šฉํ•˜์—ฌ url์š”์ฒญ์ด ๋“ค์–ด ์™”์„๋•Œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ค„์ง€ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค. ์ €๋Š” Hello๋ฅผ ๋ฐ›์•„์˜ฌ๊ฒŒ์š”

๋งŒ์•ฝ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด db์ •๋ณด๋ฅผ ๋ฐ›๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด

 

router.get('/project/select', function(req,res){
    
    connection.query('SELECT ID,NAME,AGE FROM user', (err, rows,fields) => {
        res.send(rows);
    })
});

์ด๋Ÿฐ์‹์œผ๋กœ ์จ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค!

์ด์ œ ์„œ๋ฒ„์—์„œ ๋ณด๋‚ด์ค€ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ›๊ธฐ ์œ„ํ•ด Proxy๋ฅผ ์„ค์ •ํ•ด์ค„๊ฒ๋‹ˆ๋‹ค.

๋จผ์ € ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์„ค์น˜ํ•ด์ค„๊ฒŒ์š”!

 

npm install http-proxy-middleware --save

 

src ๊ฒฝ๋กœ์— setupProxy.js ๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.( ์ด๋ฆ„์„ ๊ผญ ์ง€์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค )

์ด๊ฑธ๋กœ ์‚ฝ์งˆ์„ ์กฐ๊ธˆ ํ–ˆ๋Š”๋ฐ ํ•˜์œ„๋ฒ„์ „์—์„œ๋Š” ๋‹ค๋ฅด๊ฒŒ ์“ฐ๋Š”๊ฑธ ์ฐพ์•„์„œ ์ป๋‹ค๊ฐ€ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ฒผ์—ˆ์Šต๋‹ˆ๋‹ค...

 

const{ createProxyMiddleware }= require('http-proxy-middleware'); ๋ฅผ ๊ผญ ์ง€์ผœ์ฃผ์„ธ์šฅ

proxy ์„ค์ •์„ ์ถ”๊ฐ€ํ•ด์คŒ์œผ๋กœ /api๋กœ ์‹œ์ž‘๋˜๋Š” API๋Š” target์œผ๋กœ ์„ค์ •๋œ ์„œ๋ฒ„ URL๋กœ ํ˜ธ์ถœํ•˜๋„๋ก ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

 

+

server.js์—์„œ ์„ค์ •ํ•ด์ค€ app.use('/api'api); ํ™•์ธ!

 

 

const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function(app){
  app.use(
      createProxyMiddleware('/api', {
          target: 'http://localhost:3001/',
          changeOrigin: true
      })
  )
};

 

 

 

๋‹ค์Œ์€ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค„๊ฒŒ์š”.

 

node ./server/server.js๋ฅผ ์‹คํ–‰ํ•ด์„œ ์„œ๋ฒ„๊ฐ€ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์ฃผ์„ธ์š”

์„ฑ๊ณต์ 

 

์ด์ œ ์„œ๋ฒ„, ํด๋ผ์ด์–ธํŠธ ๋™์‹œ ์‹คํ–‰์„ ์œ„ํ•ด ctrl+c๋ฅผ ๋ˆŒ๋Ÿฌ ์„œ๋ฒ„๋ฅผ ๋‹ซ์•„์ฃผ์‹œ๊ณ 

npm install npm-run-all -D ๋ฅผ ์„ค์น˜ํ•ด์ฃผ์„ธ์š”!

 

+

์„ค์น˜ํ•˜๋‹ค๊ฐ€ match์–ด์ฉŒ๊ณ  ํ•˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฃจํŠธ ๊ฒฝ๋กœ์— ์žˆ๋Š” package-lock.json์„ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ์„ค์น˜ํ•ด๋ณด์„ธ์š”!

 

๋ฃจํŠธ ๊ฒฝ๋กœ์— ์žˆ๋Š” package.json์— scripts ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•ด์ฃผ์„ธ์š”

 

 "scripts": {
    "start": "npm-run-all --parallel start:**",
    "start:clinet": "react-scripts start",
    "start:server": "node ./server/server.js",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },

์ €์žฅํ•˜์‹œ๊ณ  npm start๋ฅผ ํ•œ๋‹ค๋ฉด 

์—ฐ๊ฒฐ ๋ ! App.js์—์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•์€ ๋‹ค์Œ์—!

๋ฐ˜์‘ํ˜•