[WECODE] ๐Database
What is Database?
A database generally refers to a structured collection of structured information or data stored electronically in a computer system.
The database is usually controlled by a database management system (DBMS). Data and DBMS are referred to as 'database systems' along with related applications, and are also collectively referred to as 'databases' for short.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ผ๊ณ ํ๋ฉด ๋ ์ค๋ฅด๋ ๊ฑด? ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์ฅ์น!->ํ๋ฆฐ๋ง์ด ์๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ปดํจํฐ ์์คํ ์ ์ ์ฅ๋ ์ ๋ณด or ๋ฐ์ดํฐ์ ์งํฉ์ ์๋ฏธํ๋ค
Application์์๋ ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์์ ์กด์ฌ ํ๋๋ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ ๋ณด์กด์ด ๋์ง ์์ application์ข ๋ฃ ํ ๋ค์ ์ฝ์ด๋ค์ด์ง ๋ชปํ๋ค.-> ๋ฐ์ดํฐ๋ฅผ ์ค๋ ๊ธฐ๊ฐ ์ ์ฅ,๋ณด์กด ๊ทธ๋ฆฌ๊ณ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ ํ๊ธฐ
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ข ๋ฅ
ํฌ๊ฒ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDBMS)์ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(NoSQL)๊ฐ์๋ค
1.๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค (RDBMS)
RDBMS์ด๋ Relational Database Management System์ ์ฝ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ํธ๊ด๋ จ์ฑ ์๊ฒ ํํํ date๋ฅผ ์๋ฏธํ๋ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๊ธฐ์ด๋ฅผ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
์ ์๋ฏธํ๋ค.
๋ํ์ ์ผ๋ก MySQL, Postgres, Oracle DB๋ฑ..
- ๋ชจ๋ ๋ฐ์ดํฐ๋ค์ 2์ฐจ์์ ํ
์ด๋ธ๋ค๋ก ํํ ํ ์ ์๋ค.
- ๊ฐ๊ฐ์ ํ
์ด๋ธ๋ค์ column(๊ฐ ํญ๋ชฉ),row(ํญ๋ชฉ๋ค์ ์ค์ ๊ฐ)์ ๋งํ๋ค.
->column์ field,attribute/ row๋ tuple,record๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค. - ๊ฐ row๋ ์ ๋ง๋ค ๊ณ ์ ํค(Primaty Key)๊ฐ ์กด์ฌํ๋ค. ๊ณ ์ ํค๋ฅผ ํตํด ํด๋น row๋ฅผ ์ฐพ๊ฑฐ๋ ์ธ์ฉ ํ ์ ์๋ค
1-1.๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์์ฑ
- ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ ์์ฑ๊ณผ ์ด์ฉ์ด ๋น๊ต์ ์ฝ๊ณ ํ์ฅ์ด ์ฉ์ดํ๋ค. ์ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ ํ ๊ด๋ จ๋๋ ์์ฉ ํ๋ก๊ทธ๋จ๋ค์ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ์๋ก์ด ๋ฐ์ดํฐ ํญ๋ชฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ถ๊ฐํ ์ ์๋ค
- ํ๋์ ํ ์ด๋ธ์ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ค ๋ฃ์ผ๋ฉด, ๋์ผํ ์ ๋ณด๋ค์ด ๋ถํ์ํ๊ฒ ์ค๋ณต ์ ์ฅ๋๋ค. ๋ ๊ฐ์ ๋ฐ์ดํฐ์ง๋ง ๋ถ๋ถ์ ์ผ๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ์๊ธธ ์ ์๋๋ฐ, ๊ทธ ๋ถ๋ถ์ ๋ฌด์ํ๋ฉด ๊ณต๊ฐ์ ๋ญ๋นํ๊ฒ ๋๋ ์ํฉ์ด ์๊ธด๋ค.๊ทธ๋์ ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ์๊ณ , ๋ฐ์ดํฐ ๊ฐ ๊ตฌ๋ถ์ ์ํด ํ ์ด๋ธ์ ๋ฐ๋ก ์ ์ฅํ๊ณ ์ฐ๊ฒฐํ๋ค. ์ ๊ฐ๋ ์ ์ ๊ทํ๋ผ๊ณ ํ๋ค.
1-2.์ ๊ทํ(normalization)
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค๊ณ์์ ์ค๋ณต์ ์ต์ํํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๋ ํ๋ก์ธ์ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทํ์ ๋ชฉํ๋ ๊ด๊ณ๋ฅผ ์ฌ๊ตฌ์ฑํ์ฌ ์๊ณ ์ ์กฐ์ง๋ ๊ด๊ณ๋ฅผ ์์ฑํ๋ ๊ฒ์
์ผ๋จ ๊ฐ๋จํ ์ ๋ฆฌ๋ง ํด๋ณด๋ฉด
-
1์ฐจ์ ๊ทํ : ๊ฐ row๋ง๋ค column์ ๊ฐ์ด 1๊ฐ์ฉ๋ง(์์๊ฐ,Atomic Value๋ผ๊ณ ํํ)
ex)์ฝ๋ฆฐ์ด/์๋ฐ์คํฌ๋ฆฝํธ,ํ์ด์ฌ ->row์์ ์๋ฐ์คํฌ๋ฆฝํธ,ํ์ด์ฌ์ด ๋์์ ๋ค์ด๊ฐ๋ฉด ์๋๋ค๋ ์๋ฏธ. ์ฝ๋ฆฐ์ด/์๋ฐ์คํฌ๋ฆฝํธ|์ฝ๋ฆฐ์ด/ํ์ด์ฌ ์ผ๋ก ๋ํ๋ด์ผํ๋๊ฒ -
2์ฐจ์ ๊ทํ : ๋ชจ๋ ์์ฑ์ ๊ธฐ๋ณธํค์ ์ข ์๋๋ค. ๊ธฐ๋ณธํค๊ฐ ๋ณตํฉํค๋ก ๊ตฌ์ฑ๋์ด์์๋, ๋ณตํฉํค ์ ์ฒด์ ์์กดํ์ง ์๊ณ ์ผ๋ถ์ ์์กดํ๋ row๊ฐ ์์ผ๋ฉด ์ด๋ฅผ ์ ๊ฑฐํด์ผํ๋ค.
ex)์ฌ๋๊ณณ->๊ธฐ์,์ด๋ฆ,์๊ฐ๊ณผ๋ชฉ์ด ์์ด์ผ ์๊ฒน์น๊ฒ ์์์์(์ง๊ธ์ ์ค๋ณต๋๋ '์ฌ๋๊ณณ'์ด ์์ง๋ง ์๋ค๋ฉด!!)
๋ถ์ผ->๊ธฐ์,์ด๋ฆ์ ๊ด๋ จ์ฑ์ด ๋จ์ด์ง๋ค๊ณ ํ๋จ->๊ธฐ๋ณธํค์ค '์๊ฐ๊ณผ๋ชฉ'์๋ง ์ฐ๊ด๋๋๊น 2์ฐจ์ ๊ทํ์์ ๋ฐ๋ผ ๋ผ์ฃผ๊ธฐ! -
3์ฐจ์ ๊ทํ : ๊ธฐ๋ณธํค๋ฅผ ์ ์ธํ๊ณ ์๋ก ์ข ์๋ถ๊ฐ(์์งํ ์์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค..ใ ใ )
๋งํฌํ ์คํธ(์ด๋ถ์ ๋ธ๋ก๊ทธ๊ฐ ๋๋ฌด ์ ์ค๋ช ๋์์..๐)์์ธํ ๋ด์ฉ์ ์ข๋ ๋ ๋ฒจ์ ! ํ๊ณ ๋์ ๋ณด์.....
1-3.๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ด๊ณ(1:1,1:N,N:N)
https://aquerytool.com/๋ผ๋ ์ฌ์ดํธ๋ก ์ง์ ๊ด๊ณ๋ฅผ ๊ตฌ์ถํด ๋ณผ์ ์๋ค.
์ง์ ์๋ฆฌ์กฐ๋ฆฌ ๋ง์ ธ๊ฐ๋ฉด์ ๊ฐ๋
์ ์ตํ๋ณด๋๊ฑธ ์ถ์ฒ!
1.One To One(1:1)
1 : 1 ๊ด๊ณ๋ ์ด๋ ํ
์ด๋ธ์์ ๋ณด๋๋ผ๋ ์ ํํ ์ผ๋์ผ์ ๋งค์นญ์ด ๋๋ ๊ด๊ณ๋ฅผ ์๋ฏธํ๋ค.
๋ก๊ทธ์ธ๋ฐ์ดํฐ&์ ์ ์ ํ๋กํ์ผ์ ๊ฒฝ์ฐ ์ ์ ๋ ํ๋์ ํ๋กํ์ผ ๋ฐ์ดํฐ๋ง ๊ฐ๋๋ค.
2.One To Many(1:N)
ํ๋์ ํ
์ด๋ธ์ด ์ฌ๋ฌ๊ฐ์ ํ
์ด๋ธ์ ์ฐธ์กฐํ๋ ํํ.
์์ด๋ํ๋์ ์ฌ๋ฌ๊ฐ์ง์ฃผ๋ฌธ, ํ ์นดํ
๊ณ ๋ฆฌ์ ์ฌ๋ฌ ์ ํ์ด ๋ค์ด์๋๊ฒ
๋ญ๊ฐ ์~์๊ฒ๊ฐ๊ธฐ๋ ํ๋ฐ ์์ง ๋๋ฃจ๋ญ์คํด์
์์ column์ ์์
๋ก ํ์ด๋ณด์๋ค
(์ค๋ฅธ์ชฝ ๋นจ๊ฐ ์ซ์๊ฐ ์ผ์ชฝ์ id๋ฅผ ๊ฐ์ ธ์จ๊ฒ!)
3.Many To Many(N:N)
ํ
์ด๋ธ 1์ ์ฌ๋ฌ row๊ฐ ํ
์ด๋ธ 2์ ์ฌ๋ฌ row์ ์ฐ๊ฒฐ ๋๋ ๊ด๊ณ, ํ
์ด๋ธ ๋ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ฐธ์กฐํ๋ ๋ ํ๋์ ํ
์ด๋ธ์ด ์๊ธด ์ํฉ
์ด๊ฒ๋ ํ๋ฒ ์ง์ ํ์ด๋ดค๋ค
์ด์ ๋ ์ดํดํ๊ฒ ์ด๋์ฌ
1-4.ํ ์ด๋ธ์ ์ฐ๊ฒฐ๋ฐฉ๋ฒ
- Foreign key(์ธ๋ถํค)๋ผ๋ ๊ฐ๋
์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ
users ํ ์ด๋ธ์ user_profile_id ์ปฌ๋ผ์ user_profile ํ ์ด๋ธ์ ๊ฑธ๋ ค์๋ ์ธ๋ถ ํค๋ผ๊ณ ์ง์ .์ฆ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๊ฒ user_profile_id์ ๊ฐ์ users_profile ํ ์ด๋ธ์ id ๊ฐ์ด๋ฉฐ ๊ทธ๋ฌ๋ฏ๋ก users_profile ํ ์ด๋ธ์ id ์ปฌ๋ผ์ ์กด์ฌํ๋ ๊ฐ๋ง ์์ฑ๋ ์ ์๋ค.
๋ง์ผ users ํ ์ด๋ธ์ ์๋ id ๊ฐ์ด user_id ์ ์ง์ ๋๋ฉด ์๋ฌ๊ฐ ๋ฐ์
1-5.ํธ๋์ญ์ (Transaction)&ACID
1.ACID
- Atomicity(์์์ฑ) : ํธ๋์ญ์ ๊ณผ ๊ด๋ จ๋ ์์ ๋ค์ด ๋ถ๋ถ์ ์ผ๋ก ์คํ๋๋ค๊ฐ ์ค๋จ๋์ง ์๋ ๊ฒ์ ๋ณด์ฅํ๋ ๋ฅ๋ ฅ์ผ๋ก ์ค๊ฐ ๋จ๊ณ๊น์ง ์คํ๋๊ณ ์คํจํ๋ ์ผ์ด ์๋๋ก ํ๋ ๊ฒ
- Consistency(์ผ๊ด์ฑ) : ํธ๋์ญ์ ์ด ์คํ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ๋ฉด ์ธ์ ๋ ์ผ๊ด์ฑ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๋ก ์ ์งํ๋ ๊ฒ์ ์๋ฏธ. ์ผ๊ด์ฑ์ ์๋ฐํ๋ ํธ๋์ญ์ ์ ์ค๋จ๋ฉ๋๋ค.
- Isolation(๊ณ ๋ฆฝ์ฑ) : ํธ๋์ญ์ ์ ์ํ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ฐ์ฐ ์์ ์ด ๋ผ์ด๋ค์ง ๋ชปํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ ์๋ฏธ. ์ฑ๋ฅ๊ด๋ จ ์ด์ ๋ก ์ธํด ์ด ํน์ฑ์ ๊ฐ์ฅ ์ ์ฐ์ฑ ์๋ ์ ์ฝ ์กฐ๊ฑด
- Durability(์ง์์ฑ) : ์ฑ๊ณต์ ์ผ๋ก ์ํ๋ ํธ๋์ญ์ ์ ์์ํ ๋ฐ์๋์ด์ผ ํจ์ ์๋ฏธ. ์์คํ ๋ฌธ์ , DB ์ผ๊ด์ฑ ์ฒดํฌ ๋ฑ์ ํ๋๋ผ๋ ์ ์ง๋์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
2.ํธ๋์ญ์
(Transaction)
์ผ๋ จ์ ์์
๋ค์ ํ๋ฒ์ ํ๋์ ์์
์ฒ๋ผ ์ทจ๊ธํด์ ์คํํ๋๊ฒ์ผ๋ก ์ฌ์ฉ์์ ์๋์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ ๋ฌธ์ฅ์ผ๋ก ๊ตฌ์ฑ๋ ํธ๋์ญ์
์ ๋ฐ๋์ ๋์์ ์คํ(COMMIT) ๋๊ฑฐ๋ ์ทจ์(ROLLBACK)๋๋ค. ํธ๋์ญ์
์ ํตํด ์์
์ ๋จ์๋ฅผ ๊ฒฐ์ ํจ์ผ๋ก์จ ์์
๊ฒฐ๊ณผ์ ์ ๋ขฐ์ฑ์ด ํ๋ณด๋๋ค. ACID๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ํธ๋์ญ์
๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค
๋ด๊ฐ A์๊ฒ 1000๋ง์์ ์ด์ฒดํ๋ค ๊ฐ์ ํ์. ๋ด๊ณ์ข์์ 1000๋ง์ ์ธ์ถ, A์๊ณ์ข์ 1000๋ง์ ์ ๊ธ์ด๋ผ๋ ์์ ์ ํ๋ฒ์ ๋ฌถ์ง์์ผ๋ฉด ๋ด๋์ ๋น ์ง๊ณ a๋ ๋ชป๋ฐ๋ ๋ถ์์ฌ๊ฐ ๋ฐ์ ํ ์๋ ์๋ค. ๋ฐ๋ผ์ ํ๋์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ผ๋ฉด ๋๊ฐ์ ์์ ์ด ๋ชจ๋ ์คํ๋๊ฑฐ๋ ์ทจ์๋๋๋ก ํ์ฌ ๊ฑฐ๋์ ์ ๋ขฐ๋๋ฅผ ๋์ผ ์ ์๋๊ฒ
2.๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค (NoSQL)
๋น๊ด๊ณํ ํ์
์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
์ผ๋ก ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค๋ฅด๊ฒ ๋น๊ด๊ณํ ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ค์ ์ ์ฅํ๊ธฐ ์ ์ ์ ์ ํ ํ์๊ฐ ์๋ค.
๋ํ์ ์ผ๋ก MongoDB, Redis, Cassandra ๋ฑ์ด ์๋ค.
3.RDBMS(SQL) vs NoSQL
*RDBMS(SQL)
์ฅ์
1) ํจ์จ์ ,์ฒด๊ณ์ ์ผ๋ก ์ ์ฅ&๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅ
2) ๋ฏธ๋ฆฌ ์ ์ฅ๋๋ ๋ฐ์ดํฐ๊ตฌ์กฐ(ํ
์ด๋ธ ์คํค๋ง)๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์์ ์ฑ์ด ๋ณด์ฅ๋๋ค
3) ํธ๋์ญ์
(transaction)
4)์ ํํ๋ ๋ฐ์ดํฐ,์์ ์ฑ์ด ์ค์ํ ๋ฐ์ดํฐ๋ค์ ์ ์ฅํ๋๋ฐ ์ ๋ฆฌํ๋ค.
ex)์ ์์๊ฑฐ๋ ์ ๋ณด. ์ํ ๊ณ์ข ์ ๋ณด, ๊ฑฐ๋ ์ ๋ณด ๋ฑ๋ฑ.
๋จ์
1)ํ
์ด๋ธ ๊ตฌ์กฐ ๋ณํ ๋ฑ์ ๋ ์ ์ฐ(๋ฏธ๋ฆฌ ํ
์ด๋ธ์ ์ ํด์ผํด์..)
2)ํ์ฅ์ฑ์ด ์ฝ์ง ์๋ค(ํ
์ด๋ธ์ด ๋ฏธ๋ฆฌ ์ ํด์ ธ์์ผ๋๊น, ์๋ฒ์ ์๊ฐ์๋ ์ฑ๋ฅ๋ ๋์ฌ์ผํจ.. ๊ทผ๋ฐ ๋๋ฆฌ๋๊ฒ๋ ์ฝ์ง ์์..(scale up))
*NoSQL
์ฅ์
1)ํ
์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ํ์ง ์์๋ ๋๋ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ ๋ณํ์ ์ ์ฐํ๋ค.
2)ํ์ฅํ๊ธฐ๊ฐ ๋น๊ต์ ์ฝ๋ค. ๊ทธ๋ฅ ์๋ฒ ์๋ฅผ ๋๋ฆฌ๋ฉด ๋จ(scale out)
3)ํ์ฅํ๊ธฐ๊ฐ ์ฝ๊ณ ํ
์ดํฐ์ ๊ตฌ์กฐ๋ ์ ์ฐํด ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ ์ ๋ฆฌํ๋ค.
4)์ฃผ๋ก ๋น์ ํํ ๋ฐ์ดํฐ ๊ทธ๋ฆฌ๊ณ ์์ ์ฑ์ด ์๋์ ์ผ๋ก ๋ ์ ๋ฆฌํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ ์ ๋ฆฌํ๋ค. ex) ๋ก๊ทธ ๋ฐ์ดํ
๋จ์
1)๋ฐ์ดํฐ์ ์์ ์ฑ์ด ๋ ๋ณด์ฅ๋๋ค.
2)ํธ๋์ญ์
์ด ์๋๊ฑฐ๋ ๋น๊ต์ ๋ถ์์ ํ๋ค.
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([WECODE] ๐Database), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@fhwmqkfl/WECODEDatabase์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ
์ธ ๋ฐ๊ฒฌ์ ์ ๋
(Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค