๐ŸŽฏ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB) ๊ฐœ๋…์„ ์ตํžˆ๊ณ , ๊ตฌ์ถ•ํ•œ DB์™€ ์—ฐ๊ฒฐ๋œ ์›น์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“™ Today I Learned

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(Database, DB)

๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์ฒด์ž…๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ๋ง‰๊ณ , ํšจ์œจ์ ์ด๊ณ  ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์—ฐ์‚ฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•˜๊ณ  ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DBMS(DataBase Management System)

๋ฐ์ดํ„ฐ๋ฅผ ์šด์˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ : ORACLE database, MySQL, MariaDB

Docker + MariaDB๋ฅผ ํ™œ์šฉํ•œ DB ๊ตฌ์ถ•

Docker ๐Ÿณ

Docker๋Š” ๋ฆฌ๋ˆ…์Šค์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ๊ฒฉ๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค์ž…๋‹ˆ๋‹ค.

์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ํ•˜๋‚˜์˜ ๋ฐ•์Šค(์ปจํ…Œ์ด๋„ˆ๐Ÿ“ฆ)์— ๋‹ด์•„, ์–ด๋””์„œ๋“  ๋˜‘๊ฐ™์ด ์‹คํ–‰๋˜๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ๋ž€?
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ชจ๋“  ์š”์†Œ(์ฝ”๋“œ, ๋Ÿฐํƒ€์ž„, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ)๋ฅผ ํฌํ•จํ•œ ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค.
์ถœ์ฒ˜: Docker


Docker ์„ค์น˜
Docker๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Docker Desktop๐Ÿณ์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Docker ์„ค์น˜ ๊ฐ€์ด๋“œ์—์„œ ์•Œ๋งž์€ OS๋ฅผ ์„ ํƒํ•˜์—ฌ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

MariaDB

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 ์ž…๋ ฅ

์•ˆ๋ณด์—ฌ๋„ ์ž…๋ ฅ์ด ๋œ ๊ฑฐ๋‹ˆ๊นŒ ๋‹นํ™ฉํ•˜์ง€ ๋ง๊ธฐ! ๐Ÿ˜Ž


SQL(Structure Query Language)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…(INSERT), ์ƒ์„ฑ(CREATE), ์กฐํšŒ(SELECT), ์ˆ˜์ •(UPDATE), ์‚ญ์ œ(DELETE)ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •ํ•˜๊ธฐ ( MariaDB์— ์ ‘์†ํ•œ ์ƒํƒœ )

  • ๋ฐฉ ํ™•์ธ
    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์— DB ์—ฐ๋™

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 ์—ฐ๊ฒฐ ๋ฐ ์ฟผ๋ฆฌ ์‹คํ–‰ ํ›„ ํ„ฐ๋ฏธ๋„์—์„œ ์ถœ๋ ฅ๋˜๋Š” ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.


HTML,CSS์™€ Node.js ์—ฐ๊ฒฐ

1๏ธโƒฃ HTML ํŒŒ์ผ ์ฝ์–ด์˜ค๊ธฐ (requestHandler.js)

requestHandler.js์—์„œ fs ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ์ฝ์–ด์˜ต๋‹ˆ๋‹ค.

readFileSync ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ main.html ํŒŒ์ผ์„ ์ฝ์Šต๋‹ˆ๋‹ค. ์ฝ์–ด์˜จ ํŒŒ์ผ ๋‚ด์šฉ์€ main_view ๋ณ€์ˆ˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ๋ถˆ๋Ÿฌ์˜จ HTML ํŒŒ์ผ ๋‚ด์šฉ ์‚ฝ์ž…
HTML ํŒŒ์ผ์„ ๋ณธ๋ฌธ์— ์‚ฝ์ž…ํ•˜์—ฌ ์›น ํŽ˜์ด์ง€๋กœ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.


โš ๏ธ ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ

node index.js ์‹คํ–‰ ์‹œ ์ด๋ฏธ์ง€ ํŒŒ์ผ์ด pathname์œผ๋กœ ์ธ์‹๋˜์–ด ์ด๋ฏธ์ง€๊ฐ€ ๋ฏธ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.


3๏ธโƒฃ handle ๊ฐ์ฒด์— ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ key๊ฐ’์œผ๋กœ ๋„ฃ์–ด ๊ฐ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ•จ์ˆ˜๋ฅผ value ๊ฐ’์œผ๋กœ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.


์ถœ๋ ฅํ•œ ์›น ํŽ˜์ด์ง€


์ฃผ๋ฌธ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ DB์— ์ถ”๊ฐ€ ๋ฐ ํŽ˜์ด์ง€ ์ด๋™ ๊ตฌํ˜„

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 ํ…Œ์ด๋ธ”์—์„œ ๋ชจ๋“  ์ฃผ๋ฌธ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜์—ฌ ๋ณธ๋ฌธ์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    • DB์—์„œ ๋ชจ๋“  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



URL ๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…

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=blue



๐Ÿง ์˜ค๋Š˜์˜ ๋ฐœ๊ฒฌ

  • Docker๋ฅผ ์ด์šฉํ•œ MariaDB ์ปจํ…Œ์ด๋„ˆ ์„ค์ •๊ณผ SQL ๋ช…๋ น์–ด์˜ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • DB์™€ ์›น์„ ์—ฐ๋™ํ•˜๋Š” ๊ณผ์ •์—์„œ SQL๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.



๐Ÿ–‹๏ธ ํ•œ ์ค„ ํšŒ๊ณ 

๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ํ™œ์šฉํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜ˆ์ƒ๋ณด๋‹ค ๋งŽ์€ ์žฅ์• ๋ฌผ์— ๋ถ€๋”ชํ˜”์ง€๋งŒ, ๊ทธ ์–ด๋ ค์›€์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ • ์†์—์„œ ๋ฐ์ดํ„ฐ์™€์˜ ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ์ค‘์š”์„ฑ์„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊นŠ์ด ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.๐Ÿซ 

profile
๐ŸŒฑ๊ฐœ๋ฐœ ๊ธฐ๋ก์žฅ

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