
๐ฏ ๋ฐ์ดํฐ๋ฒ ์ด์ค(DB) ๊ฐ๋ ์ ์ตํ๊ณ , ๊ตฌ์ถํ DB์ ์ฐ๊ฒฐ๋ ์น์ ๊ตฌํํฉ๋๋ค.
๋ฐ์ดํฐ๋ฅผ ํตํฉํ์ฌ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ฐ์ดํฐ ์งํฉ์ฒด์ ๋๋ค.
๋ฐ์ดํฐ๋ฅผ ์ด์ํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ์์คํ ์ ๋๋ค.
Docker๋ ๋ฆฌ๋ ์ค์ ์์ฉ ํ๋ก๊ทธ๋จ๋ค์ ๊ฒฉ๋ฆฌํ๋ ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ ๊ด๋ฆฌํ๋ ์คํ ์์ค์ ๋๋ค.
์ฆ, ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ๊ฒ์ ํ๋์ ๋ฐ์ค(์ปจํ ์ด๋๐ฆ)์ ๋ด์, ์ด๋์๋ ๋๊ฐ์ด ์คํ๋๋๋ก ๋์์ฃผ๋ ๋๊ตฌ์ ๋๋ค.
์ปจํ ์ด๋๋?
์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ํ์ํ ๋ชจ๋ ์์(์ฝ๋, ๋ฐํ์, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ)๋ฅผ ํฌํจํ ๋ ๋ฆฝ๋ ํ๊ฒฝ์ ๋๋ค.
์ถ์ฒ: Docker
Docker ์ค์น
Docker๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด Docker Desktop๐ณ์ ์ค์นํด์ผ ํฉ๋๋ค.
MySQL์ ํ์ ๋ฒ์ ์ผ๋ก, ๋น ๋ฅด๊ณ ์์ ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์
์ ๊ณตํฉ๋๋ค.

Docker๋ฅผ ์ฌ์ฉํ์ฌ MariaDB ์ค์น ( docker ์คํ ์ค์ธ ์ํ )

1๏ธโฃ MariaDB ์ด๋ฏธ์ง ๋ค์ด๋ก๋
docker pull mariadb
๐ค ์ด๋ฏธ์ง๋ ๋ฌด์์ผ๊น?
๋์ปค์์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ ์ด๋ฏธ์ง(Image) ๊ฐ ํ์ํฉ๋๋ค. ์ด๋ฏธ์ง๋ ์ฝ๊ฒ ๋งํด, ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๊ธฐ์ด ํ ํ๋ฆฟ์ ๋งํฉ๋๋ค. ์ด๋ฏธ์ง ์์๋ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๋ฐ ํ์ํ ํ๊ฒฝ ์ค์ , ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ์ผ๋ค์ด ๋ชจ๋ ๋ด๊ฒจ ์์ต๋๋ค.
์ถ์ฒ: dataminded
๊ทธ๋ฐ๋ฐ ๋์ปค ์ด๋ฏธ์ง๋ ๊ทธ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ ๊ฐ์ง๋ก ๋๋ ์ ์์ต๋๋ค.
- ์ง์ ๋ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฏธ์ง
- ๊ธฐ์ฑ ์๋น์ค์ฉ ์ด๋ฏธ์ง (์: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฏธ์ง) ๐ "์ฐ๋ฆฌ๊ฐ ์งํํ ์ด๋ฏธ์ง"
์ด ๋์ ์ญํ ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ ๋ฐฉ์์๋ ์ฐจ์ด๊ฐ ์๊น๋๋ค.
๐ค ์ ๊ตฌ๋ถํด์ผ ํ ๊น์?
์ด๋ฏธ์ง๋ผ๋ ๊ฐ๋ ์ ๊ฐ์ง๋ง,
- ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฏธ์ง๋ ๋ด๊ฐ ๋ง๋ ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํ ํ๊ฒฝ์ ๋ด๊ณ ,
- DB ์ด๋ฏธ์ง๋ ์๋น์ค(๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ)๋ฅผ ์คํํ ์ ์๊ฒ ์ค๋น๋ ํ๊ฒฝ์ ๋ด์ต๋๋ค.
์ฆ, ์ฉ๋์ ๋ฐ๋ผ ์ด๋ฏธ์ง์ ๊ตฌ์กฐ๋, ์ฌ์ฉ ๋ฐฉ๋ฒ๋ ๋ฌ๋ผ์ง๊ฒ ๋๋ ๊ฒ์ ๋๋ค.
2๏ธโฃ MariaDB ์ปจํ ์ด๋ ์คํ
docker run --name mariadb -d -p 3306:3306 --restart=always -e MYSQL_ROOT_PASSWORD=๋น๋ฐ๋ฒํธ mariadb
-e MYSQL_ROOT_PASSWORD=๋น๋ฐ๋ฒํธ: ๋น๋ฐ๋ฒํธ ์ค์ 3๏ธโฃ MariaDB ์ปจํ ์ด๋์ ์ ์
docker exec -it mariadb /bin/bash
4๏ธโฃ MariaDB ์ ์
mysql -u root -p
โ mariadb -u ์ฌ์ฉ์์ด๋ฆ -p : ์ฌ์ฉ์ ์ด๋ฆ ์ค์
โ ๏ธ ๋ฐ์ํ ์ค๋ฅ
mysql ์คํ ์bash: mysql: command not found์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
๐ก ํด๊ฒฐ ๊ณผ์
ํด๋น ์ค๋ฅ๋ฅผ ๊ฒ์ํ์ฌ ๋์ค๋ ํํ ํด๊ฒฐ ๋ฐฉ๋ฒ๋ถํฐ ์ฌ๋ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๋ํ์ง๋ง ํด๊ฒฐ๋์ง ์์๊ณ , ์์๋ธ ๊ฒฐ๊ณผmariadb -u root -p๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ ๊ฒ, ์ด๋ฅผ ์ ์ฉํ๋ ์ ์์ ์ผ๋ก ์คํ๋์๋ค.
5๏ธโฃ password ์ ๋ ฅ
์๋ณด์ฌ๋ ์ ๋ ฅ์ด ๋ ๊ฑฐ๋๊น ๋นํฉํ์ง ๋ง๊ธฐ! ๐
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ฒ๋ฆฌํ๋ ์ธ์ด์
๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ฝ์
(INSERT), ์์ฑ(CREATE), ์กฐํ(SELECT), ์์ (UPDATE), ์ญ์ (DELETE)ํ ์ ์๋ ๋ช
๋ น์ด๋ค์ด ์์ต๋๋ค.
๋ฐฉ ํ์ธ
SHOW DATABASES;

๋ฐฉ ๋ง๋ค๊ธฐ
CREATE DATABASE ์ด๋ฆ;

๋ฐฉ ๋ค์ด๊ฐ๊ธฐ
USE ์ด๋ฆ;
๋ฐฉ ์ ํ
์ด๋ธ ๋ณด๊ธฐ
SHOW TABLES;

๋ฐฉ ์์์ ์ ์ฅ์ ๋ง๋ค๊ธฐ
CREATE TABLE ํ
์ด๋ธ๋ช
(Enter)
(
(Enter)
์นผ๋ผ๋ช
์๋ฃํ,
(Enter)
...
(Enter)
);
๐ก Enter๋ ๊ฐ๋
์ฑ์ ๋์ด๊ธฐ ์ํ ๊ฒ์ผ ๋ฟ, ํ์๋ ์๋๋๋ค.

ํ
์ด๋ธ ๋ฐ์ดํฐ ์กฐํ
SELECT ์นผ๋ผ๋ช
FROM ํ
์ด๋ธ๋ช
;
(์นผ๋ผ๋ช
์ *์ ๋ฃ์ผ๋ฉด ์ ์ฒด ๋ฐ์ดํฐ ์กฐํ ๊ฐ๋ฅ)

ํน์ ๋ฐ์ดํฐ ์กฐํ
SELECT ์นผ๋ผ๋ช
FROM ํ
์ด๋ธ๋ช
(Enter)
WHERE ์กฐ๊ฑด;

ํ
์ด๋ธ ๋ฐ์ดํฐ ์ฝ์
INSERT INTO ํ
์ด๋ธ๋ช
(์นผ๋ผ๋ช
1, ์นผ๋ผ๋ช
2, ... )
(Enter)
VALUES(์นผ๋ผ1 ๋ฐ์ดํฐ, ์นผ๋ผ2 ๋ฐ์ดํฐ, ...);

ํ
์ด๋ธ ๋ฐ์ดํฐ ์์
UPDATE ํ
์ด๋ธ๋ช
(Enter)
SET ์นผ๋ผ๋ช
= ์์ ํ ๊ฐ
(Enter)
WHERE ์กฐ๊ฑด;

DELETE FROM ํ
์ด๋ธ(Enter)WHERE ์กฐ๊ฑด;Node.js์์ MariaDB๋ฅผ ์ฐ๋ํ๋ ค๋ฉด mysql ํจํค์ง๋ฅผ ์ค์นํ๊ณ ์ฐ๊ฒฐ์ ์ค์ ํด์ผ ํฉ๋๋ค.
1๏ธโฃ mysql ํจํค์ง ์ค์น
npm install mysql --save
โ npm install mysql
๐ก
--save์ต์ ์ ์ด์ ์๋ ํจํค์ง๋ฅผdependencies(ํ๋ก์ ํธ์์ ํ์ํ ํจํค์ง ๋ชฉ๋ก)์ ์ถ๊ฐํ๊ธฐ ์ํด ์ฌ์ฉ๋์์ต๋๋ค. ํ์ง๋ง npm 5๋ถํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋กdependencies์ ์ถ๊ฐ๋๋๋ก ๋ณ๊ฒฝ๋์ด ์ด์ ๋ ํ์ํ์ง ์์ต๋๋ค.
2๏ธโฃ mariadb.js ํ์ผ ์ค์ (DB ์ฐ๊ฒฐ)
database > connect ํด๋์ mariadb.js ํ์ผ์ ์์ฑํ๊ณ , ์๋์ ๊ฐ์ด ์ค์ ํฉ๋๋ค.

โ ์
mariadb.js๋module.exports = conn;์ ์ฌ์ฉํ ๊น?
mariadb.js์์ ๋ด๋ณด๋ด๋ ๊ฒ์ Mariadb ์ฐ๊ฒฐ ๊ฐ์ฒด (conn) ํ๋๋ฟ์ด๋ฏ๋กmodule.exports๋ฅผ ํต์งธ๋ก ๋ฎ์ด์์ฐ๋ ๊ฒ์ด ์ ์ ํฉ๋๋ค.exports๋ ๋จ์ํmodule.exports์ ์ฐธ์กฐ(๋ณ์นญ)์ ๋๋ค.- ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ๋ด๋ณด๋ผ ๋๋
exports.ํค๊ฐ = ๊ฐ๋ฐฉ์์ผ๋ก ๋ด๋ณด๋ด๋ฉด ๋ฉ๋๋ค.
3๏ธโฃ index.js ํ์ผ ์ค์ (์ฐ๊ฒฐ ๋ฐ ์คํ)
DB ์ฐ๊ฒฐ์ ์ค์ ํ๊ณ , ์ฐ๊ฒฐ์ ์์ํฉ๋๋ค.

4๏ธโฃ requestHandler.js ํ์ผ ์ค์ (์ฟผ๋ฆฌ ์คํ)
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.

ํฐ๋ฏธ๋ ์ถ๋ ฅ ๊ฒฐ๊ณผ
DB ์ฐ๊ฒฐ ๋ฐ ์ฟผ๋ฆฌ ์คํ ํ ํฐ๋ฏธ๋์์ ์ถ๋ ฅ๋๋ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

1๏ธโฃ HTML ํ์ผ ์ฝ์ด์ค๊ธฐ (requestHandler.js)

requestHandler.js์์ fs ๋ชจ๋์ ์ฌ์ฉํ์ฌ ํ์ผ์ ์ฝ์ด์ต๋๋ค.
readFileSync ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ main.html ํ์ผ์ ์ฝ์ต๋๋ค. ์ฝ์ด์จ ํ์ผ ๋ด์ฉ์ main_view ๋ณ์์ ์ ์ฅํฉ๋๋ค.
2๏ธโฃ ๋ถ๋ฌ์จ HTML ํ์ผ ๋ด์ฉ ์ฝ์
HTML ํ์ผ์ ๋ณธ๋ฌธ์ ์ฝ์
ํ์ฌ ์น ํ์ด์ง๋ก ๋ ๋๋งํฉ๋๋ค.

โ ๏ธ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ์ฒ๋ฆฌ
node index.js ์คํ ์ ์ด๋ฏธ์ง ํ์ผ์ด pathname์ผ๋ก ์ธ์๋์ด ์ด๋ฏธ์ง๊ฐ ๋ฏธ์์ฑ๋ฉ๋๋ค.
3๏ธโฃ handle ๊ฐ์ฒด์ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ฅผ key๊ฐ์ผ๋ก ๋ฃ์ด ๊ฐ ์ด๋ฏธ์ง ํ์ผ์ ๋ถ๋ฌ์ค๋ ํจ์๋ฅผ value ๊ฐ์ผ๋ก ๋ฃ์ด์ค๋๋ค.


์ถ๋ ฅํ ์น ํ์ด์ง

1๏ธโฃ MariaDB ํ ์ด๋ธ ์์ฑ
orderlist ํ์ด์ง๋ฅผ ์ํด MariaDB์์ orderlist ํ
์ด๋ธ์ ์์ฑํฉ๋๋ค.

2๏ธโฃ main.html ๋ฒํผ์ ๋งํฌ ๊ฑธ๊ธฐ

order ๋ฒํผ์ ๋๋ ์ ๋ ํ์ด์ง ์ด๋๊ณผ ํจ๊ป ์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ค๋ฉด, ๋ฒํผ์ onclick ์ด๋ฒคํธ๋ก location.href๋ฅผ ์ฌ์ฉํฉ๋๋ค. product=1์ ์ฃผ๋ฌธํ ์ ํ์ ID์
๋๋ค. ์ด ๊ฐ์ URL ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ฉ๋๋ค.
order list ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด orderlist ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
3๏ธโฃ requestHandler.js ์ค์
/order์ /orderlist ๊ฒฝ๋ก๋ฅผ ์ฒ๋ฆฌํ ํธ๋ค๋ฌ ํจ์๋ฅผ ์ ์ํฉ๋๋ค.


order ํจ์์์ ๋ฒํผ์ ํด๋ฆญํ ๋, ํด๋น ์ฃผ๋ฌธ ์ ๋ณด๋ฅผ DB์ ์ฝ์
ํฉ๋๋ค.
mariadb.query๋ฅผ ์ฌ์ฉํด DB์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํฉ๋๋ค.orderlist ํจ์์์๋ orderlist ํ
์ด๋ธ์์ ๋ชจ๋ ์ฃผ๋ฌธ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ฌ ๋ณธ๋ฌธ์ ํ์ํฉ๋๋ค.
orderlist ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ํ, HTML ํ
์ด๋ธ ํ์์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.4๏ธโฃ server.js์ query ํ๋ผ๋ฏธํฐ ์ถ๊ฐ
url.parse(request.url, true).query๋ฅผ ์ฌ์ฉํ์ฌ URL์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ์ถํ๊ณ , ์ด๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.

โน๏ธ
true๊ฐ ์ฌ์ฉ๋๋ ์ด์
์ด ์ธ์๊ฐ ์์ด์ผ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ด ์๋์ผ๋ก ๊ฐ์ฒด๋ก ๋ณํ๋์ด ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.const parsedUrl = url.parse('http://example.com/order?product=1&quantity=3&color=blue', true); console.log(parsedUrl.query.product); // 1 console.log(parsedUrl.query.quantity); // 3 console.log(parsedUrl.query.color); // blue
http://example.com/order?product=1&quantity=3&color=blue
URL (Uniform Resource Locator) : ์์์ ์์น๋ฅผ ๋ํ๋ด๋ ์น ์ฃผ์ ์ ์ฒด์ ๋๋ค.
http://example.com/order?product=1&quantity=3&color=blueํ๋กํ ์ฝ (Protocol) : ์๋ฒ์ ํต์ ํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋๋ค.
httpํธ์คํธ (Host) : ์น์ฌ์ดํธ๋ ์๋ฒ์ ์ฃผ์์ ๋๋ค.
example.com๊ฒฝ๋ก / ํจ์ค๋ค์ (Pathname) : ์๋ฒ ๋ด ์์์ด ์๋ ๊ฒฝ๋ก์ ๋๋ค.
/order์ฟผ๋ฆฌ ๋ฌธ์์ด (Query String) : ? ๋ค์ ์ค๋ ์ ์ฒด ๋ฌธ์์ด๋ก, ํ๋ผ๋ฏธํฐ๋ค์ ๋ฌถ์์
๋๋ค.
product=1&quantity=3&color=blue์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ (Query Parameter) : key=value ํํ์ ๊ฐ๊ฐ์ ์์ ๋งํฉ๋๋ค.
product=1, quantity=3, color=blueํ๋ผ๋ฏธํฐ ํค (Parameter Key) : ๊ฐ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ์ ์ด๋ฆ์ ๋๋ค.
product, quantity, colorํ๋ผ๋ฏธํฐ ๊ฐ (Parameter Value) : ๊ฐ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ ๋์๋๋ ์ค์ ๊ฐ์ ๋๋ค.
1, 3, blue& ๊ธฐํธ : ์ฌ๋ฌ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ตฌ๋ถํด์ฃผ๋ ๊ธฐํธ์
๋๋ค.
product=1 & quantity=3 & color=blueDocker๋ฅผ ์ด์ฉํ MariaDB ์ปจํ ์ด๋ ์ค์ ๊ณผ SQL ๋ช ๋ น์ด์ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ์ ์๊ฒ ๋์์ต๋๋ค.
DB์ ์น์ ์ฐ๋ํ๋ ๊ณผ์ ์์ SQL๋ฅผ ํ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ํ์ฉํ๋ ๊ณผ์ ์์ ์์๋ณด๋ค ๋ง์ ์ฅ์ ๋ฌผ์ ๋ถ๋ชํ์ง๋ง, ๊ทธ ์ด๋ ค์์ ํด๊ฒฐํ๋ ๊ณผ์ ์์์ ๋ฐ์ดํฐ์์ ์ฐ๊ฒฐ ๊ณ ๋ฆฌ๋ฅผ ๋ง๋๋ ์ค์์ฑ์ ๋ค์ ํ ๋ฒ ๊น์ด ๊นจ๋ฌ์์ต๋๋ค.๐ซ