๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป Dev/Back-End

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™

yesolz 2024. 8. 28. 22:01
728x90

 

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

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

 

DBMS (DataBase Management System)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑ, ๊ด€๋ฆฌ, ์กฐ์ž‘ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ

  • ๊ด€๊ณ„ํ˜• DBMS (RDBMS): MySQL, PostgreSQL, Oracle, Microsoft SQL Server ๋“ฑ.
  • ๋น„๊ด€๊ณ„ํ˜• DBMS (NoSQL): MongoDB, Cassandra, Redis ๋“ฑ.

 

SQL (Structured Query Language)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ์‚ฐ์„ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด

๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ, ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ ๋“ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

INSERT, SELECT, UPDATE, DELETE, .. 

 

Docker ๊ฐœ์š”

Docker: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆ๋กœ ํŒจํ‚ค์ง•ํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํ”Œ๋žซํผ

https://www.docker.com/resources/what-container/

 

  • Infrastructure: ๋ฌผ๋ฆฌ์  ์„œ๋ฒ„๋‚˜ ๊ฐ€์ƒ ๋จธ์‹ ๊ณผ ๊ฐ™์€ ํ•˜๋“œ์›จ์–ด ์ธํ”„๋ผ
  • Host Operating System: ์ธํ”„๋ผ ์œ„์— ์„ค์น˜๋œ ์šด์˜ ์ฒด์ œ
  • Docker: ์ด ์šด์˜ ์ฒด์ œ ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ ๋„๊ตฌ๋กœ, ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰
  • Containerized Applications: Docker๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฐœ๋ณ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์ž…๋‹ˆ๋‹ค. ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋…๋ฆฝ์ ์ธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋ฉฐ, ์„œ๋กœ ๊ฒฉ๋ฆฌ๋˜์–ด ์žˆ๋‹ค.

 

mariaDB ์„ค์น˜

๋„์ปค์—์„œ mariaDB ์„ค์น˜

  1. docker pull mariadb
  2. docker run --name mariadb -d -p 3306:3306 --restart=always -e MYSQL_ROOT_PASSWORD=root mariadb
    • --name mariadb: ์ƒ์„ฑ๋œ ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„์„ mariadb๋กœ ์ง€์ •
    • -d: ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰(Detached mode)
    • -p 3306:3306: ํ˜ธ์ŠคํŠธ์˜ ํฌํŠธ 3306์„ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ 3306์— ๋งคํ•‘. -> MariaDB์— ์™ธ๋ถ€์—์„œ ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์„ค์ •
    • --restart=always: Docker ๋ฐ๋ชฌ์ด ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค ์ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘๋˜๋„๋ก ์„ค์ •
    • -e MYSQL_ROOT_PASSWORD=root: MariaDB์˜ root ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ root๋กœ ์„ค์ •
    • mariadb: ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ด๋ฏธ์ง€ ์ด๋ฆ„. ์ด ๊ฒฝ์šฐ ์ด์ „ ๋‹จ๊ณ„์—์„œ ๋‹ค์šด๋กœ๋“œํ•œ mariadb ์ด๋ฏธ์ง€

 

 

์ ‘์†

  1. mariadb๊ฐ€ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ ‘์†: docker exec -it mariadb /bin/bash
    • docker exec: ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ช…๋ น์–ด
    • -it: ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ชจ๋“œ๋กœ ํ„ฐ๋ฏธ๋„์„ ์—ฐ๊ฒฐํ•˜์—ฌ, stdin๊ณผ stdout์„ ํ™œ์„ฑํ™”. ์ฆ‰, ์‚ฌ์šฉ์ž์™€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ํ„ฐ๋ฏธ๋„ ์„ธ์…˜์„ ์ƒ์„ฑ
    • mariadb: ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋Œ€์ƒ ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„
    • /bin/bash: ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด. ์—ฌ๊ธฐ์„œ๋Š” Bash ์…ธ์„ ์‹คํ–‰ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ช…๋ น์ค„์— ์ ‘๊ทผ
  2. mariadb ์‹คํ–‰: mysql -u root -p (mariadb -u root -p)
    • mysql: MariaDB ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์–ด
    • -u root: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•  ์‚ฌ์šฉ์ž๋ฅผ ์ง€์ •. ์—ฌ๊ธฐ์„œ๋Š” root ์‚ฌ์šฉ์ž ์ง€์ •
    • -p: ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ผ๋Š” ํ”„๋กฌํ”„ํŠธ๋ฅผ ํ‘œ์‹œ. ์ดํ›„ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด์•ผ MariaDB์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ•˜๋‚˜ํ•˜๋‚˜์˜ ๋ฐฉ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค!

 

SHOW DATABASES;

CREATE DATABASE Tennis;

Use Tennis;

; ์„ธ๋ฏธ์ฝœ๋ก ์„ ๊ผญ ์ฐ์–ด์•ผ ์ฟผ๋ฆฌ๊ฐ€ ๋๋‚ฌ๋‹ค๋Š” ๋œป์ด๋‹ค. ์žŠ์ง€ ๋ง์ž!

 

  • ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์กฐํšŒ: SELECT ์ปฌ๋Ÿผ๋ช… FROM ํ…Œ์ด๋ธ”๋ช…;
  • ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์‚ฝ์ž…: INSERT ์ปฌ๋Ÿผ๋ช…1, ์ปฌ๋Ÿผ๋ช…2, ... INTO ํ…Œ์ด๋ธ”๋ช… VALUES (์ปฌ๋Ÿผ1 ๋ฐ์ดํ„ฐ, ์ปฌ๋Ÿผ2 ๋ฐ์ดํ„ฐ, ...);
id name pwd
solCoding kim sol aaaa
tennisking park sol bbbb
programmer song sol cccc

SELECT id, name, pwd FROM member;

 

MariaDB [Tennis]> SELECT * FROM member;

 

ํŠน์ • ๋ฐ์ดํ„ฐ ์กฐํšŒ: SELECT ์ปฌ๋Ÿผ๋ช… FROM ํ…Œ์ด๋ธ”๋ช… WHERE ์กฐ๊ฑด;

ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์ˆ˜์ •: UPDATE ํ…Œ์ด๋ธ”๋ช… SET ์ปฌ๋Ÿผ๋ช… = ์ˆ˜์ •ํ•  ๊ฐ’ WHERE ์กฐ๊ฑด;

ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์‚ญ์ œ: DELETE FROM ํ…Œ์ด๋ธ”๋ช… WHERE ์กฐ๊ฑด;

์ˆ˜์ •, ์‚ญ์ œ ํ•  ๋•Œ WHERE์ ˆ์„ ์ œ์™ธํ•˜๋ฉด ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์ „์ฒด์— ์ ์šฉ๋˜๋ฏ€๋กœ ์ฃผ์˜ํ•˜์ž.

 

Node.js์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— npm install mysql --save

๋ฃจํŠธ์— database ํด๋” / connect ํด๋” / mariadb.js ์ƒ์„ฑ

const mariadb = require("mysql");

const conn = mariadb.createConnection({
  host: "localhost",
  port: 3306,
  user: "root",
  password: "root",
  database: "Tennis",
});

module.exports = conn;

 

index.js์— mariadb connect ์ถ”๊ฐ€

let server = require("./server");
let router = require("./router");
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);
  });

main ์ผ ๋•Œ query ๋‚ ๋ ค์„œ ๊ฐ€์ ธ์˜ค๋ฉด

์ด๋ ‡๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค!

728x90