๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค(Database; DB)
๋ฐ์ดํฐ๋ฅผ ํตํฉํ์ฌ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ์งํฉ์ฒด
๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ์ฌ ๊ด๋ฆฌํจ์ผ๋ก์จ ๋ฐ์ดํฐ ์ค๋ณต์ ๋ง๊ณ , ํจ์จ์ ์ด๊ณ ๋น ๋ฅธ ๋ฐ์ดํฐ ์ฐ์ฐ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฅ์
- ๋ฐ์ดํฐ ์ค๋ณต ์ต์ํ
- ์ ์ฅ๋ ์๋ฃ๋ฅผ ๊ณต๋ ์ด์ฉ ๊ฐ๋ฅ
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ(์ ํ์ฑ, ์ผ๊ด์ฑ, ์ ํจ์ฑ์ด ์ ์ง๋๋ ๊ฒ) ์ ์ง
DBMS (DataBase Management System)
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด์ํ๊ธฐ ๊ด๋ฆฌํ๊ธฐ ์ํด DBMS๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉ
๋ํ์ ์ผ๋ก Oracle, MySQL, MariaDB๊ฐ ์๊ณ
์ด์ํ์ฌ๋ ๋ค๋ฅด์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ์ฐ์ ์์ฒญํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ฃผ์ ๋ช ๋ น์ด๋ SQL๋ก ๋์ผ
SQL (Structured Query Language)
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ์ฐ์ ์์ฒญํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ธ์ด
๋ฐ์ดํฐ๋ฅผ ์์ฑ, ์กฐํ, ์์ , ์ญ์ ๋ฑ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ํ
- ๋ฐ์ดํฐ ์ฝ์ : INSERT
- ๋ฐ์ดํฐ ์กฐํ : SELECT
- ๋ฐ์ดํฐ ์์ : UPDATE
- ๋ฐ์ดํฐ ์ญ์ : DELETE
RDBMS (Relational DBMS)
๋ฐ์ดํฐ ๊ฐ "๊ด๊ณ"๊ฐ ์ถ๊ฐ๋ DBMS
๊ทธ๋ ๋ด DBMS์ RDBMS์ ์ฐจ์ด๋ ๋ญ๊น?
DBMS | RDBMS |
๋ฐ์ดํฐ๋ฅผ ํ์ผ๋ก ์ ์ฅ | ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ ํ์์ผ๋ก ์ ์ฅ |
๋ฐ์ดํฐ๋ ๊ณ์ธต์ ํ์ ๋๋ ํ์ ํ์์ผ๋ก ์ ์ฅ | ํ ์ด๋ธ๋ค์ PK๋ผ๋ ์๋ณ์ ์์ |
ํ์คํ X | ํ์คํ O |
๋ฐ์ดํฐ ๋ณด๊ด์ ์์ด ์ด๋ ํ ๋ณด์๋ ์ ๊ณต X | ACID๋ฅผ ์ํ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์ ์ ์ A (Atomocity ์์์ฑ) C (Consistenct ์ผ๊ด์ฑ) I (Isolation ๊ณ ๋ฆฝ์ฑ) D (Durability ์ง์์ฑ) |
ํ์ผ๋ก ์ ์ฅํ๊ธฐ์ ํ ์ด๋ธ ๊ฐ ๊ด๊ณ X | ๋ฐ์ดํฐ ์ ๊ทผ์ ์ํด ํ ์ด๋ธ ๊ฐ ๊ด๊ณ O |
์ ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ ๋ฆฌ | ๋ง์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ ๋ฆฌ |
XML ๋ฅ | MySQL, Oracle, SQL Server ๋ฑ |
์ด์ ์ค์ ํ ์ด๋ธ๋ก ํ์ธํด๋ณด์
์ฐธ๊ณ ๋ก ํ ์ด๋ธ์ ์ธ๋ก์ค(์ด)์ Column, ๊ฐ๋ก์ค(ํ)์ Row๋ผ๊ณ ํํํ๋ค.
๊ฒ์๊ธ ๋ฒํธ | ์ ๋ชฉ | ๋ด์ฉ | ์์ฑ์ผ์ | ์์ ์ผ์ | ์์ฑ์ |
1 | ๋๋ ๋๊นจ๋น | ์๋ ํ์ธ์ | 2024-01-01 | 2024-01-16 | ๊ณต์ |
2 | ๋๋ ์ ์น์ฌ์ | ์ ๋ ์ ์น์ฌ์์ ๋๋ค | 2024-01-18 | 2024-01-20 | ์ด๋์ฑ |
3 | ๋๋ ์นด๋ํ๋ ๋๊นจ๋น | ์นด๋ ๋ง์๋ค. | 2023-12-25 | 2024-01-23 | ๊ณต์ |
4 | ๋์ํ๋ ๋๊นจ๋น | ๋์ ๋ฌด์์ | 2023-12-01 | 2024-01-01 | ๊ณต์ |
5 | ์์ ๊ณ ์์ด | ๋๋ ์์๋ค | 2024-02-01 | 2024-01-15 | ๊น๊ณ ์ |
6 | ์์ ๊ณ ์์ด | ๋๋ ์์๋ค | 2024-02-01 | 2024-01-15 | ๊น๊ณ ์ |
๊ฒ์๊ธ์ ์์ฑํ๋๋ฐ ์์ฌ๋ผ๊ฐ์ค์๊ณ ๋ค์ ์ฌ๋ฆฌ๋ฉด ํ๋จ 2๊ฐ์ ๋ฐ์ดํฐ์ฒ๋ผ ๋์ผ ๋ด์ฉ์ด 2๋ฒ ์ฌ๋ผ๊ฐ๊ฒ ๋๋ค.
๊ฐ ๊ฒ์๊ธ์ ์ ๋ํฌํ๊ฒ ๊ด๋ฆฌํด์ผํ๊ธฐ์ ๊ฒ์๊ธ๋ง๋ค ๋ฒํธ๋ฅผ ๋ถ์ฌํด์ฃผ๋๋ฐ
์ด๊ฒ์ด ๋ฐ๋ก Primary Key, PK(๊ธฐ๋ณธํค)์ด๋ค.
์ฆ, ํ ์ด๋ธ์ ๊ฐ Row๋ฅผ ์ ๋ํฌ(=์ ์ผ)ํ๊ฒ ๊ตฌ๋ณํ ์ ์๋ key๊ฐ์ด PK์ด๋ค.
์ด๋ฒ์ ์์ฑ์๋ฅผ ์ดํด๋ณด์.
์ด๋ฆ์ด ๋์ผํ๋ค๊ณ ๊ฐ์ ์ฌ๋์ด๋ผ ๋ณด์ฅํ ์ ์์๊น? ๋๋ช ์ด์ธ์ผ์๋ ์์ํ ๋ฐ
์ง์ ์ ์ถ๊ฐํด๋ ์ฐ์ฐํ ์ง์ ์ด ๊ฐ์ ๋๋ช ์ด์ธ์ผ ์ ์๋ค.
์๋ ์์ผ๊น์ง ์ถ๊ฐํด๋ณด๋ฉด ์ผ์ถ ๊ตฌ๋ถ์ด ๊ฐ๋ฅํ ์ง๋??
๊ฒ์๊ธ ๋ฒํธ | ์ ๋ชฉ | ๋ด์ฉ | ์์ฑ์ผ์ | ์์ ์ผ์ | ์์ฑ์ | ์ง์ | ์๋ ์์ผ |
1 | ๋๋ ๋๊นจ๋น | ์๋ ํ์ธ์ | 2024-01-01 | 2024-01-16 | ๊ณต์ | ๋ฐฐ์ฐ | 800101 |
2 | ๋๋ ์ ์น์ฌ์ | ์ ๋ ์ ์น์ฌ์์ ๋๋ค | 2024-01-18 | 2024-01-20 | ์ด๋์ฑ | ์ ํ๋ฒ | 820105 |
3 | ๋๋ ์นด๋ํ๋ ๋๊นจ๋น | ์นด๋ ๋ง์๋ค. | 2023-12-25 | 2024-01-23 | ๊ณต์ | ๋ฐฐ์ฐ | 800101 |
4 | ๋์ํ๋ ๋๊นจ๋น | ๋์ ๋ฌด์์ | 2023-12-01 | 2024-01-01 | ๊ณต์ | ๋ฐฐ์ฐ | 830501 |
5 | ์์ ๊ณ ์์ด | ๋๋ ์์๋ค | 2024-02-01 | 2024-01-15 | ๊น๊ณ ์ | ๋ฐฐ์ฐ | 850101 |
6 | ์์ ๊ณ ์์ด | ๋๋ ์์๋ค | 2024-02-01 | 2024-01-15 | ๊น๊ณ ์ | ๋ฐฐ์ฐ | 850101 |
์ด๋ ๊ฒ ์ค๋ณต๋๋ ๋ฐ์ดํฐ๋ค์ ์๋น์ค๋ฅผ ์ด์ํ๋๋ฐ ํฌ๋ฆฌํฐ์ปฌํ ์ ์๋ค.
๋ง์ฝ ๊ณต์ ์ ์๋ ์์ผ์ ๋ฐ๊ฟ์ผํ๋๋ฐ ๊ฒ์๊ธ 100๊ฐ๋ฅผ ์ผ๋ค๋ฉด .. 100๊ฐ๋ฅผ ์ ๋ถ ๋ฐ๊ฟ์ค์ผํ ๊ฒ์ด๋ค
์ด๋ด ๋ ๋น์ ๋ณด๋๊ฒ RDBMS์ด๋ค.
ํ ์ด๋ธ์ ์ชผ๊ฐ์ ํ ์ด๋ธ ๊ด์ ๊ด๊ณ๋ฅผ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ํ ์ด๋ธ์ ์ชผ๊ฐ ๋ค๋ ๊ฒ์ ์ค๋ณต์ด ์๋๊ฒ ๋ง๋๋ ๊ฒ์ผ๋ก ์ ๊ทํ๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
๐ญ ํ ์ด๋ธ ๋ถ๋ฆฌ
๊ทธ๋ผ ์ด์ ํ ์ด๋ธ์ ๋ถ๋ฆฌํด๋ณด์.
๊ฒ์๊ธ๊ณผ ์ฌ์ฉ์๋ฅผ ๋ถ๋ฆฌํด๋ณผ ์ ์์ ๊ฒ ๊ฐ๋ค.
> ๊ฒ์๊ธ
๊ฒ์๊ธ ๋ฒํธ(PK) | ์ ๋ชฉ | ๋ด์ฉ | ์์ฑ์ผ์ | ์์ ์ผ์ | ์์ฑ์ (FK) |
1 | ๋๋ ๋๊นจ๋น | ์๋ ํ์ธ์ | 2024-01-01 | 2024-01-16 | 1 |
2 | ๋๋ ์ ์น์ฌ์ | ์ ๋ ์ ์น์ฌ์์ ๋๋ค | 2024-01-18 | 2024-01-20 | 2 |
3 | ๋๋ ์นด๋ํ๋ ๋๊นจ๋น | ์นด๋ ๋ง์๋ค. | 2023-12-25 | 2024-01-23 | 1 |
4 | ๋์ํ๋ ๋๊นจ๋น | ๋์ ๋ฌด์์ | 2023-12-01 | 2024-01-01 | 3 |
5 | ์์ ๊ณ ์์ด | ๋๋ ์์๋ค | 2024-02-01 | 2024-01-15 | 4 |
6 | ์์ ๊ณ ์์ด | ๋๋ ์์๋ค | 2024-02-01 | 2024-01-15 | 4 |
> ์ฌ์ฉ์
์ฌ์ฉ์ ๋ฒํธ (PK) | ์์ฑ์ | ์ง์ | ์๋ ์์ผ |
1 | ๊ณต์ | ๋ฐฐ์ฐ | 800101 |
2 | ์ด๋์ฑ | ์ ํ๋ฒ | 820105 |
4 | ๊ณต์ | ๋ฐฐ์ฐ | 830501 |
5 | ๊น๊ณ ์ | ๋ฐฐ์ฐ | 850101 |
์ฌ์ฉ์ ํ ์ด๋ธ์๋ ๊ฐ Row๋ค์ ๊ตฌ๋ณํ ์ ์๋๋ก ์ฌ์ฉ์ ๋ฒํธ๋ฅผ PK๋ก ๋ง๋ค์๋ค.
์ดํ ๊ฒ์๊ธ ํ ์ด๋ธ์์ ์ฌ์ฉ์ ๋ฒํธ๋ฅผ FK๋ก ์ฌ์ฉํด ์ด๋ค ์ฌ์ฉ์์ธ์ง ์ฐพ์ ์ ์๋๋ก ๊ด๊ณ๋ฅผ ๋งบ์ด ์ฃผ์๋ค.
์ฌ๊ธฐ์ FK๋ Foreign Key(์ธ๋ํค)๋ก
Aํ ์ด๋ธ์์ Bํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์๊ฐ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ key๊ฐ์ด๋ค.
์ต๋ํ Bํ ์ด๋ธ์ PK๊ฐ์ Aํ ์ด๋ธ์ FK๋ก ์ฐ๋ ๊ฒ์ด ์ด์์ ์ด๋ค.
์ด๊ฒ ์ค๋ณต์ด๋ฉด ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ธฐ ์ด๋ ค์์ง๊ธฐ์ PK๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๊ณ
PK๊ฐ ์๋๋๋ผ๋ PK๊ฐ ๋ ์ ์๋, ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ถํ ์ ์๋ ๊ฐ์ผ๋ก ์ ์ ํด์ผํ๋ค.
๋ ํ ์ด๋ธ์ด ์ฐ๊ด๊ด๊ณ๊ฐ ์๊ธฐ์ ๋ค๋ฅธ ํ ์ด๋ธ์ ๊ฐ์ ์ ๋ณด ์ป๋๊ฒ ๊ฐ๋ฅํ๋ค.
์๋ฅผ ๋ค์ด, ๊ฒ์๊ธ 3๋ฒ์ ์ด ์ฌ๋์ ์๋ ์์ผ์ ์ฐพ๊ณ ์ถ๋ค๋ฉด
๊ฒ์๊ธ 3๋ฒ์ ์ฌ์ฉ์ ๋ฒํธ 1๋ฒ ๐๐ป ์ฌ์ฉ์ ๋ฒํธ 1๋ฒ์ ์๋ ์์ผ = 800101
์ด๋ ๊ฒ ํ ์ด๋ธ์ ๋ถ๋ฆฌ์์ผ ์ฃผ๋ฉด ์ค๋ณต์ด ์ต์ํ๋๋ค๋ ์ฅ์ ์ด ์์ง๋ง
์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๊ณผ์ ์ด ๋์ด๋๋ค๋ ๋จ์ ๋ ์กด์ฌํ๋ค.
๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ด๊ด๊ณ
RDBMS์์ ํ ์ด๋ธ ๊ฐ ์ด๋ค ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์๋์ง๋ฅผ ์ฐ๊ด๊ด๊ณ๋ผ๊ณ ํ๋ฉฐ 1:1, 1:N, M:N ๊ด๊ณ๊ฐ ์๋ค
์์์ ๋ง๋ค์ด๋ดค๋ ๊ฒ์๊ธ, ์ฌ์ฉ์ ํ ์ด๋ธ๋ก ์ดํด๋ณด์.
- ์ฌ์ฉ์ 1๋ช ๋น ๊ฒ์๊ธ ์ฌ๋ฌ ๊ฐ๋ฅผ ์์ฑ ๊ฐ๋ฅ ๐๐ป 1:N
- ๊ฒ์๊ธ 1๊ฐ ๋น ์ฌ์ฉ์ 1๋ช ๐๐ป 1:1
์ด๊ฒ๋ง ์๊ฐํ๋ฉด ๋ ์ค ๋ญ๊ฐ ๋ง๋์ง ํท๊ฐ๋ฆด ์ ์๋ค.
- ๊ฒ์๊ธ ํ ์ด๋ธ์ ๋ณด๊ณ ์ฌ์ฉ์ ๋ฐ์ดํฐ ํ์ธ ๊ฐ๋ฅ
- ์ฌ์ฉ์ ํ ์ด๋ธ์ ๋ณด๊ณ ๊ฒ์๊ธ ๋ฐ์ดํฐ ํ์ธ X
ํ ์ด๋ธ ๋ถ๋ฆฌ ๊ด์ ์์ ๋ณด๋ฉด ๊ฒ์๊ธ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ๊ด๊ณ๊ฐ ํ์ฑ๋ ๊ฑธ ํ์ ํ ์ ์๋ค.
๊ฒ์๊ธ 1๊ฐ ๋น ์ฌ์ฉ์ 1๋ช ์ธ ๊ฒ์ ๋ง์ง๋ง ์ฌ์ฉ์ 1๋ช ๋น ๊ฒ์๊ธ 1๊ฐ๋ ์๋๊ธฐ์ ๋ ํ ์ด๋ธ์ 1:N ๊ด๊ณ๋ผ ์ ์ํ ์ ์๋ค.
์ฒ์์ ๋ง์ด ํท๊ฐ๋ฆฌ์ง๋ง ๊ณ์ ์ฐพ์๋ณด๋ ์ฐ์ต์ ํ๋ค๋ณด๋ฉด ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์์ ๊ฒ์ด๋ค..!
๐ mariaDB
๋์ปค๋,
์์ฉํ๋ก๊ทธ๋จ๋ค์ ๊ฒฉ๋ฆฌํ๋ ๊ธฐ์ ๋ก ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ ๊ด๋ฆฌํ๋ ์คํ ์์ค
๋์ปค ์ปจํ ์ด๋๋ ์ผ์ข ์ ์ํํธ์จ์ด๋ฅผ ์ํํธ์จ์ด์ ์คํ์ ํ์ํ ๋ชจ๋ ๊ฒ์ ํฌํจํ๋ ์์ ํ ํ์ผ ์์คํ ์์ ๊ฐ์ผ๋ค.
Docker๋ฅผ ์ฌ์ฉํด mariaDB ์ค์น
- docker pull mariadb
- docker run -name mariadb -d -p 3360:3306 -restart=always -e MYSQL_ROOT_PASSWORD=root mariadb
docker ๋ฐ์คํฌํ ์คํ ํ ํฐ๋ฏธ๋ ์คํ
mariaDB๊ฐ ์๋ ์ปจํ ์ด๋ ์ ์ : docker exec -it mariadb /bin/bash
mariaDB ์คํ : mariadb -u root -p ๐๐ป password : root
์ด ๋ฐฉ๋ฒ์ CLI๋ก ์์ฒญํ๋ maria DB ๋ชจ๋ํฐ์ด๋ค.
GUI๋ก ํ๋ ค๋ฉด MySQL workbench๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
'๐๏ธ DevCourse > Backend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] Week 6 ์ ํจ์ฑ ๊ฒ์ฌ์ JWT (0) | 2025.03.01 |
---|---|
[TIL] Week 6 ๋ฐ์ดํฐ๋ฒ ์ด์ค CLI (0) | 2025.02.25 |
[TIL] Week 5 ๋ฐฑ์๋ ๊ธฐ์ด ๋ง๋ฌด๋ฆฌ (Router, Rename, API ์ค๊ณ ์์ ) (0) | 2025.02.21 |
[TIL] Week 5 ๋น ๊ฐ์ฒด ํ์ธ & ๋ก๊ทธ์ธ, ์ฑ๋ API (0) | 2025.02.20 |
[๊ณผ์ ] Express ๊ตฌ์กฐ (1) | 2025.02.14 |