Database
Computer Science of Database

SQL

๐Ÿ‘‰ RDBMS์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ํŠน์ˆ˜ ๋ชฉ์ ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด


DBMS

๐Ÿ‘‰ ์‚ฌ์šฉ์ž์™€ DB ์‚ฌ์ด์—์„œ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์— ๋”ฐ๋ผ DB๋ฅผ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด


Database โœ”๏ธ

๐Ÿ‘‰ ์ผ๋ฐ˜์ ์œผ๋กœ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์— ์ „์ž ๋ฐฉ์‹์œผ๋กœ ์ €์žฅ๋œ ๊ตฌ์กฐํ™”๋œ ์ •๋ณด


RDBMS(Relational DB Management System) โœ”๏ธ

๐Ÿ‘‰ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” DBMS ์œ ํ˜•
๐Ÿ‘‰ RDBMS์˜ ํ…Œ์ด๋ธ”์€ ์„œ๋กœ ์—ฐ๊ด€๋˜์–ด ์žˆ์–ด ์ผ๋ฐ˜ DBMS๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ


NoSQL โœ”๏ธ

๐Ÿ‘‰ ๊ธฐ์กด์˜ RDBMS์™€๋Š” ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ธฐ์ˆ 
๐Ÿ‘‰ ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ๊ฐ€ ๋งค์šฐ ์œ ๋™์ , ๋ฐ์ดํ„ฐ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š์Œ
๐Ÿ‘‰ SQL ๋ฟ๋งŒ์ด ์•„๋‹Œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ œ๊ณต
๐Ÿ‘‰ ๋งค์šฐ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ฑฐ๋‚˜ ๋ถ„์‚ฐํ˜• ๊ตฌ์กฐ์— ๋งค์šฐ ์ ํ•ฉํ•œ ๊ธฐ์ˆ 
๐Ÿ‘‹ ๋ถ„์‚ฐ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒํ˜ธ ๋ณต์‚ฌํ•˜๋ฉฐ ์ €์žฅํ•˜๊ธฐ์— ๋ฐ์ดํ„ฐ ์œ ์‹ค์ด ๋งค์šฐ ์ ์Œ
โœ‹ ๊ธฐ์กด์˜ ๋ณต์žกํ•˜๊ณ  ์†Œ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ์—์„œ ๋‹จ์ˆœํ•˜๊ณ  ๋‹ค๋Ÿ‰์˜ ๋กœ๊ทธ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€๋ชจํ•จ์— ๋”ฐ๋ผ ์ค‘์š”์„ฑ์ด ๋ถ€๊ฐ๋จ
โœ‹ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š์Œ


Schema โœ”๏ธ

๐Ÿ‘‰ DB์˜ ๊ตฌ์กฐ์™€ ์ œ์•ฝ์กฐ๊ฑด์— ๊ด€ํ•˜์—ฌ ์ „๋ฐ˜์ ์ธ ๋ช…์„ธ๋ฅผ ๊ธฐ์ˆ ํ•œ ๊ฒƒ
โœ‹ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(meta-data)
โœ‹ ๋ฐ์ดํ„ฐ ์‚ฌ์ „์— ์ €์žฅ
โœ‹ ๋‚ด๋ถ€ ์Šคํ‚ค๋งˆ : ๋ฐ์ดํ„ฐ์˜ ์‹ค์ œ ์ €์žฅ ๋ฐฉ๋ฒ•์„ ๊ธฐ์ˆ ํ•œ ๊ฒƒ
โœ‹ ๊ฐœ๋… ์Šคํ‚ค๋งˆ : DB ์ „์ฒด์˜ ๋…ผ๋ฆฌ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ธฐ์ˆ ํ•œ ๊ฒƒ
โœ‹ ์™ธ๋ถ€ ์Šคํ‚ค๋งˆ : ์‚ฌ์šฉ์ž์™€ ์‘์šฉ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๊ฐ์ž ๊ฐœ์ธ์˜ ์ž…์žฅ์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” DB์˜ ๋…ผ๋ฆฌ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ธฐ์ˆ ํ•œ ๊ฒƒ


SQL Injection

๐Ÿ‘‰ ๊ณต๊ฒฉ์ž๊ฐ€ ์•…์˜์ ์ธ ์˜๋„๋ฅผ ๊ฐ–๋Š” ๊ตฌ๋ฌธ์„ ์‚ฝ์ž…ํ•˜์—ฌ ๊ณต๊ฒฉ์ž๊ฐ€ ์›ํ•˜๋Š” SQL ๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ํ•ดํ‚น๊ธฐ๋ฒ•
๐Ÿ‘‹ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ•
ใ€€ใ€€๐Ÿ‘‹ ๋…ผ๋ฆฌ์  ์—๋Ÿฌ๋ฅผ ์ด์šฉ, Union ๋ช…๋ น์–ด๋ฅผ ์ด์šฉ, ๋‹ค๋Ÿ‰์˜ SQL Injection ๊ณต๊ฒฉ, etc
๐Ÿ‘‹ ๋ฐฉ์–ด ๋ฐฉ๋ฒ•
ใ€€ใ€€๐Ÿ‘‹ input ๊ฐ’์„ ๋ฐ›์„ ๋•Œ, ํŠน์ˆ˜๋ฌธ์ž ์—ฌ๋ถ€ ๊ฒ€์‚ฌ
ใ€€ใ€€๐Ÿ‘‹ SQL ์„œ๋ฒ„ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ, ํ•ด๋‹น ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๊ฐ์ถ”๊ธฐ
ใ€€ใ€€๐Ÿ‘‹ preparedstatement ์‚ฌ์šฉ


Statement ๐Ÿ†š PreparedStatement ๐Ÿ”ฅ

๐Ÿ‘‰ Statement : SQL ๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ํด๋ž˜์Šค
๐Ÿ‘‰ PreparedStatement : Statement ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ํ–ฅ์ƒํ•œ ๊ฒƒ
๐Ÿ‘‰ Statement์—๋Š” ๋ณดํ†ต ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋ฐ”์ธ๋”ฉํ•˜๋Š” static SQL์ด ์‚ฌ์šฉ๋˜์ง€๋งŒ PreparedStatement์—์„œ๋Š” ์ฟผ๋ฆฌ ์ž์ฒด์— ์กฐ๊ฑด์ด ๋“ค์–ด๊ฐ€๋Š” dynamic SQL์ด ์‚ฌ์šฉ๋จ
๐Ÿ‘‰ ์†๋„์™€ ๋ณด์•ˆ ์ธก๋ฉด์—์„œ PreparedStatement๊ฐ€ ์šฐ์ˆ˜


Transaction โœ”๏ธ

๐Ÿ‘‰ DB ๋‚ด์—์„œ ํ•œ๊บผ๋ฒˆ์— ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•  ์ผ๋ จ์˜ ์—ฐ์‚ฐ๋“ค
โœ‹ A Transaction symbolizes a unit of work perfomed within a DBMS
๐Ÿ‘‰ 4๊ฐ€์ง€์˜ ํŠน์„ฑ ACID โœ”๏ธ
ใ€€ใ€€๐Ÿ‘‰ ์›์ž์„ฑ(Atomicity) : ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ํ•˜๋‚˜์˜ ๋‹จ์œ„, ์ž‘์—…์€ ๋ชจ๋‘ ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜ ๋ชจ๋‘ ์ทจ์†Œ๋จ
ใ€€ใ€€๐Ÿ‘‰ ์ผ๊ด€์„ฑ(Consistency) : ํŠธ๋žœ์žญ์…˜ ์ˆ˜ํ–‰ ์ „/ํ›„ ์ƒ๊ด€์—†์ด DB ์ƒํƒœ๋Š” ํ•ญ์ƒ ์ผ๊ด€๋œ ์ƒํƒœ(์ •์˜๋œ ์ œ์•ฝ์กฐ๊ฑด์„ ๋งŒ์กฑ)๋ฅผ ์œ ์ง€ํ•จ
ใ€€ใ€€๐Ÿ‘‰ ๊ฒฉ๋ฆฌ์„ฑ(Isolation) : ์ˆ˜ํ–‰ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋ผ์–ด๋“ค์–ด ๋ณ€๊ฒฝ ์ค‘์ธ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ํ›ผ์†ํ•  ์ˆ˜ X
ใ€€ใ€€๐Ÿ‘‰ ์˜์†์„ฑ(Durability) : ์ •์ƒ์ ์ธ ์ข…๋ฃŒ๊ฐ€ ๋˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋Š” ์‹œ์Šคํ…œ์— ์˜๊ตฌ์  ์ ์šฉ
โœ‹ ํ•œ๊บผ๋ฒˆ์— ์™„๋ฃŒ๊ฐ€ ๋œ ๊ฒฝ์šฐ, ์„ฑ๊ณต์ ์ธ ์ข…๋ฃŒ โ€˜COMMITโ€™, DB ๋ฐ˜์˜
โœ‹ ๊ทธ๋ ‡์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ, ๋น„์ •์ƒ์ ์ธ ์ข…๋ฃŒ โ€˜ROLLBACKโ€™, DB ์˜ํ–ฅ X


Transaction Isolation Level(๊ฒฉ๋ฆฌ ์ˆ˜์ค€)

๐Ÿ‘‰ ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜ํ–‰๋  ๋•Œ, ํŠธ๋žœ์žญ์…˜๋ผ๋ฆฌ ์„œ๋กœ ๊ณ ๋ฆฝ๋˜์–ด ์žˆ๋Š” ์ˆ˜์ค€
๐Ÿ‘‰ 4๊ฐ€์ง€์˜ ๋ ˆ๋ฒจ
ใ€€ใ€€๐Ÿ‘‰ Read Uncommited
ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‰ ์ปค๋ฐ‹ ์ „์˜ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๋ ˆ๋ฒจ
ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ Dirty Read, Non-Repeatable Read ๋ฐœ์ƒ
ใ€€ใ€€๐Ÿ‘‰ Read Commited
ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‰ ์ปค๋ฐ‹์ด ์™„๋ฃŒ๋œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ๋งŒ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๋ ˆ๋ฒจ
ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ Non-Repeatable Read, Pantom Read ๋ฐœ์ƒ
ใ€€ใ€€๐Ÿ‘‰ Repeatable Read
ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‰ ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— ์ปค๋ฐ‹๋œ ๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ๋งŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๋ ˆ๋ฒจ
ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ Pantom Read ๋ฐœ์ƒ
ใ€€ใ€€๐Ÿ‘‰ Serializable
ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‰ ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ ˆ๋ฒจ
ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ ๋™์‹œ์„ฑ์ด ๊ฐ€์žฅ ๋งŽ์ด ๋–จ์–ด์ง, DeadLock ์ฃผ์˜
๐Ÿ‘‹ Dirty Read : ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ์ˆ˜์ • ์ค‘์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ
๐Ÿ‘‹ Non-Repeatable Read : ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋‘ ๋ฒˆ ์ˆ˜ํ–‰ํ•  ๋•Œ, ๋‘ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ƒ์ดํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ
๐Ÿ‘‹ Phantom Read : ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋‘ ๋ฒˆ ์ˆ˜ํ–‰ํ•  ๋•Œ, ์ฒซ ๋ฒˆ์งธ ์ฟผ๋ฆฌ์—์„œ ์—†๋˜ ํŠœํ”Œ์ด ๋‘ ๋ฒˆ์งธ ์ฟผ๋ฆฌ์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ


DB ์ด์ค‘ํ™”

๐Ÿ‘‰ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋–จ์–ด์ ธ ์žˆ๋Š” ์—ฌ๋Ÿฌ DB์— ๋Œ€ํ•ด ๋กœ์ปฌ DB์˜ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ์›๊ฒฉ DB์— ๋ณต์ œํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ
๐Ÿ‘‹ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ฐฑ์—… ๋ฐ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๋ถ„์‚ฐ์„ ์œ„ํ•ด


๋ฌด๊ฒฐ์„ฑ(Integrity) โœ”๏ธ

๐Ÿ‘‰ DB์—์„œ ์ €์žฅ๋œ ๊ฐ’๋“ค์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ œํ•œ์„ ํ†ตํ•˜์—ฌ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์‹ ๋ขฐ๋ฅผ ๋ณด์žฅํ•˜๊ฒŒ ํ•ด ์ผ๊ด€์„ฑ์„ ์œ ์ง€์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ
ใ€€ใ€€๐Ÿ‘‰ ์˜์—ญ ๋ฌด๊ฒฐ์„ฑ(Domain Integrity) : ์ž๋ฃŒํ˜•, ๊ทœ์น™๊ณผ ์ œ์•ฝ, ๊ฐ’ ๋ฒ”์œ„ ๋“ฑ์„ ์ œํ•œ
ใ€€ใ€€๐Ÿ‘‰ ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ(Referential Integrity) : ๊ธฐ๋ณธ ํ‚ค์™€ ์ฐธ์กฐ ํ‚ค ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ํ•ญ์ƒ ์œ ์ง€๋จ์„ ๋ณด์žฅ
ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‰ ๊ด€๋ จ๋œ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์œ ํšจํ•˜๊ฒŒ ํ•˜๋Š” ๊ทœ์น™
ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ ์‰ฝ๊ฒŒ ์–˜๊ธฐํ•˜์ž๋ฉด ์™ธ๋ž˜ํ‚ค ๊ฐ’์€ NULL ํ˜น์€ ์ฐธ์กฐ ๋ฆด๋ ˆ์ด์…˜์˜ ๊ธฐ๋ณธํ‚ค ๊ฐ’๊ณผ ๋™์ผํ•จ์„ ์˜๋ฏธ
ใ€€ใ€€๐Ÿ‘‰ ๊ฐœ์ฒด ๋ฌด๊ฒฐ์„ฑ(Entity Integrity) : ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์–ด๋–ค ์†์„ฑ๋„ Null ๊ฐ’์ด๋‚˜ ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ


Key โœ”๏ธ

๐Ÿ‘‰ DB์—์„œ ํŠœํ”Œ๋“ค์„ ์„œ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ์ค€์ด ๋˜๋Š” ์†์„ฑ์„ ๋œปํ•จ
ใ€€ใ€€๐Ÿ‘‰ ๊ธฐ๋ณธ ํ‚ค(Primary Key) : ํ•œ ๋ฆด๋ ˆ์ด์…˜์—์„œ ํŠน์ • ํŠœํ”Œ์„ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์†์„ฑ // ์˜ค์ง ํ•œ ๊ฐœ, NULL X, ์ค‘๋ณต ๊ฐ’ X // NULL์€ 0๊ณผ ๋‹ค๋ฅธ ์˜๋ฏธ
ใ€€ใ€€ใ€€ใ€€โœ‹ ๋ณตํ•ฉ ํ‚ค(Composite Key) : ๋‘˜ ์ด์ƒ์˜ ์†์„ฑ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ธฐ๋ณธ ํ‚ค
ใ€€ใ€€ใ€€ใ€€โœ‹ ์ž์—ฐ ํ‚ค(Natural Key) : ์‹ค์ œ๋กœ ์–ด๋–ค ๊ฐœ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์†์„ฑ์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ‚ค
ใ€€ใ€€ใ€€ใ€€โœ‹ ๋Œ€๋ฆฌ ํ‚ค(Surrogate Key) : ๋ณด์•ˆ ํ˜น์€ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ธ๊ณต์ ์ด๊ฑฐ๋‚˜ ํ•ฉ์„ฑ์ ์ธ ํ‚ค, ์ธ๊ณต ํ‚ค๋ผ๊ณ ๋„ ํ•จ
ใ€€ใ€€๐Ÿ‘‰ ํ›„๋ณด ํ‚ค(Candidate Key) : ํŠน์ • ํŠœํ”Œ์„ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ์†์„ฑ์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ‚ค // ์œ ์ผ์„ฑ O, ์ตœ์†Œ์„ฑ O
ใ€€ใ€€๐Ÿ‘‰ ๋Œ€์ฒด ํ‚ค(Alternate Key) : ํ›„๋ณด ํ‚ค๊ฐ€ ๋‘˜ ์ด์ƒ์ผ๋•Œ, ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์ œ์™ธํ•œ ํ›„๋ณด ํ‚ค
ใ€€ใ€€๐Ÿ‘‰ ์Šˆํผ ํ‚ค(Super Key) : ํŠน์ • ํŠœํ”Œ์„ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์†์„ฑ์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ‚ค // ์œ ์ผ์„ฑ O, ์ตœ์†Œ์„ฑ X
ใ€€ใ€€๐Ÿ‘‰ ์™ธ๋ž˜ ํ‚ค(Foreign Key) : ์ฐธ์กฐํ•˜๋Š” ๋ฆด๋ ˆ์ด์…˜์˜ ๊ธฐ๋ณธ ํ‚ค์™€ ๋Œ€์‘๋˜์–ด ๋ฆด๋ ˆ์ด์…˜ ๊ฐ„์˜ ์ฐธ์กฐ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ค‘์š”ํ•œ ๋„๊ตฌ
ใ€€ใ€€๐Ÿ‘‰ ๋ถ€๋ถ„ ํ‚ค(Partial Key) : ์ƒ์œ„ ๊ฐœ์ฒด ํƒ€์ž…์˜ ํ‚ค์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ์•ฝํ•œ ๊ฐœ์ฒด ํƒ€์ž…์˜ ํŠน์ • ํŠœํ”Œ๋ฅผ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์†์„ฑ
โœ‹ ์œ ์ผ์„ฑ : ํŠน์ • ํŠœํ”Œ์„ ๋ฐ”๋กœ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ ํ•œ ์†์„ฑ์„ ์˜๋ฏธ
โœ‹ ์ตœ์†Œ์„ฑ : ํ‚ค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์†์„ฑ ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์—†๋Š”, ๋”ฐ๋ผ์„œ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ์ตœ์†Œ์˜ ์†์„ฑ์„ ์˜๋ฏธ


DDL(Data Definition Language)

๐Ÿ‘‰ ์Šคํ‚ค๋งˆ๋ฅผ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด
โœ‹ DB ๊ตฌ์กฐ, ๋ฐ์ดํ„ฐ ํ˜•์‹, ์ ‘๊ทผ ๋ฐฉ์‹ ๋“ฑ DB๋ฅผ ๊ตฌ์ถ•ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด
๐Ÿ‘‹ CREATE, ALTER, DROP // ์ƒ์„ฑ, ๋ณ€๊ฒฝ, ์‚ญ์ œ


DML(Data Manipulation Language)

๐Ÿ‘‰ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด
โœ‹ ์‚ฌ์šฉ์ž๋กœ ํ•˜์—ฌ๊ธˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋„๊ตฌ๋กœ์จ ์‚ฌ์šฉ์ž์™€ DBMS ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณต
๐Ÿ‘‹ SELECT, INSERT, DELETE, UPDATE // ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ, ๋ณ€๊ฒฝ
๐Ÿ‘‹ SELECT/DELETE ~ FROM
๐Ÿ‘‹ INSERT ~ INTO
๐Ÿ‘‹ UPDATE ~ SET
๐Ÿ‘‹ WHERE ~ IN


DCL(Data Control Language)

๐Ÿ‘‰ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด
โœ‹ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ, ๋ณด์•ˆ ๋ฐ ๊ถŒํ•œ ์ œ์–ด, ํšŒ๋ณต ๋“ฑ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด
๐Ÿ‘‹ COMMIT, ROLLBACK, GRANT, REVOKE // ์‹ ๊ทœ ์ ์šฉ, ์ด์ „ ๋ณต์›, ๊ถŒํ•œ ๋ถ€์—ฌ, ๊ถŒํ•œ ์ทจ์†Œ


DQL(Data Query Language) ๐Ÿ”ฅ

๐Ÿ‘‰ SELECT ๋งŒ์„ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์ฟผ๋ฆฌ๋กœ ํ‘œํ˜„ํ•˜๋Š” ์œ ํ˜•


TCL(Transaction Control Language) ๐Ÿ”ฅ

๐Ÿ‘‰ COMMIT, ROLLBACK ๋งŒ์„ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ํ‘œํ˜„ํ•˜๋Š” ์œ ํ˜•


์ธ๋ฑ์Šค(Index) โœ”๏ธ

๐Ÿ‘‰ ์ถ”๊ฐ€์ ์ธ ์“ฐ๊ธฐ ์ž‘์—…๊ณผ ์ €์žฅ ๊ณต๊ฐ„์„ ํ™œ์šฉํ•˜์—ฌ DB ํ…Œ์ด๋ธ” ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ
ใ€€ใ€€๐Ÿ‘‹ Attribute ๋ณต์‚ฌํ•ด์„œ ์ •๋ ฌ
ใ€€ใ€€๐Ÿ‘‹ primary key๋Š” ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๊ธฐ์— index ํ•„์š” X
๐Ÿ‘‰ 1. Hash Table
ใ€€ใ€€๐Ÿ‘‰ key์™€ value๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
ใ€€ใ€€๐Ÿ‘‰ ๊ฒ€์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(1), ๋งค์šฐ ๋น ๋ฆ„
ใ€€ใ€€๐Ÿ‘‰ ๋‹จ์ ์€ ์—ฐ์†์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ์ˆœ์ฐจ ๊ฒ€์ƒ‰์ด ๋ถˆ๊ฐ€๋Šฅ (๋ถ€๋“ฑํ˜ธ <, >)
๐Ÿ‘‰ 2. B+ Tree
ใ€€ใ€€๐Ÿ‘‰ ์ž์‹ ๋…ธ๋“œ๊ฐ€ 2๊ฐœ ์ด์ƒ์ธ B Tree๋ฅผ ๊ฐœ์„ ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ
ใ€€ใ€€๐Ÿ‘‰ ๊ฒ€์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(logn)
ใ€€ใ€€๐Ÿ‘‰ leaf node๋“ค์€ LinkedList๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด ์ˆœ์ฐจ ๊ฒ€์ƒ‰์ด ์šฉ์ดํ•จ
๐Ÿ‘‹ Link
๐Ÿ‘‹ Link


์™œ Hash Table ๋Œ€์‹  B+ Tree๋ฅผ ํ”ํžˆ ์‚ฌ์šฉ?

๐Ÿ‘‰ Hash Table์€ ๋ชจ๋“  ๊ฐ’์ด ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š์•„ ํŠน์ • ๊ธฐ์ค€๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ์ž‘์€ ๊ฐ’์„ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์—†์Œ
โœ‹ ๋”ฐ๋ผ์„œ, ๊ธฐ์ค€ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ์ž‘์€ ์š”์†Œ๋“ค์„ ํ•ญ์ƒ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š” DB ์ธ๋ฑ์Šค๋กœ B+ Tree๊ฐ€ ๋” ์ž์ฃผ์“ฐ์ž„


์™œ B+ Tree๋ฅผ ์‚ฌ์šฉ? ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ?

๐Ÿ‘‰ ์‹œ๊ฐ„์ ์ธ ์„ฑ๋Šฅ ํ˜น์€ ๊ฒ€์ƒ‰ ๋ฐ ์‚ฝ์ž…, ์‚ญ์ œ๋ฅผ ํฌํ•จํ•œ ์ข…ํ•ฉ์ ์ธ ์„ฑ๋Šฅ์—์„œ B+ Tree๊ฐ€ ์šฐ์ˆ˜


์ธ๋ฑ์Šค(Index) ๊ด€๋ฆฌ ๐Ÿ”ฅ

๐Ÿ‘‰ ์ธ๋ฑ์Šค๊ฐ€ ์ ์šฉ๋œ ์นผ๋Ÿผ์— INSERT, DELETE, UPDATE๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค๋ฉด
ใ€€ใ€€๐Ÿ‘‰ INSERT : ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€
ใ€€ใ€€๐Ÿ‘‰ DELETE : ์‚ญ์ œํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ž‘์—…์„ ์ง„ํ–‰
ใ€€ใ€€๐Ÿ‘‰ UPDATE : ๊ธฐ์กด์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ์„ ์ฒ˜๋ฆฌ, ๊ฐฑ์‹ ๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€
โš ๏ธ ๊ธฐ์กด์˜ ์ธ๋ฑ์Šค๋ฅผ โ€˜์‚ญ์ œโ€™ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ โ€˜์‚ฌ์šฉํ•˜์ง€ ์•Š์Œโ€™์„ ์ฒ˜๋ฆฌํ•จ์— ์ฃผ์˜
โš ๏ธ ๋”ฐ๋ผ์„œ, ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, INSERT/DELETE/UPDATE๊ฐ€ ๋นˆ๋ฒˆํ•œ ์†์„ฑ์— ์ธ๋ฑ์Šค๋ฅผ ์ ์šฉํ•  ๊ฒฝ์šฐ ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ๊ฐ€ ๋น„๋Œ€ํ•ด์ง€๊ธฐ์— ์„ฑ๋Šฅ์ด ์˜คํžˆ๋ ค ์ €ํ•˜๋˜๋Š” ์—ญํšจ๊ณผ๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์Œ


DB ์ •๊ทœํ™” โœ”๏ธ

๐Ÿ‘‰ ๊ด€๊ณ„ํ˜• DB์—์„œ ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๋Š” ์ž‘์—…
๐Ÿ‘‰ ์ œ 1 ์ •๊ทœํ™”
ใ€€ใ€€๐Ÿ‘‰ ํ…Œ์ด๋ธ”์— ์นผ๋Ÿผ์ด ์›์ž ๊ฐ’์„ ๊ฐ–๋„๋ก ํ…Œ์ด๋ธ”์„ ๋ถ„ํ•ด


๐Ÿ‘‰ ์ œ 2 ์ •๊ทœํ™”
ใ€€ใ€€๐Ÿ‘‰ ์ œ 1 ์ •๊ทœํ™”๋ฅผ ์ง„ํ–‰ํ•œ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ์™„์ „ ํ•จ์ˆ˜ ์ข…์†์„ ๋งŒ์กฑํ•˜๋„๋ก ํ…Œ์ด๋ธ”์„ ๋ถ„ํ•ด
ใ€€ใ€€๐Ÿ‘‹ ์™„์ „ ํ•จ์ˆ˜ ์ข…์† : ๊ธฐ๋ณธ ํ‚ค์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์ด ๊ฒฐ์ •์ž๊ฐ€ ๋˜์–ด์„  X


๐Ÿ‘‰ ์ œ 3 ์ •๊ทœํ™”
ใ€€ใ€€๐Ÿ‘‰ ์ œ 2 ์ •๊ทœํ™”๋ฅผ ์ง„ํ–‰ํ•œ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ์ดํ–‰์  ์ข…์†์„ ์—†์• ๋„๋ก ํ…Œ์ด๋ธ”์„ ๋ถ„ํ•ด
ใ€€ใ€€๐Ÿ‘‹ ์ดํ–‰์  ์ข…์† : A โžก๏ธ B & B โžก๏ธ C์ด๋ฉด, A โžก๏ธ C


๐Ÿ‘‰ BCNF ์ •๊ทœํ™”
ใ€€ใ€€๐Ÿ‘‰ ์ œ 3 ์ •๊ทœํ™”๋ฅผ ์ง„ํ–‰ํ•œ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ๋ชจ๋“  ๊ฒฐ์ •์ž๊ฐ€ ํ›„๋ณดํ‚ค๊ฐ€ ๋˜๋„๋ก ํ…Œ์ด๋ธ”์„ ๋ถ„ํ•ด


์ •๊ทœํ™” ํŠน์ง•

๐Ÿ‘‰ DB ๋ณ€๊ฒฝ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ด์ƒ ํ˜„์ƒ๋“ค์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ
๐Ÿ‘‹ ์ฆ‰, ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์•ˆ์ •์„ฑ ์ตœ๋Œ€ํ™”
๐Ÿ‘‰ But, ๋ฆด๋ ˆ์ด์…˜ ๊ฐ„์˜ ์—ฐ์‚ฐ(JOIN)์ด ๋งŽ์•„์ ธ ์‘๋‹ต ์‹œ๊ฐ„์ด ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ์Œ
๐Ÿ‘‹ ์ •๊ทœํ™”๋Š” ๋…ผ๋ฆฌ์  ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ์ˆ˜ํ–‰


Join

๐Ÿ‘‰ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์ด๋‚˜ DB๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•
โœ‹ INNER, LEFT, RIGHT, FULL Join // ๊ต์ง‘ํ•ฉ, ์™ผ์ชฝ ํ…Œ์ด๋ธ” ๊ธฐ์ค€, ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ” ๊ธฐ์ค€, ํ•ฉ์ง‘ํ•ฉ


์ด์ƒ ํ˜„์ƒ(Anomaly) โœ”๏ธ

๐Ÿ‘‰ ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์กฐ์ž‘์‹œ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ
๐Ÿ‘‹ ์‚ฝ์ž… ์ด์ƒ : ํŠœํ”Œ ์‚ฝ์ž…์‹œ ์˜๋„ํ•˜์ง€ ์•Š์€ ์ž๋ฃŒ๊นŒ์ง€ ์‚ฝ์ž…ํ•ด์•ผ๋งŒ ํ…Œ์ด๋ธ”์— ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ˜„์ƒ
๐Ÿ‘‹ ์‚ญ์ œ ์ด์ƒ : ํŠœํ”Œ ์‚ญ์ œ์‹œ ์œ ์šฉํ•œ ๋‹ค๋ฅธ ์ •๋ณด๊นŒ์ง€ ์‚ญ์ œ๋˜์–ด๋ฒ„๋ฆฌ๋Š” ํ˜„์ƒ
๐Ÿ‘‹ ๊ฐฑ์‹  ์ด์ƒ : ํŠœํ”Œ ์ˆ˜์ •์‹œ ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€๋งŒ ์ˆ˜์ •๋˜์–ด ๋ฐ์ดํ„ฐ ๋ชจ์ˆœ์ด ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ


DB Lock โœ”๏ธ

๐Ÿ‘‰ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜๋“ค์ด ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋กœ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ด๋ฅผ ์ œ์–ดํ•ด์ฃผ๋Š” ๋„๊ตฌ
๐Ÿ‘‹ ๊ณต์œ  ๋ฝ(Shared Lock) : ํŠธ๋žœ์žญ์…˜์ด ์ฝ๊ธฐ๋ฅผ ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฝ
ใ€€ใ€€๐Ÿ‘‹ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์“ธ ์ˆ˜ ์—†์Œ
๐Ÿ‘‹ ๋ฐฐํƒ€ ๋ฝ(Exclusive Lock) : ํŠธ๋žœ์žญ์…˜์ด ์ฝ๊ณ  ์“ฐ๊ธฐ๋ฅผ ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฝ
ใ€€ใ€€๐Ÿ‘‹ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ์Œ
๐Ÿ‘‹ ๋ฝํ‚น ๋‹จ์œ„ : ํ•œ๊บผ๋ฒˆ์— ๋ฝํ‚นํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์œ„
ใ€€ใ€€๐Ÿ‘‹ DB, ํŒŒ์ผ, ๋ ˆ์ฝ”๋“œ ๋“ฑ์ด ๋ฝํ‚น ๋‹จ์œ„ ๋  ์ˆ˜ ์žˆ์Œ
ใ€€ใ€€๐Ÿ‘‹ ๋ฝํ‚น ๋‹จ์œ„๊ฐ€ ์ž‘์•„์ง€๋ฉด ๋ณ‘ํ–‰์„ฑ ์ˆ˜์ค€์ด ์˜ฌ๋ผ๊ฐ€๊ณ , ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ฆ๊ฐ€ํ•จ


DB Deadlock(๊ต์ฐฉ ์ƒํƒœ) โœ”๏ธ

๐Ÿ‘‰ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜๋“ค์ด ์‹คํ–‰์„ ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋ฌดํ•œํžˆ ๋Œ€๊ธฐํ•˜๋Š” ์ƒํƒœ์— ๋น ์ง„ ํ˜„์ƒ
๐Ÿ‘‰ ์˜ˆ๋ฐฉ ๊ธฐ๋ฒ•
ใ€€ใ€€๐Ÿ‘‰ ๊ฐ ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ฝํ‚น
ใ€€ใ€€๐Ÿ‘‰ But, ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์ด ํ•„์š”ํ•˜๋ฉด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝํ‚นํ•ด์•ผํ•ด์„œ ํŠธ๋žœ์žญ์…˜์˜ ๋ณ‘ํ–‰์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ๋ชปํ•จ
ใ€€ใ€€๐Ÿ‘‰ ๋˜ํ•œ, ๋ช‡๋ช‡์˜ ํŠธ๋žœ์žญ์…˜์€ ๊ณ„์† ์ฒ˜๋ฆฌ๋ฅผ ๋ชปํ•˜๊ฒŒ ๋˜๋Š” ๊ธฐ์•„ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
๐Ÿ‘‰ ํšŒํ”ผ ๊ธฐ๋ฒ•
ใ€€ใ€€๐Ÿ‘‰ Wait-Die : ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ ์œ ํ•˜๊ณ  ์žˆ์„ ๋•Œ, ๊ธฐ๋‹ค๋ฆฌ๊ฑฐ๋‚˜ ํฌ๊ธฐํ•˜๋Š” ๋ฐฉ์‹
ใ€€ใ€€๐Ÿ‘‰ Wound-Wait : ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ ์œ ํ•˜๊ณ  ์žˆ์„ ๋•Œ, ๋นผ์•—๊ฑฐ๋‚˜ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐฉ์‹
๐Ÿ‘‰ ํƒ์ง€ ๊ธฐ๋ฒ•
ใ€€ใ€€๐Ÿ‘‰ Union-Find๋ฅผ ์ด์šฉํ•˜์—ฌ, ์‚ฌ์ดํด์ด ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋กœ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Œ


View Table

๐Ÿ‘‰ ๋ทฐ๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋“œ์›จ์–ด์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๋ทฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
๐Ÿ‘‹ ์ฆ‰, ํ•˜๋‚˜์˜ ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”
ใ€€ใ€€๐Ÿ‘‰ ๋ณต์žกํ•œ Query๋กœ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ„๋‹จํ•œ Query๋กœ ์–ป์„ ์ˆ˜ ์žˆ์Œ
ใ€€ใ€€๐Ÿ‘‰ ํ•œ ๊ฐœ์˜ ๋ทฐ๋กœ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Œ
๐Ÿ‘‹ ๋ณด์•ˆ ๊ด€๋ฆฌ, ์‚ฌ์šฉ์ƒ์˜ ํŽธ์˜, ์ˆ˜ํ–‰์†๋„ ํ–ฅ์ƒ, SQL ์„ฑ๋Šฅ ํ–ฅ์ƒ์˜ ๋ชฉ์ ์œผ๋กœ ํ™œ์šฉ


Connection Pool

๐Ÿ‘‰ ์ผ์ •๋Ÿ‰์˜ ์ปค๋„ฅ์…˜ ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด pool์— ์ €์žฅํ•˜๋Š” ๊ธฐ๋ฒ•
๐Ÿ‘‹ ํ”„๋กœ๊ทธ๋žจ ์š”์ฒญ์‹œ ์ปค๋„ฅ์…˜ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•ด์ฃผ๊ณ , ์ž„๋ฌด ์™„๋ฃŒ์‹œ ๋‹ค์‹œ ๋ฐ˜ํ™˜ํ•˜์—ฌ pool์— ์ €์žฅ
๐Ÿ‘‹ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š” ์ผ์ด ์‚ฌ๋ผ์ ธ์„œ ์ด์™€ ๊ด€๋ จ๋œ ๋น„์šฉ์„ ์ค„์—ฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋„์›€์ด ๋จ
๐Ÿ‘‹ But, ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๊ณ„์† ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น์„ ํ•ด๋†“์œผ๋ฏ€๋กœ Memory leak ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
๐Ÿ‘‹ Connection : DB ์—ฐ๊ฒฐ ๊ฐ์ฒด



๐Ÿ’š Additional

E-R Model

๐Ÿ‘‰ ๊ฐœ์ฒด-๊ด€๊ณ„ ๋ชจ๋ธ, ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ผ๋ จ์˜ ํ‘œํ˜„


E-R Diagram

๐Ÿ‘‰ ERM ํ”„๋กœ์„ธ์Šค์˜ ์‚ฐ์ถœ๋ฌผ


Oracle ๐Ÿ†š MySQL

๐Ÿ‘‰ Oracle์€ ๋Œ€์šฉ๋Ÿ‰์— ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๊ธฐ์—…์—์„œ ๋งŽ์ด ์“ฐ์ž„
๐Ÿ‘‰ MySQL์€ ์ง„์ž…์žฅ๋ฒฝ์ด ๋‚ฎ๊ณ  ๋‹จ์ผ DB๋กœ ์ œํ•œ์ด ๋˜์–ด ์žˆ์–ด ์ผ๋ฐ˜์ ์œผ๋กœ ์ค‘์†Œ๊ธฐ์—… ํ˜น์€ ๊ฐœ์ธ์ด ์“ฐ๊ธฐ์— ์ ํ•ฉ


Hint

๐Ÿ‘‰ ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ตœ์ ์˜ ๊ณ„ํš์œผ๋กœ SQL๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ตœ์ ์˜ ์‹คํ–‰ ๊ณ„ํš์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ


Clustering

๐Ÿ‘‰ ์—ฌ๋Ÿฌ ๊ฐœ์˜ DB๋ฅผ ์ˆ˜ํ‰์ ์ธ ๊ตฌ์กฐ๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ์‹
๐Ÿ‘‰ ๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋…ธ๋“œ๋“ค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”
โœ‹ 1๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์ฃฝ์–ด๋„ ๋‹ค๋ฅธ ๋…ธ๋“œ๊ฐ€ ์‚ด์•„์žˆ์–ด ์‹œ์Šคํ…œ์„ ์žฅ์•  ์—†์ด ์šด์˜ํ•  ์ˆ˜ ์žˆ์Œ
โœ‹ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋“ค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™” ํ•˜๋Š” ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋น„ํ•˜๋ฉด ์„ฑ๋Šฅ์ด ๋‚ฎ์Œ


Replication

๐Ÿ‘‰ ์—ฌ๋Ÿฌ ๊ฐœ์˜ DB๋ฅผ ๊ถŒํ•œ์— ๋”ฐ๋ผ ์ˆ˜์ง์ ์ธ ๊ตฌ์กฐ๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ์‹
๐Ÿ‘‰ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋…ธ๋“œ๋“ค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”
โœ‹ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋™๊ธฐํ™”๋˜์–ด ์ง€์—ฐ ์‹œ๊ฐ„์ด ๊ฑฐ์˜ ์—†์Œ
โœ‹ ๋…ธ๋“œ๋“ค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋™๊ธฐํ™” ๋˜์ง€ ์•Š์•„ ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Œ



*****
NOT A TALENT โŽ NOT GIVING UP โœ…
CopyRight โ“’ 2022 DCherish All Rights Reserved.