Skip to content

Latest commit

ย 

History

History
454 lines (288 loc) ยท 18.8 KB

File metadata and controls

454 lines (288 loc) ยท 18.8 KB

๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ๊ธฐ์ˆ  ์ธํ„ฐ๋ทฐ | DATABASE ๋‹จ๊ณจ ์งˆ๋ฌธ



๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ๋… ๋ฐ ํŠน์ง•

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์ฃผ์š” ํŠน์ง•์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋“ค์„ ์ฒด๊ณ„์ ์œผ๋กœ ์ €์žฅ, ๊ด€๋ฆฌ, ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•œ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์ด๋‹ค.

  • ๋ฐ์ดํ„ฐ ๋…๋ฆฝ์„ฑ: ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•œ๋‹ค.

  • ์ค‘์•™ ์ง‘์ค‘ํ™”: ๋ฐ์ดํ„ฐ์˜ ํ†ตํ•ฉ ๊ด€๋ฆฌ ๋ฐ ๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ํ•œ๋‹ค.

  • ๋™์‹œ์„œ ์ œ์–ด: ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•ด๋„ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค.

  • ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ: ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ๋‹ค. (PK, FK ๋“ฑ)

โ‰๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ, DBMS์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • DBMS๋Š” ์ธ๋ฑ์‹ฑ, ์บ์‹ฑ, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ, ๋™์‹œ์„ฑ ์ œ์–ด ๋“ฑ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

RDBMS์™€ NoSQL์˜ ์ฐจ์ด

RDBMS์™€ NoSQL์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • RDBMS๋Š” ๊ณ ์ •๋œ ์Šคํ‚ค๋งˆ์™€ ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋กœ, SQL์„ ์‚ฌ์šฉํ•˜๋ฉฐ ACID ํŠธ๋žœ์žญ์…˜ ๋ณด์žฅ์ด ์ค‘์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • NoSQL(Not Only SQL)์€ ์Šคํ‚ค๋งˆ๊ฐ€ ์œ ์—ฐํ•˜๋ฉฐ ๋ฌธ์„œ, KEY-VALUE, ์ปฌ๋Ÿผํ˜•, ๊ทธ๋ž˜ํ”„ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ชจ๋ธ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ˆ˜ํ‰์  ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚˜ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์œ ๋ฆฌํ•˜๋‹ค.
โ‰๏ธ RDBMS์™€ NoSQL์€ ์–ด๋А ๊ฒฝ์šฐ์— ์ ํ•ฉํ•œ์ง€์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ๊ณผ ๋ณต์žกํ•œ JOIN ์—ฐ์‚ฐ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” RDBMS, ๋น ๋ฅธ ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐํ•œ ์Šคํ‚ค๋งˆ๊ฐ€ ์š”๊ตฌ๋˜๋ฉด NoSQL์ด ์ ํ•ฉํ•˜๋‹ค.

์Šคํ‚ค๋งˆ์™€ ์ธ์Šคํ„ด์Šค์˜ ์ฐจ์ด

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์Šคํ‚ค๋งˆ(Schema)์™€ ์ธ์Šคํ„ด์Šค(Instance)์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ์Šคํ‚ค๋งˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ ์ฆ‰, ํ…Œ์ด๋ธ”, ์—ด, ๋ฐ์ดํ„ฐ ํƒ€์ž…, ๊ด€๊ณ„ ๋“ฑ์„ ์ •์˜ํ•œ ์ฒญ์‚ฌ์ง„์ด๋‹ค.
  • ์ธ์Šคํ„ด์Šค๋Š” ์Šคํ‚ค๋งˆ์— ๋”ฐ๋ผ ์‹ค์ œ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค.

์Šคํ‚ค๋งˆ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ค๊ณ„๋„๋ผ๋ฉด, ์ธ์Šคํ„ด์Šค๋Š” ์„ค๊ณ„๋„๋ฅผ ๋”ฐ๋ผ ์‹ค์ œ๋กœ ์ €์žฅ๋œ ํ…Œ์ด๋ธ”์ด๋‹ค.

โ‰๏ธ ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์ด ์ธ์Šคํ„ด์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฏ€๋กœ, ๊ธฐ์กด ๋ฐ์ดํ„ฐ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ฐ ์ ‘๊ทผ ๋ฐฉ์‹์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

DDL, DML, DCL

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์–ธ์–ด(DDL, DML, DCL)์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • DDL(Data Definition Language)์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ์ •์˜, ์ˆ˜์ •, ์‚ญ์ œํ•œ๋‹ค. (CREATE, ALTER, DROP)
  • DML(Data Manipulation Language)์€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•œ๋‹ค. (SELECT, INSERT, UPDATE, DELETE)
  • DCL(Data Control Lanaguage)์€ ๋ฐ์ดํ„ฐ ๊ถŒํ•œ ๋ฐ ๋ณด์•ˆ ๊ด€๋ฆฌ๋ฅผ ํ•œ๋‹ค. (COMMIT, ROLLBACK, GRANT, REVOKE)
โ‰๏ธ ์‹ค๋ฌด์—์„œ DCL์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ๊ถŒํ•œ ๊ด€๋ฆฌ, ์‚ฌ์šฉ์ž ์ ‘๊ทผ ํ†ต์ œ, ๊ฐ์‚ฌ ๊ธฐ๋ก ๋“ฑ์„ ํ†ตํ•ด ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•œ๋‹ค.

ํŠธ๋ฆฌ๊ฑฐ, Trigger

ํŠธ๋ฆฌ๊ฑฐ, Trigger์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ํŠธ๋ฆฌ๊ฑฐ๋Š” ํŠน์ • ํ…Œ์ด๋ธ”์˜ INSERT, DELETE, UPDATE ๋“ฑ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ์ž๋™ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์‹œ์ €์ด๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€, ์ž๋™ ๋กœ๊ทธ ๊ธฐ๋ก, ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
โ‰๏ธ ํŠธ๋ฆฌ๊ฑฐ ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ํ•  ์ ์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๊ณผ๋„ํ•˜๊ฒŒ ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ์ค‘์ฒฉ๋˜๋ฉด, ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐ ๋””๋ฒ„๊น…์ด ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ์–ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‹ ์ค‘ํžˆ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ธ๋ฑ์Šค, INDEX

Index๋Š” ๋ฌด์—‡์ด๊ณ , ์žฅ๋‹จ์ ์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ํ…Œ์ด๋ธ” ์ „์ฒด ์Šค์บ”(FTS) ๋Œ€์‹ , ํŠน์ • ์ปฌ๋Ÿผ์˜ ์ •๋ ฌ๋œ ์ž๋ฃŒ๊ตฌ์กฐ์ธ B+Tree ๋˜๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•ด ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ์ง€์›ํ•œ๋‹ค.
  • ๊ฒ€์ƒ‰, ์ •๋ ฌ, ์กฐ์ธ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฐ์ดํ„ฐ ์‚ฝ์ž…, ์ˆ˜์ •, ์‚ญ์ œ ์‹œ ์ธ๋ฑ์Šค ๊ฐฑ์‹  ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ถ”๊ฐ€ ์ €์žฅ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.
โ‰๏ธ DBMS๋Š” Index๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • B+Tree๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ LinkedList๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ˆœ์ฐจ ์ ‘๊ทผ์— ์œ ๋ฆฌํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  • ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ์‹œ๊ฐ„๋ณต์žก๋„ O(1)์„ ๊ฐ€์ง€์ง€๋งŒ, ๋ฒ”์œ„ ๊ฒ€์ƒ‰์—๋Š” ๋ถ€์ ํ•ฉํ•˜๋‹ค.

โ‰๏ธ ์–ด๋–ค ๊ฒฝ์šฐ์— ํ•ด์‹œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•œ์ง€์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ๋“ฑ๊ฐ€ ๊ฒ€์ƒ‰์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์–ด, ๋ถ€๋“ฑํ˜ธ(<, >) ์กฐ๊ฑด์ด ์—†์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•˜๋‹ค.

์ •๊ทœํ™” ๋ฐ ์—ญ์ •๊ทœํ™”

์ •๊ทœํ™”์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์ด์ƒ ํ˜„์ƒ ์˜ˆ๋ฐฉ, ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

  • 1NF๋Š” ๊ฐ ์ปฌ๋Ÿผ์ด ์›์ž๊ฐ’์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

  • 2NF๋Š” ๊ธฐ๋ณธ ํ‚ค์™€ ๋ถ€๋ถ„ ์ข…์†์„ ์ œ๊ฑฐํ•œ๋‹ค.

  • 3NF๋Š” ์ดํ–‰์  ์ข…์†์„ ์ œ๊ฑฐํ•œ๋‹ค.

  • BCNF๋Š” ๋ชจ๋“  ๊ฒฐ์ •์ž๊ฐ€ ํ›„๋ณด ํ‚ค๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.

โ‰๏ธ ์ •๊ทœํ™”์—๋Š” ์–ด๋–ค ์žฅ๋‹จ์ ์ด ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ์ •๊ทœํ™”๋Š” ๋ฐ์ดํ„ฐ ์ค‘๋ณต ์ œ๊ฑฐ, ์ด์ƒ ํ˜„์ƒ ์˜ˆ๋ฐฉ, ๊ทธ๋ฆฌ๊ณ  ์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ดํ•˜๋‹ค.
  • ๋‹ค๋งŒ, ์ง€๋‚˜์นœ ๋ถ„ํ•ด๋กœ JOIN ์—ฐ์‚ฐ์ด ์ฆ๊ฐ€ํ•˜๋ฉด์„œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

โ‰๏ธ ์—ญ์ •๊ทœํ™”๋ฅผ ํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ์ฝ๊ธฐ ์ž‘์—…์ด ๋งŽ์€ ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด ์ •๊ทœํ™”๋œ ๊ตฌ์กฐ์˜ JOIN ๋น„์šฉ์„ ์ค„์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

โ‰๏ธ ์ •๊ทœํ™”์™€ ์—ญ์ •๊ทœํ™”๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์š”์†Œ๋Š” ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ, ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ๋น„์œจ, ์‹œ์Šคํ…œ ์„ฑ๋Šฅ, ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋นˆ๋„ ๋“ฑ์„ ์ข…ํ•ฉ์ ์œผ๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

์ด์ƒ ํ˜„์ƒ

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

SQL Injection

SQL Injection์ด ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ๊ณต๊ฒฉ์ž๊ฐ€ ์•…์˜๋กœ SQL ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์ด๋‹ค.
โ‰๏ธ SQL Injection์„ ๋ฐฉ์–ด ๋ฐ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ์œ ํšจํ•˜์ง€ ์•Š์€ ์ž…๋ ฅ์€ ์ฐจ๋‹จํ•œ๋‹ค.
  • ์ฟผ๋ฆฌ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌ์‹œํ‚จ๋‹ค.
  • ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ฟผ๋ฆฌ ํ˜•์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž ๊ถŒํ•œ์„ ์ตœ์†Œํ™”ํ•œ๋‹ค.

โ‰๏ธ ์‹ค๋ฌด์—์„œ SQL Injection ์˜ˆ๋ฐฉ์„ ์œ„ํ•ด ์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ๋Œ€๋ถ€๋ถ„์˜ ํ˜„๋Œ€ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” Prepared Statement๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜๋ฉฐ, ์ถ”๊ฐ€๋กœ ORM์„ ํ™œ์šฉํ•˜๋ฉด ๋ณด์•ˆ์„ฑ์ด ๊ฐ•ํ™”๋œ๋‹ค.

ํŠธ๋žœ์žญ์…˜, Transaction

ํŠธ๋žœ์žญ์…˜์ด๋ž€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—…์˜ ๋‹จ์œ„๋กœ, ํ•˜๋‚˜์˜ ์ž‘์—…์„ ๊ตฌ์„ฑํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์—ฐ์‚ฐ์ด ๋ชจ๋‘ ์„ฑ๊ณตํ•ด์•ผ ํ•˜๊ณ , ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ์ „์ฒด๋ฅผ ๋กค๋ฐฑํ•ด์•ผ ํ•œ๋‹ค.
    • ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ ์œ ์ง€, ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ, ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์ž‘์—…ํ•  ๋•Œ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค.
โ‰๏ธ ํŠธ๋žœ์žญ์…˜์˜ ACID ํŠน์„ฑ์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ์›์ž์„ฑ(Atomicity): ํŠธ๋žœ์žญ์…˜ ๋‚ด ์—ฐ์‚ฐ์ด ๋ชจ๋‘ ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜, ๋ชจ๋‘ ์‹คํŒจํ•ด์•ผ ํ•œ๋‹ค.
  • ์ผ๊ด€์„ฑ(Consistency): ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋œ ํ›„์—๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ผ๊ด€๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.
  • ๊ฒฉ๋ฆฌ์„ฑ(Isolation): ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ํŠธ๋žœ์žญ์…˜์ด ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•œ๋‹ค.
  • ์ง€์†์„ฑ(Durability): ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋œ ํ›„์—๋Š” ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์œ ์ง€๋œ๋‹ค.

โ‰๏ธ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์— ๋”ฐ๋ฅธ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(Isolation Level)์— ๋”ฐ๋ผ ๋™์‹œ์„ฑ(์„ฑ๋Šฅ)๊ณผ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์ด ๋‹ฌ๋ผ์ง„๋‹ค.
    • Read Uncommitted: ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ๋ฅผ ํ—ˆ์šฉํ•˜์ง€๋งŒ, Dirty Read๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Read Committed: ์ปค๋ฐ‹๋œ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ๊ธฐ๋ฅผ ํ—ˆ์šฉํ•˜์ง€๋งŒ, Non-repeatable Read๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Repeatable Read: ๊ฐ™์€ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์œผ๋ฉด ๊ฐ’์ด ์œ ์ง€๋˜์ง€๋งŒ, Phantom Read๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Serializable: ๊ฐ€์žฅ ๋†’์€ ์ˆ˜์ค€์˜ ๊ฒฉ๋ฆฌ ๋ ˆ๋ฒจ๋กœ ํŠธ๋žœ์žญ์…˜์„ ์ง๋ ฌํ™”ํ•˜์—ฌ ์‹คํ–‰ํ•˜์ง€๋งŒ, ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ๋†’์„์ˆ˜๋ก ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์€ ๊ฐ•ํ•˜์ง€๋งŒ, ๋™์‹œ์„ฑ(์„ฑ๋Šฅ)์€ ๋‚ฎ์•„์ง„๋‹ค.


DB Lock

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค Lock์ด๋ž€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ํŠธ๋žœ์žญ์…˜ ๊ฐ„ ์ˆœ์ฐจ์  ์ฒ˜๋ฆฌ๋ฅผ ๋ณด์žฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
  • ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ, ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
โ‰๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฝ์˜ ์ข…๋ฅ˜์—๋Š” ๋ฌด์—‡์ด ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ๊ณต์œ  ๋ฝ(Shared Lock, S Lock): ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๊ณ , ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐฐํƒ€ ๋ฝ(Exclusive Lock, X Lock): ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์„ค์ •ํ•˜๋ฉฐ, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ์ ‘๊ทผ์„ ์ฐจ๋‹จํ•œ๋‹ค.

โ‰๏ธ ๋ฝ ๊ฒฝํ•ฉ์ด ์‹ฌํ•  ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ํƒ€์ž„์•„์›ƒ ์„ค์ •์„ ํ†ตํ•ด ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋ฝ์„ ํ•ด์ œํ•˜์—ฌ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.
  • ๋ฝ ๋ถ„ํ• ์„ ํ†ตํ•ด ํ…Œ์ด๋ธ” ๋‹จ์œ„๊ฐ€ ์•„๋‹Œ, ํ–‰ ๋˜๋Š” ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ๋ฝ์„ ์ ์šฉํ•˜์—ฌ ๋™์‹œ์„ฑ์„ ๋†’์ธ๋‹ค.
  • ๋ฝ ์ˆœ์„œ ์ผ๊ด€์„ฑ ์œ ์ง€๋ฅผ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜์ด ๋ฝ์„ ํš๋“ํ•˜๋Š” ์ˆœ์„œ๋ฅผ ๊ณ ์ •ํ•˜์—ฌ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.

ElasticSearch์™€ LIKE ๊ฒ€์ƒ‰์˜ ์ฐจ์ด์ 

ElasticSearch์™€ RDBMS์˜ LIKE ๊ฒ€์ƒ‰์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ElasticSearch๋Š” ์—ญ์ƒ‰์ธ(Inverted Index)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ž์—ฐ์–ด ๊ฒ€์ƒ‰, ์œ ์‚ฌ์–ด ๊ฒ€์ƒ‰, ์ •๋ ฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • RDBMS์˜ LIKE ์—ฐ์‚ฐ์€ ๋‹จ์ˆœ ํ…์ŠคํŠธ ๋งค์นญ์œผ๋กœ, ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
โ‰๏ธ ElasticSearch์˜ ์žฅ์ ๊ณผ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ElasticSearch์€ ๋น ๋ฅธ ๊ฒ€์ƒ‰ ์†๋„์™€ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ์—ฐํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
  • ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ์—”์ง„, ๋กœ๊ทธ ๋ถ„์„ ์‹œ์Šคํ…œ, ๋น…๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ๋“ฑ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

์˜ตํ‹ฐ๋งˆ์ด์ €(Optimizer)

์˜ตํ‹ฐ๋งˆ์ด์ €(Optimizer)๋ž€ ๋ฌด์—‡์ธ์ง€ ๋งํ•ด์ฃผ์„ธ์š”.
  • SQL ์ฟผ๋ฆฌ์˜ ์—ฌ๋Ÿฌ ์‹คํ–‰ ๊ณ„ํš ์ค‘ ์ตœ์ ์˜ ๊ฒฝ๋กœ๋ฅผ ๊ฒฐ์ •ํ•˜์—ฌ, ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” DBMS์˜ ํ•ต์‹ฌ ์—”์ง„์ด๋‹ค.
  • ํ†ต๊ณ„ ์ •๋ณด์™€ ๋น„์šฉ ๊ธฐ๋ฐ˜ ๋ถ„์„์„ ํ†ตํ•ด ์ตœ์ ์˜ ์‹คํ–‰ ๊ณ„ํš์„ ์„ ํƒํ•œ๋‹ค.
  • ๋น„์šฉ ๊ธฐ๋ฐ˜ ์˜ตํ‹ฐ๋งˆ์ด์ €(CBO)์™€ ๊ทœ์น™ ๊ธฐ๋ฐ˜ ์˜ตํ‹ฐ๋งˆ์ด์ €(RBO)๊ฐ€ ์žˆ๋‹ค.
โ‰๏ธ ์˜ตํ‹ฐ๋งˆ์ง€์–ด๊ฐ€ ์ž˜๋ชป๋œ ์‹คํ–‰ ๊ณ„ํš์„ ์„ ํƒํ•  ๊ฒฝ์šฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ํ†ต๊ณ„ ์ •๋ณด ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด ์ตœ์‹  ๋ฐ์ดํ„ฐ ๋ถ„ํฌ๋ฅผ ๋ฐ˜์˜ํ•˜๋„๋ก ํ•œ๋‹ค.
  • ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ๊ณ„ํš์„ ์ˆ˜๋™์œผ๋กœ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ธ๋ฑ์Šค๊ฐ€ ๋น„ํšจ์œจ์ ์ด๋ผ๋ฉด ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ์„ ํ†ตํ•ด ์ธ๋ฑ์Šค ์žฌ์„ค๊ณ„๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠœ๋‹

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠœ๋‹์ด ๋ฌด์—‡์ธ์ง€ ๋งํ•ด์ฃผ์„ธ์š”.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ณผ์ •์„ 3๋‹จ๊ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.
    • DB ์„ค๊ณ„ ํŠœ๋‹์€ ์ธ๋ฑ์Šค, ํŒŒํ‹ฐ์…”๋‹, ์ •๊ทœํ™”๋ฅผ ํ†ตํ•ด ์ตœ์ ํ™”ํ•œ๋‹ค.
    • DBMS ํŠœ๋‹์€ ์บ์‹œ, ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ํ†ตํ•ด ์ตœ์ ํ™”ํ•œ๋‹ค.
    • SQL ํŠœ๋‹์€ ์‹คํ–‰ ๊ณ„ํš ๋ถ„์„, ์กฐ์ธ ๋ฐฉ์‹์„ ํ†ตํ•ด ์ตœ์ ํ™”ํ•œ๋‹ค.
โ‰๏ธ ๊ฐ€์žฅ ๋จผ์ € ์ ๊ฒ€ํ•ด์•ผ ํ•˜๋Š” ํŠœ๋‹ ์š”์†Œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋งํ•ด์ฃผ์„ธ์š”.
  • ์‹คํ–‰ ๊ณ„ํš ํ™•์ธ, ์ธ๋ฑ์Šค ์‚ฌ์šฉ ์—ฌ๋ถ€ ํ™•์ธ, ๊ทธ๋ฆฌ๊ณ  ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•˜์—ฌ ์‘๋‹ต ์‹œ๊ฐ„์ด๋‚˜ ๋ณ‘๋ชฉ ๊ตฌ๊ฐ„์„ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

INNER JOIN๊ณผ OUTER JOIN์˜ ์ฐจ์ด์ 

INNER JOIN๊ณผ OUTER JOIN์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • INNER JOIN์€ ๋‘ ํ…Œ์ด๋ธ”์—์„œ ์กฐ์ธ ์กฐ๊ฑด์— ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • OUTER JOIN์€ ํ•œ์ชฝ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์–ด๋„ NULL ๊ฐ’์„ ํฌํ•จํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
โ‰๏ธ ์–ด๋–ค JOIN ๋ฐฉ์‹์ด ์„ฑ๋Šฅ์— ๋” ์œ ๋ฆฌํ•œ์ง€ ๋งํ•ด์ฃผ์„ธ์š”.
  • INNER JOIN์€ ๋ถˆํ•„์š”ํ•œ NULL ๊ฐ’์ด ํฌํ•จ๋˜์ง€ ์•Š์•„ ์„ฑ๋Šฅ์ ์œผ๋กœ ์œ ๋ฆฌํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
  • ๋ฐ˜๋ฉด, OUTER JOIN์€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

DELETE vs TRUNCATE vs DROP

DELETE, TRUNCATE, DROP์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • DELETE๋Š” ํŠน์ • ํ–‰์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ROLLBACK์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • TRUNCATE๋Š” ์ „์ฒด ํ–‰์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ROLLBACK์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • DROP์€ ํ…Œ์ด๋ธ” ์ž์ฒด๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
โ‰๏ธ DELETE์™€ TRUNCATE์˜ ์ฃผ์š” ์ฐจ์ด์ ์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • DELETE๋Š” ๊ฐœ๋ณ„ ํ–‰์„ ์‚ญ์ œํ•˜๊ณ , ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•˜๋ฏ€๋กœ ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.
  • ๋ฐ˜๋ฉด, TRUNCATE๋Š” ์ „์ฒด ๋ฐ์ดํ„ฐ ์‚ญ์ œ ํ›„ ํ…Œ์ด๋ธ”์„ ์žฌ์ƒ์„ฑํ•˜๋ฏ€๋กœ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

HAVING๊ณผ WHERE์˜ ์ฐจ์ด์ 

HAVING๊ณผ WHERE์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • HAVING์€ ๊ทธ๋ฃนํ™” ํ›„ ์ง‘๊ณ„ ๊ฒฐ๊ณผ์— ์กฐ๊ฑด์„ ์ ์šฉํ•œ๋‹ค.
  • WHERE์€ ๊ทธ๋ฃนํ™” ์ „ ๊ฐœ๋ณ„ ํ–‰์— ์กฐ๊ฑด์„ ์ ์šฉํ•œ๋‹ค.