[DB] ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ์ ๋ฉด์ ์๋ฃ์ ๋ฆฌ
Oracle VS MySql
- Oracle์ ์ ๋ฃ์ธ๋งํผ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๋์ฉ๋ ๋ฐ์ดํฐ์ ์ ํฉ
- MySql์ ๋ฌด๋ฃ์ด๋ฉฐ ๊ฐ์ฑ๋น๊ฐ ์ข๋ค (MariaDB์ ์ ์ฌํ์ง๋ง MariaDB๊ฐ ์ฑ๋ฅ์ ์ผ๋ก ๋ฐ์ด๋จ)
* ๊ตฌ์กฐ์ ์ฐจ์ด
- Oracle : ํตํฉ๋ ํ๋์ ์คํ ๋ฆฌ์ง๋ฅผ ๊ณต์ ํ๋ ๋ฐฉ์
- MySql : DB๋ง๋ค ๋ ๋ฆฝ์ ์ธ ์คํ ๋ฆฌ์ง ํ ๋นํ๋ ๋ฐฉ์
SQL
- DDL : ์คํค๋ง ์ ์ ๋๋ ์์ /์ญ์ ์ ์ฌ์ฉ (Create, Alter, Drop ...)
- DML : ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉ (Select, Insert, Update, Delete ...)
- DCL : ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ชฉ์ ์ผ๋ก ๋ณด์, ๋ฌด๊ฒฐ์ฑ, ํ๋ณต, ๋ณํ์ ์ด ์ ์ ์ ์ฌ์ฉ (GRANT, REVOKE)
RDBMS
- ๊ด๊ณํ DB ๊ด๋ฆฌ ์์คํ
- ๊ด๊ณํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ 2์ฐจ์ ํ ์ด๋ธ๋ก ํํํ๋ DB
- ํ ์ด๋ธ๊ฐ์ ๊ด๊ณ์์ ์๋ก์ ์นผ๋ผ์ ๊ธฐ์ค์ผ๋ก JOIN์ด ๊ฐ๋ฅํ๋ค๋๊ฒ ํฐ ํน์ง
- (์ฅ) ์ ํด์ง ์คํค๋ง์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ํ๋ฏ๋ก ๋ช ํํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฅ
- (๋จ) ์คํค๋ง๋ก ์ธํด ๋ฐ์ดํฐ๊ฐ ์ ์ฐํ์ง ๋ชปํจ. ํ ์ด๋ธ ๊ฐ ๊ด๊ณ๋ฅผ ๋งบ๊ณ ์์ด ์์คํ ์ด ์ปค์ง ๊ฒฝ์ฐ JOIN๋ฌธ์ด ๋ง์ ๋ณต์กํ ์ฟผ๋ฆฌ๊ฐ ๋ ์ ์์
NoSQL
- ์ ํต์ ์ธ ๊ด๊ณํ ๋ชจ๋ธ์์ ๋ฒ์ด๋์ ๋ค์ํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ๊ด๋ฆฌ์ ์ ๊ทผ์ ์ง์ํ๋ DB
- RDBMS์ ๋นํด ์์ ๋ก์ด ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํจ
- ์ํํ์ฅ์ ํ ์ ์๊ณ ๋ถ์ฐ์ฒ๋ฆฌ๋ฅผ ์ง์
- (์ฅ) ๊ด๊ณํ DB์ ๋นํด ์ํํ์ฅ์ด ์ฝ๊ธฐ ๋๋ฌธ์ ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ์ฑ๋ฅ์์ ์ด์ ์ด ์์
- (๋จ) ์๊ฒฉํ ์ ์ฝ์กฐ๊ฑด์ด ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์์ /์ญ์ ์ ๋ชจ๋ ์ปฌ๋ ์ ์ ๊ฑธ์ณ์ ์ด๋ฅผ ๋ฐ์ํด์ผ ํ๋ ๋จ์ ์กด์ฌ
INDEX
- DB์ ๊ฒ์๊ธฐ๋ฅ ์ฑ๋ฅ์ ๋์ฌ์ฃผ๋ ๊ธฐ์
- ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ธฐ ์ํด ๊ฒ์ํ๋ ์์ ์ ์ค์ด๊ฑฐ๋ ์์จ ์ ์๋ค
- ๋ฐ์ดํฐ๊ฐ ๋ง๊ฑฐ๋ SELECT / JOIN์ด ์ฆ์ ๊ฒฝ์ฐ ์ฌ์ฉ
- ๋ฐ์ดํฐ ์ค๋ณต๋๊ฐ ๋๊ฑฐ๋ DML(Insert, Delete, Update)์ด ์์ฃผ ์ผ์ด๋๋ ๊ฒฝ์ฐ ์ฌ์ฉ์ ํผํด์ผ ํจ
VIEW
- ๋ฐ์ดํฐ๋ฅผ ์ ํ์ ์ผ๋ก ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ํ๋ ์ด์์ ํ ์ด๋ธ์ด๋ ๋ทฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ๊ฐ์ ํ ์ด๋ธ
ํธ๋์ญ์ (Transaction)
- DB์ ์ํ๋ฅผ ๋ณํ์ํค๊ธฐ ์ํด ์ํํ๋ ์์ ๋จ์
- ํธ๋์ญ์ ๋์
1) ํธ๋์ญ์ ์์
2) ์์ ์ํ
3) ์ข ๋ฃ
- ์ด์์์ด ์๋ฃํ๋ค๋ฉด ํด๋น ํธ๋์ญ์ ์ Commit
- ํธ๋์ญ์ ๋ด์ ์์ ์งํ ์ค ์คํจ ์ ํด๋น ํธ๋์ญ์ ์ Rollback ๋๋ Abort
* Commit : ์ํ์๋ฃ. ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋์์์ ์ ์ธ. ํธ๋์ญ์ ์ํ๊ฒฐ๊ณผ๊ฐ DB์ ๋ฐ์๋๊ณ ์ผ๊ด๋ ์ํ๋ฅผ ์ง์์ ์ผ๋ก ์ ์ง
* Rollback : ํธ๋์ญ์ ์ด ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ๊ฒฝ์ฐ ์์์ฑ ๊ตฌํ์ ์ํด ํธ๋์ญ์ ์ด ํํ ๋ชจ๋ ์ฐ์ฐ์ ์ทจ์
* Abort : ์ฒ ํ. Rollback ์ฐ์ฐ์ ์คํํ ์ํ
* ํน์ง (ACID) - ํธ๋์ญ์ ์ด ์์ ํ๊ฒ ์ํ๋๋ค๋ ๊ฒ์ ๋ณด์ฅํ๊ธฐ ์ํ ์ฑ์ง
- Automicity(์์์ฑ) : ๋ชจ๋ ์๋ฃ๋๊ฑฐ๋ ํ๋๋ ์๋ฃ๋์ง ์์์ผ ํจ
- Consistency(์ผ๊ด์ฑ) : ์์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ ํญ์ ์ผ๊ด์ฑ ์์ด์ผ ํจ
- Isolation(๋ ๋ฆฝ์ฑ) : ํ๋์ ํธ๋์ญ์ ์ด ์๋ํ๊ณ ์์ ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ฐ์ฐ์ ๋ผ์ด๋ค ์ ์์
- Durability(์ง์์ฑ) : ํธ๋์ญ์ ์ด ์๋ฃ๋ ํ์ ๋ฐ์ดํฐ๋ ์๊ตฌ์ ์ผ๋ก ๋ณด์กด๋์ด์ผ ํจ
ERD
- ๊ฐ์ฒด-๊ด๊ณ ๋ค์ด์ด๊ทธ๋จ
- ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ค๋ช ํด์ฃผ๋ ๋ค์ด์ด๊ทธ๋จ
- ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ DB ๊ตฌ์กฐ๋ ๊ด๊ณ๋ฅผ ํ๋์ ํ์ ํ ์ ์๋ค
KEY
- ๊ฒ์, ์ ๋ ฌ ์ ํน์ ํ(ํํ, ROW)์ ๊ตฌ๋ถํ ์ ์๋ ๊ธฐ์ค์ด ๋๋ ์์ฑ(Attribute)
- Candidate Key(ํ๋ณดํค) : ํํ์ ์๋ณํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์์ฑ๋ค์ ๋ถ๋ถ์งํฉ(๊ธฐ๋ณธํค๋ก ์ฌ์ฉํ ์ ์๋ ์์ฑ๋ค). ์ ์ผ์ฑ/์ต์์ฑ ๋ง์กฑ
* ์ ์ผ์ฑ : ํค๋ก ํ๋์ ํํ์ ์ ์ผํ๊ฒ ์๋ณํ ์ ์์
* ์ต์์ฑ : ๊ผญ ํ์ํ ์์ฑ์ผ๋ก๋ง ๊ตฌ์ฑ
- Primary Key (๊ธฐ๋ณธํค) : ํ๋ณดํค ์ค ์ ํํ ๋ฉ์ธ ํค. NOT NULL, ์ค๋ณตX
- Alternate Key(๋์ฒดํค) : ํ๋ณดํค ์ค ๊ธฐ๋ณธํค๋ฅผ ์ ์ธํ ๋๋จธ์ง ํค
- Super Key(์ํผํค) : ์ ์ผ์ฑ์ ๋ง์กฑํ์ง๋ง ์ต์์ฑ์ ๋ง์กฑํ์ง ๋ชปํ๋ ํค
- Foreign Key(์ธ๋ํค) : ์ฐธ์กฐ๋๋ ํ ์ด๋ธ์ ๊ธฐ๋ณธํค์ ๋์๋์ด ํ ์ด๋ธ ๊ฐ์ ์ฐธ์กฐ ๊ด๊ณ๋ฅผ ํ์ํ๋ ํค
JOIN
- 2๊ฐ ์ด์์ ํ ์ด๋ธ์์ ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ๋ฌธ
- Inner join : 2๊ฐ ์ด์์ ํ ์ด๋ธ์์ ๊ต์งํฉ๋ง์ ์ถ์ถ
- Left join : 2๊ฐ ์ด์์ ํ ์ด๋ธ์์ from๋ฌธ์ ํด๋นํ๋ ๋ถ๋ถ ์ถ์ถ
- Right join : 2๊ฐ ์ด์์ ํ ์ด๋ธ์์ from ๋ฌธ์ ํ ์ด๋ธ๊ณผ Joinํ๋ ํ ์ด๋ธ์ ํด๋นํ๋ ๋ถ๋ถ์ ์ถ์ถ
- Outer join : 2๊ฐ ์ด์์ ํ ์ด๋ธ์์ ๋ชจ๋ ํ ์ด๋ธ์ ํด๋นํ๋ ๋ถ๋ถ์ ์ถ์ถ
SQL Injection
- ์กฐ์๋ SQL ์ฟผ๋ฆฌ๋ฌธ์ด DB์ ์ง์ ์ ๋ฌ๋์ด ๋น์ ์์ ์ธ ๋ช ๋ น์ ์คํ์ํค๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ
* ๊ณต๊ฒฉ ๋ฐฉ๋ฒ
1) ์ธ์ฆ ์ฐํ
- ๋ก๊ทธ์ธ๊ณผ ๊ฐ์ ์์ฒญ์์ ๋ณด์ ์ทจ์ฝ์ฑ์ ์ด์ฉํด DB์ ์ํฅ์ ์ค ์ ์๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ๋ฌธ์ ํจ๊ป ์ ์ก
- ๊ธฐ๋ณธ ์ฟผ๋ฆฌ๋ฌธ์ WHERE '1' = '1' ๋ฑ ๊ณผ ๊ฐ์ด ๋ฌด์กฐ๊ฑด ์คํ๋๋ true๋ฌธ์ ์์ฑํด ์กฐ์
2) ๋ฐ์ดํฐ ๋ ธ์ถ
- ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ์ญ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ์ ์ถํ ํ ํดํน์ ํ์ฉ
* ๋ฐฉ์ด ๋ฐฉ๋ฒ
1) input๊ฐ ์ ํจ์ฑ ๊ฒ์ฌ - ํน์๋ฌธ์ ์ฌ๋ถ ๊ฒ์ฌ
2) SQL๊ณผ ๊ด๋ จํ ์๋ฒ ์๋ฌ ๋ฉ์ธ์ง๋ ๋ ธ์ถํ์ง ์๋๋ก
3) preparestatement ์ฌ์ฉ : ํน์๋ฌธ์ ์๋ escape ์๋ฒ ํํฐ๋ง