๐What You Will Learn
โ๏ธ RDBMS๋?
โ๏ธ TABLE์ด๋? Column๊ณผ Row ๊ทธ๋ฆฌ๊ณ Primary Key๋?
โ๏ธ ํ
์ด๋ธ์ ๊ด๊ณ , One to One, One to Many, Many to Many๋ ๋ฌด์์ธ๊ฐ?
โ๏ธ ์ ๊ด๊ณํ ํ
์ด๋ธ์ ์ฐ๋๊ฐ?
โ๏ธ ํธ๋์ญ์
์ด๋? ACID๋ ๋ฌด์์ธ๊ฐ?
โ๏ธ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐจ์ด๋?
โ๏ธ ERD๊ตฌ์ฑ๋๋ก ๋ชจ๋ธ๋งํ๊ธฐ
Database
- ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์์คํ
- ์ผ๋ฐ์ ์ผ๋ก ํฌ๊ฒ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDBMS)์ "NoSQL"๋ก ๋ช
์นญ๋๋ ๋น๊ด๊ณํ(Non-relational) database๊ฐ ์๋ค.
Database๋ฅผ ์ฌ์ฉํ๋ ์ด์ ?
-
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฐ์ฐ, ๋ณด์กดํ๊ธฐ ์ํด์
-
Database์ ๋ฐ๋๋๋ ๊ฐ๋
=> ๋ฉ๋ชจ๋ฆฌ
๋ฉ๋ชจ๋ฆฌ๋ ํ๋ฐ์ฑ. ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ ์ปดํจํฐ๋ฅผ ๋๋ฉด ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ๋ ์๊ฐ๋ค.
์ฅ์ : ์๋๊ฐ ๋น ๋ฅด๋ค.
Database์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ๊ณ , ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ฌ๋ค์ฌ ๊ฐ๊ณต์ฒ๋ฆฌํ๋ค.
ํ์ผ๋ก ์ ์ฅํ์ง ์๊ณ Database์ ์ ์ฅํ๋ ์ด์ ?
- ๋ฐ์ดํฐ์ ์ ๊ทผ, ๊ด๋ฆฌ๊ฐ ํธ๋ฆฌํ๊ธฐ ๋๋ฌธ
- Database๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ํธ์ง, ๊ฐ๊ณต ๋ฐ ๋ณด์กด์ ํธ๋ฆฌํ๊ฒ ํด์ฃผ๋ ์์คํ
Database ์ข
๋ฅ
- ์ผ๋ฐ์ ์ผ๋ก RDBMS(๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค)์ NOSQL๋ก ๋ช
์นญ๋๋ ๋น๊ด๊ณํ Database๊ฐ ์๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
(RDBMS, Relational DataBase Management System)
- ๋ชจ๋ ๋ฐ์ดํฐ๋ ์ํธ์ฐ๊ด์ฑ์ด ์๋ค๋ ๊ฒ์ ๊ธฐ๋ณธ ๊ฐ๋
์ผ๋ก ๋ ์์คํ
- ๋ชจ๋ ๋ฐ์ดํฐ๋ ํ
์ด๋ธ๋ก ๊ตฌ์ฑ
- ๊ฐ๊ฐ์ ํ
์ด๋ธ์ ์ปฌ๋ผ๊ณผ ๋ก์ฐ๋ก ๊ตฌ์ฑ
- ์ปฌ๋ผ์ ํ
์ด๋ธ์ ๊ฐ ํญ๋ชฉ์ ๋ํ๋ธ๋ค / ํ์ผ๋ก ์๊ฐ
- ๋ก์ฐ๋ ๊ฐ ํญ๋ชฉ๋ค์ ์ค์ ๊ฐ์ ๋ํ๋ธ๋ค / ์ด๋ก ์๊ฐ
- ๊ฐ ๋ก์ฐ๋ ๊ณ ์ ํค(primary key)๊ฐ ์กด์ฌ / ์ฃผ๋ก ์ด primary key๋ก ํด๋น ๋ก์ฐ๋ฅผ ์ฐพ๊ฑฐ๋ ์ธ์ฉ(reference)ํ๋ค.
ํ
์ด๋ธ๋ผ๋ฆฌ์ ์ฐ๊ฒฐ (3๊ฐ์ง)
One To One (1 ๋ 1)
ํ
์ด๋ธ A์ ๋ก์ฐ์ ํ
์ด๋ธ B์ ๋ก์ฐ๊ฐ ์ ํํ ์ผ๋์ผ ๋งค์นญ์ด ๋๋ ๊ด๊ณ
user ํ
์ด๋ธ์ ๊ธฐ๋ก๋ ํ๋์ user๋ user_profiles ํ๋์ user ๋ถ์ ์ ๋ณด๋ฅผ ์ฐธ์กฐํ๋ค.
One To Many (1 ๋ ๋ค)
ํ๋์ ์ ๋ณด์ ์ฌ๋ฌ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์ฐ๊ฒฐ ๊ด๊ณ์ธ ๊ฒ์ ์๋ฏธ / ํ๋์ ์ฃผ์ฒด๊ฐ ์ฌ๋ฌ ๊ฐ์ ์ํ ๊ฐ์ ๊ฐ์ง ์ ์๋ ๊ฒ์ ์๋ฏธ
- ๊ณ ๊ฐ์ด ์ฌ๋ฌ๋ฒ์ ์ฃผ๋ฌธ์ ํ ์ ์์ง๋ง ๊ทธ ์ฃผ๋ฌธ์ ํด๋น๋๋ user๋ ํด๋น ์ฃผ๋ฌธ์ ํ ๊ณ ๊ฐ ํ ๋ช
์ด๋ค
ํ๋์ ์นดํ
๊ณ ๋ฆฌ์ ์ฌ๋ฌ ์ ํ์ด ๋ค์ด๊ฐ ์๋ ๊ฒ
Many To Many (๋ค ๋ ๋ค)
- ํ๋์ ์ฑ
์ ์ฌ๋ฌ ๋ช
์ ์ ์๊ฐ ์กด์ฌํ ์ ์๋ค. ์ด๋, ์ฑ
์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ถํ
์ด๋ธ๊ณผ ์ ์์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ค๋์ค ํ
์ด๋ธ์ ๊ฐ๊ฐ ์ฐธ์กฐํด์ ์ค๊ฐ ํ
์ด๋ธ์ธ ์ค๋๋ถ์ค ํ
์ด๋ธ์ ๊ธฐ๋ก๋๋ค.
์ค๋๋ถ์ค ํ
์ด๋ธ์ ์ค๋ ์์ด๋์ ๋ถ์์ด๋๋ฅผ ๊ฐ๊ฐ ์ฐธ์กฐํด์จ๋ค.
ํ
์ด๋ธ๋ค์ ์ ์ฐ๊ฒฐํ ๊น?
-
์ ์ ๋ณด๋ฅผ ์ฌ๋ฌ ํ
์ด๋ธ์ ๋๋ ์ ์ ์ฅํ ๊น?
-
ํ๋์ ํ
์ด๋ธ์ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ฉด ๋์ผํ ์ ๋ณด๋ค์ด ๋ถํ์ํ๊ฒ ์ค๋ณต๋์ด ์ ์ฅ๋๋ค.
-
๋ ๋ง์ ๋์คํฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ชป๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
-
์ฌ๋ฌ ํ
์ด๋ธ์ ๋๋ ์ ์ ์ฅํ ํ, ํ์ํ ํ
์ด๋ธ๋ผ๋ฆฌ ์ฐ๊ฒฐ์ํค๋ฉด ์ค๋ณต๋๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ๋์คํฌ๋ฅผ ๋์ฑ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ์๋ก ๊ฐ์ ๋ฐ์ดํฐ์ง๋ง ๋ถ๋ถ์ ์ผ๋ก ํ๋ฆฐ ๋ฐ์ดํฐ๊ฐ ์๊ธฐ๋ ๋ฌธ์ ๊ฐ ์์ด์ง๋ค. => ์ด๊ฒ์ ์ ๊ทํ nomailization์ด๋ผ๊ณ ํ๋ค.
ํธ๋์ญ์
- ์ง์๋ฅผ ํ๋๋ก ๋ฌถ์ ์ฒ๋ฆฌ ํด์ ์ค๊ฐ์ ์คํ์ด ์ค๋จ๋์ ๊ฒฝ์ฐ, ์ฒ์๋ถํฐ ๋ค์ ์คํํ๋ rollback์ ์ํ
- ์ค๋ฅ ์์ด ๋ง์น๋ฉด commit์ ํ๋ ์คํ ๋จ์
- ํ๋ฒ์ ์ง์๋ฅผ ์คํํ๋ฉด ์ง์๊ฐ ๋ชจ๋ ์ํ ๋๊ฑฐ๋ ๋ชจ๋ ์ํ ๋์ง ์๋ ์์
์ํ์ ๋
ผ๋ฆฌ์ ๋จ์
- DBMS(DataBase Management System)์ ์ฑ๋ฅ์ ์ด๋น ํธ๋์ญ์
์คํ ์๋ก ์ธก์ =>TPS
Database ํน์ฑ
์์์ฑ, ์ผ๊ด์ฑ, ๊ณ ๋ฆฝ์ฑ, ์ง์์ฑ
์์์ฑ(Atomicity)
ํธ๋์ญ์
๊ณผ ๊ด๋ จ๋ ์์
๋ค์ด ๋ถ๋ถ์ ์ผ๋ก ์คํ๋๋ค๊ฐ ์ค๋จ๋์ง ์๋ ๊ฒ์ ๋ณด์ฅํ๋ ๊ฒ. All Or Nothing์ ๊ฐ๋
. ์์
๋จ์๋ฅผ ์ผ๋ถ๋ถ๋ง ์คํํ์ง ์๋ ๋ค๋ ๊ฒ์ ์๋ฏธ
์ผ๊ด์ฑ(Consistency)
ํธ๋์ญ์
์ด ์คํ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ๋ฉด ์ธ์ ๋ ์ผ๊ด์ฑ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๋ก ์ ์งํ๋ ๊ฒ์ ์๋ฏธ. ๋ฐ์ดํฐ์ ํ์
, ์ํ๊ฐ ์ค๊ฐ ๊ณผ์ ์์ ๋ณ์ง๋์ง ์๋ ๊ฒ.
๊ณ ๋ฆฝ์ฑ(Isolation)
ํธ๋์ญ์
์ ์ํ ์ ๋ค๋ฅธ ํธ๋์ญ์
์ ์ฐ์ฐ ์์
์ด ๋ผ์ด๋ค์ง ๋ชปํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ ์๋ฏธ.
์ง์์ฑ(Durability)
์ฑ๊ณต์ ์ผ๋ก ์ํ๋ ํธ๋์ญ์
์ ์์ํ ๋ฐ์๋์ด์ผ ํจ์ ์๋ฏธ. ์์คํ
๋ฌธ์ , DB ์ผ๊ด์ฑ ์ฒดํฌ ๋ฑ์ ํ๋๋ผ๋ ์ ์ง๋์ด์ผ ํจ์ ์๋ฏธํ๋ค.
NOSQL
- ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋น๊ด๊ณํ ํ์
์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค๋ฅด๊ฒ ์คํค๋ง(๊ด๊ณ ์ค์ ์ ๋ฐ๋ฅธ ํ
์ด๋ธ ๋ชจ๋ธ๋ง์ด ์๊ธฐ ๋๋ฌธ์)์ ์ฅํ๊ธฐ ์ ์ ์ ์ (์ ํํ) ํ ํ์๊ฐ ์๋ค.
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐ์ดํฐ๋ค์ ์ ์ฅํ๊ธฐ ์ ์ ์ด๋์ ์ด๋ป๊ฒ ์ ์ฅํ ๊ฒ์ธ์ง๋ฅผ ์ ์ ํด์ผํ๋ค.
์ฆ ํ
์ด๋ธ์ ์ ์ํด์ผํจ (ํ
์ด๋ธ ์ด๋ฆ, ํ
์ด๋ธ๊ณผ ๋ค๋ฅธ ํ
์ด๋ธ์ ๊ด๊ณ, ๊ฐ ์ปฌ๋ผ์ ํ์
๋ฑ๋ฑ)
- ์ฃผ๋ก ๋น ๋ฅธ ์ ์ฅ์ด ํ์ํ๊ณ ์ ํํํ ์๊ฐ์ด ๋ถ์กฑํ ๋ ์ผ๋จ ์ ์ฅ์ ํ ๋ ์ฌ์ฉ.
- MongoDB, Redis, Cassandra ๋ฑ์ด ๊ฐ์ฅ ๋ํ์ ์ธ NoSQL ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ด๋ค.
SQL(RDBMS) VS NoSQL
SQL
์ฅ์ :
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ์ฒด๊ณ์ ์ผ๋ก ์ ์ฅํ ์ ์๊ณ ๊ด๋ฆฌ ํ ์ ์๋ค.
- ๋ฏธ๋ฆฌ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ค์ ๊ตฌ์กฐ(ํ
์ด๋ธ ์คํค๋ง)๋ฅผ ์ ์ ํจ์ผ๋ก ๋ฐ์ดํฐ์ ์์ ์ฑ์ด ๋ณด์ฅ๋๋ค.
- ํธ๋์ญ์
(transaction)์ ํตํด ์์ ์ ์ธ ์์
์ ํ ์ ์๋ค.
๋จ์ :
- ํ
์ด๋ธ์ ๋ฏธ๋ฆฌ ์ ์ํด์ผ ํจ์ผ๋ก ํ
์ด๋ธ ๊ตฌ์กฐ ๋ณํ ๋ฑ์ ๋ ์ ์ฐํ๋ค.
- ํ์ฅ์ฑ์ด ์ฝ์ง ์๋ค.
- ์ญ์ ํ
์ด๋ธ ๊ตฌ์กฐ๊ฐ ๋ฏธ๋ฆฌ ์ ์ ๋์ด ์๋ค๋ณด๋ ๋จ์ํ ์๋ฒ๋ฅผ ๋๋ฆฌ๋๊ฒ ๋ง์ผ๋ก ํ์ฅํ๊ธฐ๊ฐ ์ฝ์ง ์๊ณ - ์๋ฒ์ ์ฑ๋ฅ ์์ฒด๋ ๋์ฌ์ผ ํ๋ค.
- ์๋ฒ๋ฅผ ๋๋ ค์ ๋ถ์ฐ ์ ์ฅ ํ๋๊ฒ๋ ์ฝ์ง ์๋ค.
- Scale up (์๋ฒ์ ์ฑ๋ฅ์ ๋์ด๋๊ฒ)์ผ๋ก ํ์ฅ์ฑ์ด ๋จ.
- ์ ํํ๋ ๋ฐ์ดํฐ๋ค ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ์ ์์ ์ฑ์ด ์ค์ํ ๋ฐ์ดํฐ๋ค์ ์ ์ฅํ๋๋ฐ ์ ๋ฆฌํ๋ค.
์) ์ ์์๊ฑฐ๋ ์ ๋ณด. ์ํ ๊ณ์ข ์ ๋ณด, ๊ฑฐ๋ ์ ๋ณด ๋ฑ๋ฑ.
NoSQL
์ฅ์ :
- ํ
์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ํ์ง ์์๋ ๋จ์ผ๋ก ์ ์ฅํ๋ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ ๋ณํ์ ์ ์ฐํ๋ค.
- ํ์ฅํ๊ธฐ๊ฐ ๋น๊ต์ ์ฝ๋ค. ๊ทธ๋ฅ ์๋ฒ ์๋ฅผ ๋๋ฆฌ๋ฉด ๋จ(scale out)
- ํ์ฅํ๊ธฐ๊ฐ ์ฝ๊ณ ํ
์ดํฐ์ ๊ตฌ์กฐ๋ ์ ์ฐํ๋ค ๋ณด๋ ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ ์ ๋ฆฌํ๋ค.
๋จ์ :
- ๋ฐ์ดํฐ์ ์์ ์ฑ์ด ๋ ๋ณด์ฅ๋๋ค.
- ํธ๋์ญ์
์ด ์๋๊ฑฐ๋ ๋น๊ต์ ๋ถ์์ ํ๋ค.
- ์ฃผ๋ก ๋น์ ํํ ๋ฐ์ดํฐ ๊ทธ๋ฆฌ๊ณ ์์ ์ฑ์ด ์๋์ ์ผ๋ก ๋ ์ ๋ฆฌํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ ์ ๋ฆฌํ๋ค.
์)๋ก๊ทธ๋ฐ์ดํฐ