์ค๋์ MVC ๋ฐํ์ผ๋ก ํ์๋ Sprint์์ ๋ณต์ตํ๊ณ ์ถ์ ๋ถ๋ถ๋ค์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค! Sprint๋ฅผ ํ๋ฉด์ MVC๊ฐ ์ด๋ป๊ฒ ๋ง๋ค์ด์ง๋์ง ์ค์ง์ ์ผ๋ก ํ์ธํ ์ ์์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
mysql์ ์ ์ํด์ CREATE DATABASE cmarket;
๋ผ๋ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค.
์ด ๋, ์ปค๋งจ๋ ์ฐฝ์ ๋ช
๋ น์ด๋ฅผ ํ๋ํ๋ ์
๋ ฅํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ค๋ฅด๊ฒ, ํ์ํ ๋ช
๋ น์ ์ ๋ฆฌํ ํ์ผ์ ์์ฑํ ๋ค์ ๋ฐฐ์น๋ชจ๋๋ก ์คํ ์ค์ธ MySQL ์๋ฒ์ ํ ๋ฒ์ ์ ์ฉํฉ๋๋ค.
๋ฐฐ์น๋ชจ๋ ์ฌ์ฉ๋ฐฉ๋ฒ์ ์๋ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค!
https://dev.mysql.com/doc/refman/8.0/en/batch-mode.html
์ดํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ์์ฑํฉ๋๋ค. CLI ํ๊ฒฝ์์ ๋ ํฌ์งํ ๋ฆฌ์ ์ง์ ํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์ปค๋งจ๋๋ฅผ ์ ๋ ฅํฉ๋๋ค.
mysql -u root -p < server/schema.sql -Dcmarket
ํน์ ์๋ชป๋ SQL์ ์์ฑํ์ฌ ์๋ชป๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ํ ์ด๋ธ์ด ์์ฑ๋ ๊ฒฝ์ฐ, ์๋ชป ์์ฑ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ญ์ ํ๊ณ ๋ค์ ์์ฑํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ SQL ๋ช ๋ น์ด๋ฅผ ์์ฑํฉ๋๋ค.
DROP DATABASE IF EXISTS [๋ค์ ์์ฑํ๋ ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค] CREATE DATABASE [๋ค์ ์์ฑํ๋ ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค]
MySQL ๋น๋ฐ๋ฒํธ๋ฅผ ๋ ํฌ์งํ ๋ฆฌ์์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ์ ๋ค๋ฃจ์ด ๋ณด๊ฒ ์ต๋๋ค. ๋ณด์์/ํธ์์ ์ด์ ๋ก ๋น๋ฐ๋ฒํธ๋ ํ๊ฒฝ ๋ณ์๋ก ๋ถ๋ฆฌํด ๋๋ ํธ์ด ์ข์ต๋๋ค. github๊ณผ ๊ฐ์ด ๊ณต๊ฐ๋ ํ๊ฒฝ์ ๋น๋ฐ๋ฒํธ๊ฐ ๋
ธ์ถ๋๋ฉด ์๋๊ธฐ ๋๋ฌธ์, ํ๊ฒฝ ๋ณ์๋ฅผ ๊ด๋ฆฌํ๋ ํ์ผ(.env
)์ ๋ฐ๋์ .gitignore
ํ์ผ์ ๋ฑ๋กํด์ผ ํฉ๋๋ค..env
ํ์ผ์์ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ํ๊ฒฝ ๋ณ์๊ฐ ์์ฑ๋ฉ๋๋ค.
DATABASE_PASSWORD=`Insert your password`
config.js
์ MySQL๊ณผ์ ์ฐ๊ฒฐ์ ์ํด DATABASE_PASSWORD
๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ npm ๋ชจ๋ dotenv
๋ก ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
const dotenv = require('dotenv');
dotenv.config();
// Require and configure dotenv.
const config = {
development: {
host: 'localhost',
user: 'root',
password: process.env.DATABASE_PASSWORD,
database: 'cmarket'
},
test: {
host: 'localhost',
user: 'root',
password: process.env.DATABASE_PASSWORD,
database: 'cmarket_test'
}
};
// After adding environment-specific variables to a .env file in the root directory of your project, process.env now has the keys and values you defined in .env file.
module.exports = config;
Server
App.js ํ์ผ์์ express ์ค์ ์ ํฉ๋๋ค. express๋ Node.js ์น ์๋ฒ์ ์ง์ ์ ์ด์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์๋ฒ ํ๋ ์์ํฌ ์ค ํ๋์ ๋๋ค.
Router
Router๋ Controller๋ก ์ง์ ํ ์ ์๊ฒ ๋์์ฃผ๋ endpoint์ ๋๋ค. ์๋ฅผ ๋ค์ด /users URL๋ก POST ์์ฒญ์ ๋ณด๋ผ ๊ฒฝ์ฐ, users ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋๊ฐ ์คํ๋๋๋ก ๋ง๋ค ์ ์์ต๋๋ค. ํ๋์ ํ์ผ ์์ ๋ชจ๋ ๊ตฌ์ฑํ๋๋ก ํ ์๋ ์๊ณ , endpoint์ ๋ฐ๋ผ ๋ถ๋ฆฌํ์ฌ ํ์ผ์ ๊ตฌ์ฑํ ์๋ ์์ต๋๋ค. ์๋์ ๊ฐ์ด ์์ฑํด์ User์ ์ฐ๊ฒฐ์ํฌ ์ ์์ต๋๋ค.
const express = require('express');
const router = express.Router();
router.get('user/:userId/orders', controller.orders.get);
router.post('user/:userId/orders', controller.orders.post);
module.export = router;
Controller
endpoint์ ๋ฐ๋ผ ๊ฐ๊ธฐ ๋ค๋ฅธ ๊ตฌํ์ด ํ์ํฉ๋๋ค. ๊ฐ๊ฐ ์๋ง๊ฒ Model์ ๊ตฌํ๋์ด ์๋ ๋ฉ์๋์ ์ฐ๊ฒฐํด์ฃผ๋ฉด ๋ฉ๋๋ค.
const models = require('../models'); //Connecting to Model
module.exports = {
items: {
get: (req, res) => {
models.items.get((error,result) => {
if (error) {
res.status(500).send('Internal Server Error');
} else {
res.status(200).json(result);
}
});
},
post: (req, res) => {
models.items.post(
...
)
}
}
};
Model
Model์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ค๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ฒ ์ธ์คํด์ค๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ mysql ๋ชจ๋์ ์ฌ์ฉํฉ๋๋ค. Controller์์ ์ฌ์ฉํ Method๋ค์ ์ฌ๊ธฐ์ SQL์ฟผ๋ฆฌ๋ฌธ์ผ๋ก DB์ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ ์ ์ํด์ค๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ ๋น๋๊ธฐ ์์ฒญ์ธ ์ ์ ๋ฐ๋์ ์ฃผ์ํด์ผ ํฉ๋๋ค.
const db = require('../db'); // Connecting to Database
module.exports = {
items: {
get: (callback) => {
const queryString = `SELECT * FROM items`;
db.query(queryString, (error, result) => {
callback (error, result);
});
}
}
}
์ ์ฝ๋์ ๋ํ์ฌ ์ฌ์ฉ์๊ฐ ์ฃผ๋ฌธ์ ํ์ ๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ๋ฐฉ๋ฒ๋ ๊ณต๋ถํ์ต๋๋ค. ์ด ๋ INSERT INTO ๋ฅผ ์ฌ์ฉํ๋๋ฐ ์๋ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
https://www.w3schools.com/nodejs/nodejs_mysql_insert.asp
Node.js MySQL Insert Into
Node.js MySQL Insert Into Insert Into Table To fill a table in MySQL, use the "INSERT INTO" statement. Example Insert a record in the "customers" table: var mysql = require('mysql'); var con = mysql.createConnection({ host: "localhost", user: "yourus
www.w3schools.com
ํ๋ฒ์ ๋ง์ ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ ๋๋ ๊ฐ์ ํฌํจํ ๋ฐฐ์ด์ ๋ง๋ค์ด ์ค ๋ค์, VALUES ๋ค์ '?'๋ฅผ ์ฌ์ฉํ๋ฉด ์ถ๊ฐํ ์ ์์ต๋๋ค. '?'์ value ๋ฐฐ์ด์ด ๋ค์ด๊ฐ๊ฒ ๋ฉ๋๋ค.
์ด๋ ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ๋, ์๋์ ์ผ๋ก result์ ๋ง์ง๋ง ๋ฒํธ + 1๋ก ์ถ๊ฐ๋ฉ๋๋ค. ( result. insertId )
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TIL 55: [๋ฐ์ดํฐ๋ฒ ์ด์ค] NoSQL (2) | 2021.10.19 |
---|---|
TIL 54: [๋ฐ์ดํฐ๋ฒ ์ด์ค] MVC (0) | 2021.10.18 |
TIL 52: [๋ฐ์ดํฐ๋ฒ ์ด์ค] MVC (0) | 2021.10.15 |
TIL 51: [๋ฐ์ดํฐ๋ฒ ์ด์ค] ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค (0) | 2021.10.13 |
TIL 50: [๋ฐ์ดํฐ๋ฒ ์ด์ค] ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค (0) | 2021.10.12 |