๐Ÿผexpress.js๋กœ ์„œ๋ฒ„๋ž‘ DB ์—ฐ๊ฒฐํ•˜๊ธฐ

alert("april");ยท2023๋…„ 9์›” 18์ผ
0

express

๋ชฉ๋ก ๋ณด๊ธฐ
1/2
post-custom-banner


์ถœ์ฒ˜ https://velog.io/@gidong_e/Node.js-Express

์›น์‚ฌ์ดํŠธ์˜ ๋™์ž‘์›๋ฆฌ

1. client(๋ธŒ๋ผ์šฐ์ €) (html, css, javascript / react, next)

์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์ชฝ์œผ๋กœ ์ „์†ก((ํŠน์ • ์š”์ฒญ๋„ ํ•จ๊ป˜)์„œ๋ฒ„์•ผ ๋ญ ํ•ด์ค˜!)
์š”์ฒญํ• ๋•Œ ์–ด๋Š์ •๋„ ๋“ค์„ ๊ทœ์ • REST API
์กฐํšŒ๊ฐ™์€ ์š”์ฒญ --> get ์š”์ฒญ ์ด๋ผ๊ณ  ํ•˜์ž
์‚ญ์ œ๊ฐ™์€ ์š”์ฒญ --> delete ์š”์ฒญ
์ถ”๊ฐ€๊ฐ™์€ ์š”์ฒญ --> post ์š”์ฒญ
์ˆ˜์ • ์š”์ฒญ --> put ์š”์ฒญ
์š”์ฒญ์— ๋Œ€ํ•œ ๋ชจ์–‘์€ ์ฃผ์†Œ๋ชจ์–‘์œผ๋กœ ํ•˜์ž
์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ๋Š”
    www.naver.com/user ๋กœ get ์š”์ฒญ
์‚ฌ์šฉ์ž ์ •๋ณด ์ˆ˜์ •
    www.naver.com/user put ์š”์ฒญ + April์ด๋ผ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๋‚˜์ด 20์œผ๋กœ
    www.naver.com/ get ์š”์ฒญ

2. ์„œ๋ฒ„๋Š” client์˜ ๋ฐ์ดํ„ฐ์™€ ์š”์ฒญ์˜ ์ •๋ณด๋ฅผ ๋ฐ›๋Š”๋‹ค

app.get('/user', ํ•จ์ˆ˜);
app.put('/user', ํ•จ์ˆ˜);

"April" ๋ฐ์ดํ„ฐ ๋ฐ›์•˜๊ณ , ์š”์ฒญ์€ April์˜ ์‹ ์ƒ์ •๋ณด ์กฐํšŒ ์š”์ฒญ์ด๋„ค
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ April์˜ ์‹ ์ƒ ์ •๋ณด ์กฐํšŒ(SQL)
(SELECT age, salary, name FROM tbl_users WHERE name = 'April')
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์† ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™”๋‹ค
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ client์—๊ฒŒ ๋‹ค์‹œ ์ „์†ก(์‘๋‹ต)

3. client(๋ธŒ๋ผ์šฐ์ €)

์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์‘๋‹ต์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™”๋ฉด์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ
express.js ์„œ๋ฒ„์ชฝ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ
ํ”„๋ ˆ์ž„์›Œํฌ : ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด ๋†“์€ ์ผ์ข…์˜ ๋ฐ˜์กฐ๋ฆฌ์‹ํ’ˆ
์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ์ชฝ์œผ๋กœ ๋ฐ์ดํ„ฐ์ „์†ก, ์ด๋ฏธ์ง€ํŒŒ์ผ, jsํŒŒ์ผ, ๋ณด์•ˆ๊ธฐ๋Šฅ, ...
์„œ๋ฒ„๋กœ ํ™œ์šฉํ•˜๊ณ  ์‹ถ์€ ํด๋”๋ฅผ ์ƒ์„ฑํ•˜์—ฌ
ํ•ด๋‹น ํด๋” ์•ˆ์—์„œ npm init ์„ ์‹คํ–‰ํ•˜๋ฉด package.json(ํ•ด๋‹นํด๋”์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๋Š” ํŒŒ์ผ)
์ด ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด ์ง„๋‹ค
entry point: (index.js) app.js (server.js ๋กœ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ๋„ ์žˆ์Œ)

Express ์„ค์น˜

npm install express --save // ์ž„์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด --save ๋นผ๋„ ๋œ๋‹ค

ํฌํŠธ๋ฒˆํ˜ธ?

๊ฐ™์€ ์ปดํ“จํ„ฐ ์•ˆ์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฒˆํ˜ธ

๋ˆ„๊ตฌ์˜ ์ปดํ“จํ„ฐ?

April์˜ ์ปดํ“จํ„ฐ
Kyle์˜ ์ปดํ“จํ„ฐ
์ปดํ“จํ„ฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์€ ip์ฃผ์†Œ 127.0.0.1

๋ชฉํ‘œ๋Š” April์˜ ์ปดํ“จํ„ฐ

์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด
LoL 3000
Zoom 3001
kakao talk 8080
... 3360


์‹คํ–‰ ๋ช…๋ น์–ด

node app

nodemon

express๋กœ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰์ค‘์ธ ์ƒํƒœ์—์„œ
์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋ฐ˜์˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ๊ป๋‹ค ์ผœ์ค˜์•ผ ํ•œ๋‹ค
์ด๋•Œ nodemon์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ˆ˜์ •๋˜๋ฉด ์•Œ์•„์„œ ์„œ๋ฒ„๋ฅผ ๊ป๋‹ค ์ผœ์ค€๋‹ค

์„ค์น˜

npm install nodemon --save

์ „์—ญ์„ค์น˜(์–ด๋–ค ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๋“  ํ„ฐ๋ฏธ๋„์—์„œ ๋ช…๋ น์–ด ์‚ฌ์šฉํ• ์ˆ˜์žˆ๋„๋ก)

npm install --global nodemon

์‹คํ–‰

nodemon ํŒŒ์ผ์ด๋ฆ„

์„œ๋ฒ„๋ž‘ DB ์—ฐ๊ฒฐ

npm install --save mysql2

mysql์€ ์„ค์น˜๋˜๋ฉด
๋”ฐ๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š์•„๋„
ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋จ (์ปดํ“จํ„ฐ์ผœ์ง€๋ฉด)

react 3001 ์‹คํ–‰์ค‘
express๊ฐ€ 3000๋ฒˆ ์‹คํ–‰์ค‘
mysql์€ 3306๋ฒˆ ์‹คํ–‰์ค‘

์›๋ฆฌ

  1. ๋ฆฌ์•กํŠธ๊ฐ€ ์š”์ฒญ(ํด๋ผ์ด์–ธํŠธ)
    /user get ์š”์ฒญ! 'April'
    (3000๋ฒˆ์—์„œ ์‹คํ–‰์ค‘์ธ express ํ•œํ…Œ)

  2. express๋Š”
    'April'์ด๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์„œ
    app.get('/user', ํ•จ์ˆ˜1);
    ์— ๋ช…์‹œ๋œ ํ•จ์ˆ˜1์„ ์‹คํ–‰ํ•จ!
    ํ•จ์ˆ˜1 ๋‚ด๋ถ€์ ์œผ๋กœ
    1. 3306๋ฒˆ์— ์‹คํ–‰์ค‘์ธ mysql์ ‘์†
    2. 'April' ๋ฐ์ดํ„ฐ SELECT
    3. ๊ฒฐ๊ณผ๋กœ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ res.json ์‘๋‹ต
    (๋‹ค์‹œ ๋ฆฌ์•กํŠธ์—๊ฒŒ ์‘๋‹ต)

  3. ๋ฆฌ์•กํŠธ๋Š” ์‘๋‹ต์„ ๋ฐ›์•„์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ
    ์ด์˜๊ฒŒ h1ํƒœ๊ทธ ์Œ“์•„์„œ ๋ณด์—ฌ์คŒ

app.js

// ์˜›๋‚  ๋ฌธ๋ฒ• commonjs ๋ชจ๋“ˆ
// ์š”์ฆ˜ ๋ฌธ๋ฒ• es ๋ชจ๋“ˆ(express๊ฐ€ ์•„์ง es๋ชจ๋“ˆ๋กœ ์ž‘์„ฑํ–ˆ์„๋•Œ๋Š” ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ)
// import styled from "@emotion/styled"
// import express from "express";
const express = require('express');
const mysql = require('mysql2');

const app = express();
const port = 3000;

// ์•ž์—์žˆ๋Š” req๋Š” ์š”์ฒญ์—๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๊ฐ์ฒด๋กœ ๋“ค์–ด์žˆ๋‹ค
// ๋’ค์—์žˆ๋Š” res๋Š” ์‘๋‹ต์—๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๊ฐ์ฒด๋กœ ๋“ค์–ด์žˆ๋‹ค
app.get('/', (req, res)=>{
    // ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ€์„œ ์กฐํšŒํ•ด์ค˜
    // ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ด์•ผํ•˜๋„ค? ์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด
    res.send('hello world')
    });

// /a ๋กœ get ์š”์ฒญ์‹œ ์‘๋‹ต์œผ๋กœ age is 10 ์ถœ๋ ฅํ•ด์ค˜
app.get('/a', (req, res)=>{
    let html = `
        <h1>๋ฉ”์ธํŽ˜์ด์ง€ ์ž…๋‹ˆ๋‹ค</h1>
        <p>์•ˆ๋…•ํ•˜์„ธ์š”</p>
    `;
    res.send(html); // ๋ฐ์ดํ„ฐ ๋ณด๋‚ด๊ธฐ ๋ฐฉ๋ฒ•1
});

// JavaScript Object Notation(์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด ํ‘œ๊ธฐ๋ฒ•)
app.get('/b', (req, res)=>{
    res.json({age:10, name:'Jay'}); // ๋ฐ์ดํ„ฐ ๋ณด๋‚ด๊ธฐ ๋ฐฉ๋ฒ•2
})
// ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ํฌํŠธ์˜€๊ธฐ๋•Œ๋ฌธ์— ์‹คํ–‰ X
// Ctrl + c ๋ˆŒ๋Ÿฌ์„œ ์„œ๋ฒ„ ๋„๊ณ 
// node app ๋‹ค์‹œ ์ผœ์•ผํ•œ๋‹ค

app.get('/c', (req, res)=>{
    console.log('์‚ญ์ œ์™„๋ฃŒ!'); // DELETE FROM USERS WHERE name='April';
    res.end(); // ๋ฐ์ดํ„ฐ ๋ณด๋‚ด๊ธฐ ๋ฐฉ๋ฒ•3(๋ณด๋‚ผ๊ฒŒ ์—†์„๋•Œ)
});

// creating connection pool
const pool = mysql.createPool({
    host:'localhost', // '127.0.0.1' ๋กœ ์จ๋„ ๋œ๋‹ค
    database:'board',
    user:'boarduser',
    password:'0000', // ์•ˆ์•Œ๋žด์คŒ~ใ…Žใ…Žใ…Ž
    port:3306
});


// mysql์ ‘์†ํ•ด์„œ ์‚ฌ์šฉ์ž์ด๋ฆ„์ด April์ธ ์‚ฌ๋žŒ์˜ ๋ฐ์ดํ„ฐ ์กฐํšŒ
app.get('/d', (req, res)=>{

    pool.query('select * from tbl_a' , (err, results, fields)=>{
        console.log(err);
        console.log('res์—๋Š”', results);
        console.log('fields์—๋Š”',fields);
        res.json(results);
    });

});

app.listen(port, ()=>{console.log(`app listening on ${port}`)});
// listen ํ•จ์ˆ˜
// 1. ์ธ์ž
//     ๋‘๊ฐœ ์•ž์—๋Š” ์ˆซ์žํƒ€์ž…, ๋’ค์—๋Š” ํ•จ์ˆ˜
// 2. ๋™์ž‘
//      ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์ด ์•ž์ชฝ์— ์ „๋‹ฌ๋ฐ›์€ ์ˆซ์ž ๋ฒˆ ํฌํŠธ์—์„œ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜
//      ๋’ค์ชฝ์— ์ธ์ž๋กœ ์ „๋‹ฌํ•œ ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜์—ˆ์„ ๋•Œ ์ตœ์ดˆ ํ•œ๋ฒˆ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค
// 3. ๊ฒฐ๊ณผ๊ฐ’
//      ์ƒ๊ฐX (์‹คํ–‰์ค‘์ธ ์„œ๋ฒ„ํƒ€์ž…)
profile
Slowly but surely
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€