1์ฐจ ๋จ์๊ธฐ๊ฐ ๊ฐ์๋ฅผ ๋ชจ๋ ์๊ฐํ๋ค.๐๐๐๐
๐ฝ๋ฐ์ดํฐ๋ฒ ์ด์ค
๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐ์ ์ผ๋ก ์ ์ฅํ๊ณ , ํจ์จ์ ์ผ๋ก ์กฐํ, ์์ , ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ์์คํ
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ ํํ๋ ํ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฆฌํ๊ณ , ํ์ํ ์ ๋ณด๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ๊ณ ์ ์งํ ์ ์๋๋ก ๋์์ฃผ๋ ์ ๋ณด์ ๊ตฌ์กฐํ๋ ์งํฉ์ด๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ค๋ณต์ ์ค์ด๊ณ , ๋ค์ํ ์กฐ๊ฑด์ ๊ฒ์์ด ๊ฐ๋ฅํ๋ฉฐ, ์ผ๊ด์ฑ ์๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
DBMS
Database Management System, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ๊ณ ์ด์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ ์ํํธ์จ์ด
์ฌ์ฉ์๋ ์ง์ ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฑฐ๋ ์ฝ๋ ๋์ , DBMS์์ SQL์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฌ๋ค. ์ด์์ฒด์ ๋ฅผ ํตํด ํ์ผ์ ๋ค๋ฃจ๋ ๊ฒ์ฒ๋ผ, DBMS๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ถ์ํ๋ ์ ๊ทผ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๊ด๋ฆฌ์ ์ญํ ์ ํ๋ค.
์ฃผ์ ๊ธฐ๋ฅ
- SQL ์ฟผ๋ฆฌ ์ฒ๋ฆฌ(SELECT, INSERT, UPDATE, DELETE ๋ฑ)
- ์ฌ์ฉ์ ๊ถํ ๋ฐ ๋ณด์ ๊ด๋ฆฌ
- ํธ๋์ญ์ ๋ฐ ๋์์ฑ ์ ์ด
- ๋ฐฑ์ ๋ฐ ๋ณต์ ๊ธฐ๋ฅ
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ฐ ์ ์ฝ์กฐ๊ฑด ๊ด๋ฆฌ
โญ ํธ๋์ญ์
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ ผ๋ฆฌ์ ์์ ๋จ์๋ก, ์ฌ๋ฌ ์์ ์ ํ๋์ ๋ฌถ์์ผ๋ก ์ฒ๋ฆฌํ๋ค.
โญ ๋์์ฑ ์ ์ด
์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ์คํ๋ ๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๋๋ก ์กฐ์ ํ๋ ๊ธฐ๋ฒ
โญ ACID
ํธ๋์ญ์ ์ ์์ ์ฑ๊ณผ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๋ค ๊ฐ์ง ํต์ฌ ์์ฑ
- ์์์ฑ(Atomicity)
- ์ผ๊ด์ฑ(Consistency)
- ๊ฒฉ๋ฆฌ์ฑ(Isolation)
- ์ง์์ฑ(Durability)
RDBMS vs NoSQL
DBMS์ข ๋ฅ๋ ํฌ๊ฒ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ (RDBMS)์ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ (NoSQL DBMS)์ผ๋ก ๋๋ ์ ์๋ค. ๊ฐ ์ ํ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐฉ์, ์ ์ฅ ๋ฐฉ์, ์ฌ์ฉ ๋ชฉ์ ์ ๋ฐ๋ผ ์ฐจ์ด๊ฐ ์๋ค.
ํน์ง | RDBMS | NoSQL |
๋ฐ์ดํฐ ๋ชจ๋ธ | ํ ์ด๋ธ(ํ๊ณผ ์ด)์ ๊ด๊ณํ ๋ชจ๋ธ | ํค-๊ฐ, ๋ฌธ์, ๊ทธ๋ํ ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ๋ชจ๋ธ |
๋ฐ์ดํฐ ์คํค๋ง | ๊ณ ์ ๋ ์คํค๋ง ๊ตฌ์กฐ, ๋ฐ์ดํฐ ํ์์ด ์๊ฒฉํ๋ค. | ์ ์ฐํ ์คํค๋ง, ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ง์ |
์ฟผ๋ฆฌ ์ธ์ด | SQL(Structured Query Language) | SQL์ ์ฌ์ฉํ์ง ์์ (๊ฐ DBMS๋ณ๋ก ์ฟผ๋ฆฌ ์ธ์ด ๋ค๋ฆ) |
ACID ํน์ฑ | ์ง์ | ์ผ๋ถ ์ง์, ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก BASE(Basically Available, Soft state, Eventually consistent) ๋ชจ๋ธ์ ๋ฐ๋ฆ |
ํ์ฅ์ฑ | ์์ง ํ์ฅ(๊ธฐ์กด ์๋ฒ ์ฑ๋ฅ ๊ฐํ) | ์ํ ํ์ฅ(์๋ฒ ์๋ฅผ ๋๋ ค์ ํ์ฅ) |
์ผ๊ด์ฑ | ๊ฐํ ์ผ๊ด์ฑ(๊ฐ๋ ฅํ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ ์ง) | ์ฝํ ์ผ๊ด์ฑ(๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ๋์จํ๊ฒ ์ ์ง๋ ์ ์์) |
์ฑ๋ฅ | ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์. | ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ฐํ๊ณ , ๋น ๋ฅธ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฑ๋ฅ์ ์ ๊ณต |
ํธ๋์ญ์ ์ฒ๋ฆฌ | ๋ณต์กํ ํธ๋์ญ์ ์ฒ๋ฆฌ ๋ฐ ๋ณต์กํ JOIN ์ฐ์ฐ ์ง์ | ํธ๋์ญ์ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด ์ ํ์ ์ผ ์ ์์ผ๋ฉฐ, JOIN ์ฐ์ฐ์ด ์์ |
๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ | ๋์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ฐ ์ ์ฝ ์กฐ๊ฑด(๊ธฐ๋ณธํค, ์ธ๋ํค, ์ ๋ํฌ ๋ฑ) ์ง์ | ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ํ์ , ์ ์ฝ ์กฐ๊ฑด์ ๊ฐ์ ํ์ง ์์ |
์ฌ์ฉ ์ฌ๋ก | ๊ธ์ต, ํ๊ณ ์์คํ , ์ ํต์ ์ธ ๋น์ฆ๋์ค ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ | ์ค์๊ฐ ๋ฐ์ดํฐ, ์์ ๋ฏธ๋์ด, ๋๊ท๋ชจ ์น ์ ํ๋ฆฌ์ผ์ด์ , ๋ก๊ทธ ๋ถ์ ๋ฑ |
์์ |
MySQL, PostgreSQL, Oracle, SQL Server | MongoDB, Redis, Cassandra, Neo4j, CouchDB, DynamoDB ๋ฑ |
๐RDBMS๋ ๊ณ ์ ๋ ์คํค๋ง์ ๊ด๊ณํ ๋ชจ๋ธ์ ๋ฐ๋ฅด๋ฉฐ, SQL์ ์ฌ์ฉํ๊ณ ๊ฐํ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ํน์ง์ด ์๋ค. ํธ๋์ญ์ ์ฒ๋ฆฌ๊ฐ ์ค์ํ ์์คํ ์์ ์ฌ์ฉํ๋ค.
๐NoSQL์ ์ ์ฐํ ์คํค๋ง์ ๋ค์ํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ ๊ณตํ๋ฉฐ, ์ํ ํ์ฅ์ด ์ฉ์ดํ๊ณ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ต์ ํ๋์ด ์๋ค. ํ์ฅ์ฑ์ ๊ฐ์ ์ ๋ณด์ธ๋ค!
๋ํ์ ์ธ DBMS ์ข ๋ฅ
DBMS | ์ ํ | ๊ตฌ์กฐ | ํน์ง |
---|---|---|---|
Oracle | RDBMS | ํ ์ด๋ธ ๊ธฐ๋ฐ | ์์ฉ DB, ๋๊ท๋ชจ ์์คํ ์ ๊ฐํจ, ํธ๋์ญ์ ์ฒ๋ฆฌ ์ฐ์ |
MySQL | RDBMS | ํ ์ด๋ธ ๊ธฐ๋ฐ | ์คํ์์ค, ๊ฐ๋ณ๊ณ ๋น ๋ฆ, LAMP ์คํ์ ํต์ฌ |
PostgreSQL | RDBMS | ํ ์ด๋ธ ๊ธฐ๋ฐ | ์คํ์์ค, ๊ธฐ๋ฅ์ด ํ๋ถํจ(JSON ์ง์, ์๋์ฐ ํจ์ ๋ฑ) |
Microsoft SQL Server | RDMBS | ํ ์ด๋ธ ๊ธฐ๋ฐ | Microsoft ์ํ๊ณ์ ํตํฉ ์ฐ์, GUI ํด ํ๋ถ |
MariaDB | RDBMS | ํ ์ด๋ธ ๊ธฐ๋ฐ | MySQL์์ ํฌํฌ๋ ์คํ์์ค, MySQL๊ณผ ํธํ์ฑ ๋์ |
SQLite | RDBMS | ํ ์ด๋ธ ๊ธฐ๋ฐ | ์๋ฒ ๋๋ํ, ์๋ฒ ์์ด ํ์ผ ํ๋๋ก ๋์, ๋ชจ๋ฐ์ผ ์ฑ์ ๋ง์ด ์ฌ์ฉ |
MongoDB | NoSQL | ๋ฌธ์ ๊ธฐ๋ฐ | JSON ํ์(Document) ์ ์ฅ, ์ ์ฐํ ๊ตฌ์กฐ, ์คํค๋ง ์์ |
Redis | NoSQL | ํค-๊ฐ ์ ์ฅ์ | ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ, ๋น ๋ฅธ ์๋, ์บ์์ฉ์ผ๋ก ๋ง์ด ์ฌ์ฉ |
Elasticsearch | NoSQL | ์ญ์์ธ๊ธฐ๋ฐ | ๊ฒ์ ํนํ, ๋ก๊ทธ ๋ถ์,๊ฒ์ ์์ง ๊ตฌ์ถ์ ๋ง์ด ์ฌ์ฉ |
IBM DB2 | RDBMS | ํ ์ด๋ธ ๊ธฐ๋ฐ | ๊ธฐ์ ์ฉ ์์คํ ์ ์ ํฉ, IBM ํ๋ซํผ๊ณผ ์ ์ฐ๋ |
Snowflake | ํด๋ผ์ฐ๋ | ํ ์ด๋ธ ๊ธฐ๋ฐ | ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ๋ถ์ DB, ๋น ๋ฐ์ดํฐ์ BI ํด ์ฐ๋ ์ต์ ํ |
Microsoft Access | RDBMS | ํ ์ด๋ธ ๊ธฐ๋ฐ | ๋ฐ์คํฌํ ์ ์ฉ ์ํ DB, ์๊ท๋ชจ ์ฌ๋ด ์์คํ ์ฉ |
๐RDBMS
Relational DBMS, ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ ํํ๋ก ์ ์ฅํ๊ณ , ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฐฉ์์ DBMS
RDBMS๋ ๋ฐ์ดํฐ๋ฅผ ํ(row)์ ์ด(column)๋ก ๊ตฌ์ฑ๋ ํ ์ด๋ธ์ ์ ์ฅํ๋ฉฐ, ๊ฐ ํ ์ด๋ธ์ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ฉด์๋ ๋ค๋ฅธ ํ ์ด๋ธ๊ณผ ๊ด๊ณ๋ฅผ ๋งบ์ ์ ์๋ค.
๊ด๊ณ์งํฅ์ ํน์ง
RDBMS์ ๊ฐ์ฅ ํฐ ํน์ง์ ๊ด๊ณ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ค๋ ์ ์ด๋ค. ์ด ๊ตฌ์กฐ๋ ์ค์ ์ฌ๋์ด ๊ธฐ์ต์ ๋ ์ฌ๋ฆฌ๋ ๋ฐฉ์๊ณผ ๋ฎ์ ์๋ค.
์๋ฅผ ํ์ด, ๋ฐฐ์ฐ์ ์ด๋ฆ์ ์ฐพ๋ ์ํฉ์ ๊ฐ์ ํด๋ณด์
1. ์ํ๋ช ์ ๊ฒ์ํ๊ณ
2. ๋ฑ์ฅ์ธ๋ฌผ์ ํ์ธํ ๋ค,
3. ๋ฑ์ฅ์ธ๋ฌผ์ ์ฌ์ง์ ๋ณด๊ณ ,
4. ๊ทธ ๋ฐฐ์ฐ์ ์ด๋ฆ์ ์ฐพ์๋ธ๋ค.
์ํ -> ๋ฑ์ฅ์ธ๋ฌผ -> ์ด๋ฏธ์ง -> ์ด๋ฆ์ผ๋ก ์ด์ด์ง๋ ๊ด๊ณ ๊ธฐ๋ฐ ํ์์ด๋ค.
RDBMS๋ ์ด์ฒ๋ผ ํ๋์ ํค์์ ๋ค๋ฅธ ํ ์ด๋ธ๋ก ์ด์ด์ง๋ ์ฐ๊ด ํ์์ด ์์ฐ์ค๋ฝ๊ฒ ์ด๋ฃจ์ด์ง๋ ๊ตฌ์กฐ์ด๋ค!
- NoSQL์ฒ๋ผ ๋จ์ผ ์ปฌ๋ ์ /๋ฌธ์ ๊ธฐ๋ฐ DB์์๋ ์ด๋ฐ ์ฐ๊ด๋ ํ์์ด ์ด๋ ต๊ฑฐ๋, ๋ช ์์ ์ผ๋ก ์ค์ฒฉํ๊ฑฐ๋ ์ค๋ณต ์ ์ฅํด์ผ ํ๋ค.
- ๋ฐ๋ฉด, RDBMS๋ ์ด ๊ณผ์ ์ "๊ด๊ณํ ๋ชจ๋ธ"๋ก ๊ตฌํํ ์ ์๋ค.
RDBMS์ ์ฅ์
- ํ ์ด๋ธ ๊ฐ ๊ด๊ณ๋ฅผ ๋ช ์์ ์ผ๋ก ํํํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๊ด๊ณํ์ผ๋ก ๋๋๊ธฐ ๋๋ฌธ์ ์ค๋ณต์ด ์ค๊ณ ๊ตฌ์กฐ๊ฐ ๋ช ํํ๋ค.
- SQL๋ก ๋ณต์กํ ์ฟผ๋ฆฌ ์์ฑ์ด ๊ฐ๋ฅํ๋ค.(JOIN, ์ง๊ณ, ์ ๋ ฌ ๋ฑ)
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ(PK, FK ๋ฑ)์ ํตํด ์ผ๊ด์ฑ์ ์ ์งํ๋ค.
- ์ ๊ทํ๋ฅผ ํตํด ์ค๋ณต์ ์ต์ํํ๊ณ , ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ๋ค.
๐๏ธKey
Primary Key(๊ธฐ๋ณธ ํค)
ํ ์ด๋ธ์์ ๊ฐ ํ(row)๋ฅผ ์ ์ผํ๊ฒ ์๋ณํ ์ ์๋ ์ปฌ๋ผ
Primary Key๋ ์ค๋ณต๋ ์ ์๊ณ , NULL ๊ฐ์ ๊ฐ์ง ์ ์๋ค. RDBMS์์ ๋ชจ๋ ํ ์ด๋ธ์ PK๋ฅผ ๊ฐ์ ธ์ผ ํ๊ณ , ์ด ํค๋ ํด๋น ํ์ ๊ณ ์ ํ๊ฒ ์๋ณํ๋ ๊ธฐ์ค์ด ๋๋ค.
์ฌ์ฉ์ ํ
์ด๋ธ
+----------+----------+----------+
| user_id | name | password |
+----------+----------+----------+
| test01 | ํ๊ธธ๋ | 1234 |
| test02 | ๊น์ฒ ์ | 5678 |
+----------+----------+----------+
- ์ฌ๊ธฐ์
user_id
๋ Primary Key ์ญํ ์ ํ๋ค. - ๋ ์ฌ์ฉ์ ์ค ๊ฐ์ ID๋ ์์ ์ ์๋ค!
๋ฐ์ดํฐ ์ค๋ณต
๋์ผํ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ์์น์ ๋ฐ๋ณต ์ ์ฅ๋๋ ํ์์ผ๋ก, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ๊ณผ ์ ์ง๋ณด์์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ค.
์ค๋ณต๋ ๋ฐ์ดํฐ๋ ์์ ์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ฒ ์์ ํด์ผ ํ๋ฉฐ, ์ค์๋ก ๋๋ฝ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ๋ถ์ผ์น ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด RDBMS์์๋ ์ ๊ทํ๋ฅผ ์ฌ์ฉํ๋ค.
์ ๊ทํ
์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๊ณ , ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธ ์๋ ๋จ์๋ก ๋ถ๋ฆฌํ์ฌ ์ฌ๋ฌ ํ ์ด๋ธ๋ก ๋๋๋ ๊ณผ์
์ ๊ทํ๋ "๊ฐ์ ๋ฐ์ดํฐ๋ ํ ๊ณณ์๋ง ์ ์ฅํ๋ค"๋ ์์น์ ๊ธฐ๋ฐ์ผ๋ก, ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ํ
์ด๋ธ๋ก ๋ถ๋ฆฌํ๊ณ Foreign Key๋ฅผ ํตํด ์ฐ๊ฒฐํ๋ค.
์ด๋ก ์ธํด ๋ฐ์ดํฐ๋ ๋ ๊น๋ํ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํํ๋ก ๊ตฌ์กฐํ๋์ด ๋ถํ์ํ ์ค๋ณต์ด ์ ๊ฑฐ๋๊ณ , ๋ฐ์ดํฐ ์์ ์ ์ผ๊ด์ฑ ์๋ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
์ ๊ทํ ์
+---------+------------+------------+------------------+
| post_id | title | author | author_email |
+---------+------------+------------+------------------+
| 1 | ์๋
| ํ๊ธธ๋ | hong@test.com |
| 2 | ๋์๋
| ํ๊ธธ๋ | hong@test.com |
+---------+------------+------------+------------------+
์ ๊ทํ ํ
Users
+---------+------------+------------------+
| user_id | name | email |
+---------+------------+------------------+
| u1 | ํ๊ธธ๋ | hong@test.com |
+---------+------------+------------------+
Posts
+---------+------------+----------+
| post_id | title | user_id |
+---------+------------+----------+
| 1 | ์๋
| u1 |
| 2 | ๋์๋
| u1 |
+---------+------------+----------+
โ ์ฅ์
- ๋ฐ์ดํฐ ์ค๋ณต ์ ๊ฑฐ
- ์ ์ฅ ๊ณต๊ฐ ์ ์ฝ
- ๋ฌด๊ฒฐ์ฑ ์ ์ง
โ๋จ์
- ๋ณต์กํ ์ฟผ๋ฆฌ (JOIN) ๋ฐ์
- ๊ณผ๋ํ ์ ๊ทํ ์ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์(์ค์๊ฐ ์ฒ๋ฆฌ๋ ๊ณ ์ ์กฐํ์๋ ๋นํจ์จ์ )
Foreign Key(์ธ๋ํค)
๋ค๋ฅธ ํ ์ด๋ธ์ Primary Key๋ฅผ ์ฐธ์กฐํ์ฌ, ํ ์ด๋ธ ๊ฐ ๊ด๊ณ๋ฅผ ์ ์ํ๋ ํค
Foreign key๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ํ ์ด๋ธ ์ฌ์ด์ ๊ด๊ณ ํํ์ด ๊ฐ๋ฅํ๊ณ , ๋ฐ์ดํฐ ์ฐ๊ฒฐ์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ ์ ์๋ค!
Users
+---------+--------+
+- | user_id | name |
| +---------+--------+
| | test01 | ํ๊ธธ๋ |
| | test02 | ๊น์ฒ ์ |
| +---------+--------+
|
| Channels
| +-------------+------------+----------+
+--| channel_id | title | user_id |
+-------------+------------+----------+
| ch01 | ์ฌํ์ฑ๋ | test01 |
| ch02 | ๋จน๋ฐฉ์ฑ๋ | test01 |
| ch03 | ์ฝ๋ฉ์ฑ๋ | test02 |
+-------------+------------+----------+
Channels.user_id
๋User.user_id
๋ฅผ ์ฐธ์กฐํ๋ Foreign Key
์ฐ๊ด๊ด๊ณ
ํ ์ด๋ธ ๊ฐ ๋ฐ์ดํฐ๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋์ง ์ ์ํ๋ ๊ตฌ์กฐ
- 1:1 ๊ด๊ณ: ํ๋์ ๋ฐ์ดํฐ๊ฐ ํ๋์๋ง ์ฐ๊ฒฐ
- 1:N ๊ด๊ณ: ํ๋์ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ๊ฐ์ ์ฐ๊ฒฐ
- M:N ๊ด๊ณ: ์ฌ๋ฌ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ๊ฐ์ ์ฐ๊ฒฐ(์ค๊ฐ ํ ์ด๋ธ ํ์)
ํ์(User)
+----------+----------+----------+
| user_id | password | name |
+----------+----------+----------+
| testId1 | 1234 | tester1 |
| testId2 | 5678 | tester2 |
+----------+----------+----------+
์ฑ๋(Channel)
+----+--------------+----------+---------+-----------+
| id | title | user_id | sub_num | video_num |
+----+--------------+----------+---------+-----------+
| 1 | channel1 | testId1 | 1 | 3 |
| 2 | channel2 | testId1 | 29 | 34 |
| 3 | channel3 | testId2 | 1000 | 100 |
+----+--------------+----------+---------+-----------+
user_id
๋ ์ฌ์ฉ์ ํ ์ด๋ธ์ PK์ด์, ์ฑ๋ ํ ์ด๋ธ์ FK๋ก ์ฌ์ฉ๋๋ค.- 1๋ช
์ ์ ์ ๊ฐ ์ฌ๋ฌ ์ฑ๋์ ๋ง๋ค ์ ์์ผ๋ฏ๋ก,
1:N
๊ด๊ณ๋ค.
๐ฌMySQL workbench
MySQL ๋ฐ MariaDB๋ฅผ ์๊ฐ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ GUI ํด
๋น๋ก MariaDB๋ฅผ ์ฌ์ฉํ๋๋ผ๋, Workbench๋ MySQL๊ณผ์ ๋์ ํธํ์ฑ ๋๋ถ์ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ด ์ ์ ์๋ํ๋ค.
ERD(Entity-Relationship Diagram)๋ฅผ ๋ง๋ค๊ฑฐ๋ ์ฟผ๋ฆฌ๋ฅผ ํ
์คํธํ ๋ ๋งค์ฐ ์ ์ฉํ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ์ง๊ด์ ์ผ๋ก ํ์
ํ ์ ์๋๋ก ๋์์ค๋ค.
๐ ์์ฝ
- DBMS๋ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ์ํํธ์จ์ด
- RDBMS๋ ํ ์ด๋ธ ๊ธฐ๋ฐ์ผ๋ก ๊ด๊ณ๋ฅผ ํ์ฉํด ์ค๋ณต์ ์ค์ด๊ณ ๋ฌด๊ฒฐ์ฑ์ ๋์ธ๋ค
- Primary Key๋ ํ์ ์ ์ผํ๊ฒ ์๋ณ, Foreign Key๋ ํ ์ด๋ธ ๊ฐ ๊ด๊ณ๋ฅผ ์ ์
- ์ ๊ทํ๋ ์ค๋ณต ์ ๊ฑฐ์ ์ผ๊ด์ฑ ์ ์ง๋ฅผ ์ํ ํต์ฌ ๊ณผ์
- Workbench๋ MySQL ๊ณ์ด DB ์๊ฐํ ๊ด๋ฆฌ ํด
Supabase(PostgreSQL ๊ธฐ๋ฐ)๋ DynamoDB ๊ฐ์ ์๋น์ค๋ฅผ ์์ฃผ ์จ์์ง๋ง, ์ฌ์ค DBMS์ ์ข ๋ฅ๋ ๊ทธ ์ฐจ์ด์ ์ ๋ํด ๊น์ด ์๊ฐํด๋ณธ ์ ์ด ์์๋ค. ๊ทธ๋ฅ "๋ฐ์ดํฐ ์ ์ฅํ๋ฉด ๋์ง" ์ ๋๋ก๋ง ์ธ์ํ๊ณ ์์๋ ๊ฒ ๊ฐ๋ค.
์ด๋ฒ์ ์ ๋ฆฌํ๋ฉด์ RDBMS์ NoSQL ๊ฐ์ ๊ตฌ์กฐ์ ์ฐจ์ด, ๋ํ์ ์ธ DBMS๋ค์ด ์ด๋ค ํน์ง์ ๊ฐ๊ณ ์๋์ง ์กฐ๊ธ์ฉ ๊ฐ์ด ์กํ๊ธฐ ์์ํ๋ค. ํนํ ์ ๊ทํ ๊ฐ๋ ์ด๋ ๊ด๊ณํ ๊ตฌ์กฐ๊ฐ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ๊น๋ํ๊ฒ ๋ถ๋ฆฌํ๊ณ ์ฐ๊ฒฐํ๋์ง๋ฅผ ์ค์ต์ ํตํด ์ดํดํ ์ ์์ด์ ์ข์๋ค.
์ด์ ๋ ๋จ์ํ DB๋ฅผ ์ฐ๋ ๊ฒ ์๋๋ผ, ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ค๊ณ๋ถํฐ ๋ชฉ์ ์ ๋ฐ๋ผ ์ด๋ค DBMS๋ฅผ ์ ํํ ์ง๊น์ง ๋ ๋์ ๊ด์ ์์ ๊ณ ๋ฏผํ ์ ์์ ๊ฒ ๊ฐ๋ค.