STUDY ๐Ÿ’›/์ทจ์—…๋ฝ€๊ฐœ๊ธฐ๐Ÿ’ฆ

[DB] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ์ˆ ๋ฉด์ ‘ ์ž๋ฃŒ์ •๋ฆฌ

DONI. 2023. 12. 3. 13:26
๋ฐ˜์‘ํ˜•

 

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 ์„œ๋ฒ„ ํ•„ํ„ฐ๋ง

๋ฐ˜์‘ํ˜•