์ด์ ํผ๋ธ๋ฆฌ์ฑํ ํ ๋์ค ๋ง์ผ ํ์ด์ง์ ๋ฐฑ์๋๋ฅผ ์ฐ๊ฒฐํด์ฃผ์๋ค.
๐ซDB
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
๋จผ์ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ ํ ์ด๋ธ product๋ฅผ ๋ง๋ค์ด์ฃผ์๋ค.
CREATE TABLE product(
-> id INT,
-> name VARCHAR(30),
-> description VARCHAR(100),
-> price INT)
Node.js์์ MariaDB ์ฐ๊ฒฐํ๊ธฐ
Node.js์์ MariaDB๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํด์ mysql ๋ชจ๋์ ์ค์นํด์ฃผ์ด์ผ ํ๋ค.(MariaDB ๋ชจ์ฒด๊ฐ MySQL)
npm install mysql --save
๋ค์์ผ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ํ์ผ์ ์์ฑํด์ค๋ค. database/connect/mariadb.js ํ์ผ์ ๋ง๋ค์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์ค์ ํ๋ค.
const mariadb = require("mysql"); //๋ชจ๋ ์ํฌํธ
const conn = mariadb.createConnection({
host: "localhost",
port: 3306,
user: "",
password: "",
database: "Tennis",
});
module.exports = conn;
- mysql ๋ชจ๋ ์ํฌํธ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ณด ์์ฑ
- ์ฐ๊ฒฐ ๊ฐ์ฒด ๋ด๋ณด๋ด๊ธฐ
์๋ฒ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ด ์ค๊ณํ๋ค.
index.js
let router = require("./router");
let server = require("./server");
let requestHandler = require("./requestHandler");
const mariadb = require("./database/connect/mariadb");
mariadb.connect(); //์ฐ๊ฒฐ
server.start(router.route, requestHandler.handle);
- ์๋ฒ์ ์ง์ ์ ์ผ๋ก, ํ์ํ ๋ชจ๋๋ค์ ๋ถ๋ฌ์ค๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ์์ํ ํ, ์๋ฒ๋ฅผ ์คํํ๋ค.
requestHandler.js
const mariadb = require("./database/connect/mariadb");
function main(response) {
console.log("main");
mariadb.query("SELECT * FROM product", function (err, rows) {
console.log(rows);
});
response.writeHead(200, { "Content-Type": "text/html; charset=UTF-8" });
response.write("ํฉ๋ค๊ฒฝ");
response.end();
}
let handle = {}; //key:value
handle["/"] = main;
handle["/login"] = login;
exports.handle = handle;
- ๋ฉ์ธ ํ์ด์ง์ ์ ์ํ๋ฉด main ํจ์๊ฐ ํธ์ถ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ๋ณด๋ฅผ ์กฐํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ฝ์์ ์ถ๋ ฅํ๋ค.
์ฝ์์์ DB์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๐พํ ๋์ค ๋ง์ผ์ ๋ฐฑ์๋ ์ฐ๊ฒฐํ๊ธฐ
์ฐ์ ํ ๋์ค ๋ง์ผ์ ์ํ ์๋ก์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ ์์ฑํ๋ค.
CREATE TABLE orderlist(
-> product_id INT,
-> order_date VARCHAR(100) );
HTML ํ์ด์ง ๋์ฐ๊ธฐ
require('fs')๋ก html ํ์ผ์ ๊ฐ์ ธ์จ๋ค.
requestHandler.js
const fs = require("fs"); //html ํ์ผ์ ๊ฐ์ ธ์ด
const main_view = fs.readFileSync("./index.html", "utf-8");
...
response.write(main_view);
HTML์ ๋ณด์ด์ง๋ง ์ด๋ฏธ์ง์ ์คํ์ผ์ด ์ ์ฉ๋์ง ์์๋ค. ์ฝ์์์ ํ์ธํด๋ณด๋ฉด, CSS์ ์ด๋ฏธ์ง๊ฐ ๊ฒฝ๋ก๊ฐ์ผ๋ก ๋์ด์ค๊ณ ์๋ค.
์ด๋ ๊ฒ main.css์ ์ด๋ฏธ์ง๊ฐ ๊ฒฝ๋ก๊ฐ์ผ๋ก ๋์ด์ค๊ณ ์๋ค.
์ CSS์ ์ด๋ฏธ์ง๊ฐ ์๋์ผ๋ก ์ ์ฉ๋์ง ์์๊น?
๋ธ๋ผ์ฐ์ ๋ <link> ๋ <img> ๊ฒฝ๋ก๋ก ์ ์ ํ์ผ ์์ฒญ์ ๋ณด๋ด์ง๋ง, ์๋ฒ๋ ์ง์ ๊ฒฝ๋ก ์ง์ ๋ ์์ฒญ๋ง ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์, ์ ์ ํ์ผ ์์ฒญ์ ์๋ตํ ์ ์๋ ํธ๋ค๋ฌ๊ฐ ํ์ํ๋ค.
โญ handle ๊ฐ์ฒด์ ์ง์ ์ง์ ๋ ๊ฒฝ๋ก๋ง ์๋ตํ ์ ์๊ธฐ ๋๋ฌธ์, ์ด๋ฏธ์ง๋ CSS๋ ๋ณ๋์ handle ๊ฐ์ฒด์ถ๊ฐ๊ฐ ํ์!
ํด๊ฒฐ
function blueRacket(response) {
fs.readFile("./assets/blue.png", function (err, data) {
response.writeHead(200, { "Content-Type": "image/png; charset=UTF-8" });
response.write(data);
response.end();
});
}
function yellowRacket(response) {
fs.readFile("./assets/yellow.png", function (err, data) {
response.writeHead(200, { "Content-Type": "image/png; charset=UTF-8" });
response.write(data);
response.end();
});
}
function blackRacket(response) {
fs.readFile("./assets/black.png", function (err, data) {
response.writeHead(200, { "Content-Type": "image/png; charset=UTF-8" });
response.write(data);
response.end();
});
}
function handleCSS(response) {
fs.readFile("./main.css", function (err, data) {
response.writeHead(200, { "Content-Type": "text/css; charset=UTF-8" });
response.write(data);
response.end();
});
}
let handle = {}; //key:value
handle["/"] = main;
handle["/assets/blue.png"] = blueRacket;
handle["/assets/yellow.png"] = yellowRacket;
handle["/assets/black.png"] = blackRacket;
handle["/main.css"] = handleCSS;
์ฃผ๋ฌธ ๊ธฐ๋ฅ ๊ตฌํ
index.html
<input class="card_button" type="button" value="order" onClick="location.href='/order?productId=1'">
server.js, router.js์ productId ํ๋ผ๋ฏธํฐ ์ถ๊ฐํ๋ค.
requestHandler.js
function order(response, productId) {
response.writeHead(200, { "Content-Type": "text/html; charset=UTF-8" });
mariadb.query(
"INSERT INTO orderlist VALUES (" +
productId +
", '" +
new Date().toLocaleDateString() +
"');",
function (err, rows) {
console.log(rows);
}
);
response.write("");
response.end();
}
...
handle["/order"] = order;
ํ ๋์ค ๋ง์ผ ํ์ด์ง์์ order ๋ฒํผ ํด๋ฆญ ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๊ฐ ์ฝ์ ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฃผ๋ฌธ ๋ด์ญ ์ถ๋ ฅ: HTML + ๋์ ๋ฐ์ดํฐ
์ฐ์ orderlist.html ์ ๋ฐ์์ ๋ธ๋ผ์ฐ์ ์ ํ์ํ๋๋ก orderlist_view ์์ฑํ๋ค. orderlist ํจ์๋ฅผ ๋ง๋ค๊ณ , orderlsit_view๋ฅผ ๋ฐ์์จ๋ค.
orderlist ํจ์ ๋ด์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์, ํ ์ด๋ธ๋ก ๋ฟ๋ฆฌ๋ ์ฝ๋๋ฅผ ๋ง๋ค์ด์ค์ผ ํ๋ค.
mariadb.query("SELECT * FROM orderlist", function (err, rows) {
response.write(orderlist_view);
rows.forEach((element) => {
response.write(
"<tr>" +
"<td>" +
element.product_id +
"</td>" +
"<td>" +
element.order_date +
"</td>" +
"</tr>"
);
});
response.write("</table>");
๊ธฐ์กด์ orderlist.html ํ ์ด๋ธ์๋ ์ฝ๊ฐ์ ์์ ์ ํด์ฃผ์ด์ผ ํ๋ค.
<table>
<th>Product</th>
<th>Order Date</th>
ํ ์ด๋ธ์ ๊ตฌ์ฑํ๋ ์์๋ orderlsit ํจ์์์ rows์ ์๋ ๊ฐ๋ค์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์, ํ๋ฉด์ ํ ์ด๋ธ๋ก ์ถ๋ ฅํ๋ค.
'๐๏ธํ๋ก๊ทธ๋๋จธ์ค ๋ฐ๋ธ์ฝ์ค > ํ๋ก์ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐ๋ธ์ฝ์ค] ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ๋ง ํ๋ก์ ํธ(ERD, DDL) (0) | 2025.04.09 |
---|---|
[๋ฐ๋ธ์ฝ์ค]๐พํ ๋์ค ๋ง์ผ ๋ง๋ค๊ณ ๋ฐฐํฌํ๊ธฐ(HTML,CSS,Netlify) (0) | 2025.04.03 |