[Node.js] 7์ฅ MySQL
๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋?
๋ฐ์ดํฐ๋ฅผ ๋ณ์์ ์ ์ฅ, ์ฆ ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ๊ฒ ๋์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ.
์ ์ฅํ ๋ฐ์ดํฐ๋ฅผ ์ปดํจํฐ๊ฐ ๊บผ์ง๋๋ผ๋ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ด๋ จ์ฑ์ ๊ฐ์ง๋ฉฐ, ์ค๋ณต์ด ์๋ ๋ฐ์ดํฐ๋ค์ ์งํฉ์ด๋ฉฐ, ์ด๋ฌํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ๋ ์์คํ ์ DBMS๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๐ DBMS์ ๋ํด ์กฐ๊ธ ๋ ์์๋ณด์
DBMS๋ DataBase Management System์ ์ค์๋ง๋ก, ๋ฐ์ดํฐ๋ฅผ ํ ๊ณณ์ ๋ชจ์ ์ ์ฅ์๋ฅผ ๋ง๋ ๋ค ๊ทธ ์ ์ฅ์์ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๋ฑ์ ๊ธฐ๋ฅ์ ์ํํ๋ฉฐ, ์ ๋ณด๋ฅผ ๊ณต์ ํ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํ๋ค.
โ RDBMS
Relational DBMS, DBMS ์ ํ ์ค ํ๋๋ก, ๊ด๊ณํ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค. Oracle, MySQL, MSSQL ๋ฑ์ด ์๋ค.
๐ MySQL?
1995๋ ์ ๋ฐํ๋ ์คํ ์์ค RDBMS์ด๋ค. ์์ง ๋๋ฌผ์ ๋๊ณ ๋์ด๋ค. ๐ฌ
MySQL์ ๋ชจํ๋ก MariaDB๋ผ๋ RDBMS๊ฐ ์์ฑ๋์์ผ๋ฉฐ, ํ์ฌ ๋ฐฐํฌ๋ ๋ฆฌ๋ ์ค๋ MySQL๊ณผ MariaDB๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๊ณ ์๋ค.
๋ธ๋ก๊ทธ, ๊ฒ์ํ ๋ฑ ๋๋ถ๋ถ์ ์ฝํ ์ธ ๊ด๋ฆฌ ์์คํ ์ด MySQL์ ์ง์ํ๊ณ ์์ผ๋, Oracle ์ฌ์ Oracle DB๊ฐ ์๊ฒจ๋จ์ผ๋ก์จ MySQL๊ณผ Oracle DB์ ๊ฒฝ์์ด ์น์ดํ๋ค.
๐ ์ฌ๋ฏธ๋ก ์์๋ณด๋ RDBMS ์ ์ ์จ
1์ : Oracle DB
2์ : MySQL
3์ : MS SQL
4์ : PostgreSQL
์์ผ๋ก ์ธ๊ณ 4๋ RDBMS ์ ์ ์จ์ ์ฐจ์งํ๊ณ ์์ผ๋ฉฐ, ๊ทธ ์ธ์๋ SQLite, MariaDB, IBM ์ฌ์ DB2, ๊ตญ์ฐ SW ํ์ฌ์ธ ํฐ๋งฅ์ค์ํํธ์ฌ์ ํฐ๋ฒ ๋ก, Cubrid, INFORMIX, ALTIBASE HDB, XDM/RD, AIM, Firebird... ๋ฑ ๋ค์ํ RDBMS๊ฐ ์๋ค.
๐ ๊ฐ์ด ์ค์นํ๋ฉด ์ข์ ์ํฌ๋ฒค์น
์ฝ์๋ก๋ง ๋ฐ์ดํฐ๋ฅผ ํ์ธํ๋ ๊ฒ์ด ๋ฌด๋ฆฌ๊ฐ ์๊ธฐ์, ์ํฌ๋ฒค์น(MySQL Workbench)๋ผ๋ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค. https://dev.mysql.com/downloads/workbench/ ์์ ๋ค์ด๋ก๋๊ฐ ๊ฐ๋ฅํ๋ค.
๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ ์์ฑํ๊ธฐ
CREATE SCHEMA [๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช ] ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์นํ๋ค. ์ด๋, SCHEMA(์คํค๋ง) ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋์ผํ ๊ฐ๋ ์ด๋ค.
use nodejs; ๋ช ๋ น์ด๋ฅผ ์ถ๊ฐ๋ก ์ ๋ ฅํ์ฌ, nodejs ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํจ์ MySQL์๊ฒ ์ ๋ฌํ๋ค.
์ด์ , ํ ์ด๋ธ๋ ์์ฑํด ๋ณด์.
๐ ํ ์ด๋ธ์ ๋ญ๊ฐ์?
ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ์ ์๋ ํ์ ์๋ฏธํ๋ฉฐ, ํ ์ด๋ธ์ ๋ง๋ ๋ฐ์ดํฐ๋ง ์ ๋ ฅ๋ ์ ์๋ค.
์๋ฅผ ๋ค์๋ฉด, ํ ์ด๋ธ์ ํ์ด '๋ฐ๋ณด' ๋ผ๋ฉด '๋ฐ๋ณด ๊ณ ์์ด'๋ '๋ฐ๋ณด ๊ฐ์์ง'๋ ๋ค์ด์ฌ ์ ์์ผ๋, '์ฒ์ฌ ๋ณ์๋ฆฌ'๋ ๋ค์ด๊ฐ์ง ๋ชปํ๋ค.
CREATE TABLE [๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช .ํ ์ด๋ธ๋ช ] ์ผ๋ก ํ ์ด๋ธ์ ์์ฑํ๋ฉฐ, ์ฝค๋ง๋ก ๊ตฌ๋ถํ์ฌ ์ปฌ๋ผ์ ์์ฑํ๋ค.
์ปฌ๋ผ์๋ ๋ค์ํ ์๋ฃํ์ด ์์ผ๋, ์ด์ ์ ์ํ์ฌ ์ปฌ๋ผ์ ์์ฑํด ๋ณด์.
๐ CRUD!
Create, Read, Update, Delete. ์ด ๋ชจ๋ ๋จ์ด์ ์ฒซ ๊ธ์๋ฅผ ๋ชจ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ฅ ๋ง์ด ์ํํ๋ ๋ค ๊ฐ์ง ์์ ์ ๋ถ๋ฅธ๋ค.
๐ Create
INSERT INTO nodejs.users (name, age, married, comment) VALUES ('peep', 22, 0, 'kimpeep!');
์ด์ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ผ๋ฉฐ, users ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํด๋น ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ์์ ํ์ธํ ์ ์๋ค.
๐ Read
SELECT * FROM nodejs.users;
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ฉฐ, ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์๋ค.
๐ Update
UPDATE nodejs.users SET comment = '๊น์ก!' WHERE id = 1;
1๋ฒ ๋ก์ฐ์ comment๊ฐ ๊น์ก! ์ผ๋ก ์์ ๋๋ค.
๐ Delete
DELETE FROM nodejs.users WHERE id = 1;
1๋ฒ ๋ก์ฐ์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ค.
๐ ์ํ๋ผ์ด์ฆ?
๋ ธ๋์์ MySQL ์์ ์ ์ฝ๊ฒ ํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. Object-Relational Mapping์ผ๋ก ๋ถ๋ฅ๋๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฆด๋ ์ด์ ์ ๋งคํํด ์ฃผ๋ ๋๊ตฌ์ด๋ค.
์์ ์ธ๊ธํ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ํจ๊ป ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ ๊ตฌ๋ฌธ์ ์์์ SQL๋ก ๋ณ๊ฒฝํด ์ค๋ค๋ ์ฅ์ ์ด ์๋ค!