๐Ÿ“Œ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ์ธ๋ฑ์Šค

์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

๋งˆ์น˜ ์ฑ…์˜ ์ƒ‰์ธ์ฒ˜๋Ÿผ, ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„์ฃผ๋Š” ์—ญํ• !

๊ทธ๋Ÿฌ๋‚˜ ์ธ๋ฑ์Šค๊ฐ€ ๋งŽ์•„์ง€๋ฉด INSERT, UPDATE, DELETE ์‹œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒ โ†’ ๊ด€๋ฆฌ ์ฃผ์˜ ํ•„์š”! ๐Ÿšจ


๐Ÿ“š ์ธ๋ฑ์Šค์˜ ๊ฐœ๋…๊ณผ ์ข…๋ฅ˜

์ธ๋ฑ์Šค ์ข…๋ฅ˜ ์„ค๋ช… ํŠน์ง•
PRIMARY ์ธ๋ฑ์Šค ๊ธฐ๋ณธ ํ‚ค(Primary Key)์— ์ž๋™ ์ƒ์„ฑ๋˜๋Š” ์ธ๋ฑ์Šค NULL ํ—ˆ์šฉ X, ํ…Œ์ด๋ธ” ๋‚ด ์œ ์ผ ์‹๋ณ„์ž, ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋กœ ๋™์ž‘ (MySQL InnoDB ๊ธฐ์ค€)
UNIQUE ์ธ๋ฑ์Šค ์ค‘๋ณต ์—†๋Š” ๊ณ ์œ ๊ฐ’์„ ๊ฐ•์ œ โ†’ ์ค‘๋ณต ๋ฐ์ดํ„ฐ ํ—ˆ์šฉ X ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑ ๊ฐ€๋Šฅ, NULL ํ—ˆ์šฉ ๊ฐ€๋Šฅ (๋‹จ, NULL ์ค‘๋ณต์€ ํ—ˆ์šฉ)
FULLTEXT ์ธ๋ฑ์Šค ๋Œ€์šฉ๋Ÿ‰ ํ…์ŠคํŠธ ํ•„๋“œ์—์„œ ๋‹จ์–ด, ๋ฌธ์žฅ ๊ฒ€์ƒ‰ ์ตœ์ ํ™” CHAR, VARCHAR, TEXT ์ปฌ๋Ÿผ์—์„œ ์‚ฌ์šฉ, ์ž์—ฐ์–ด ๊ฒ€์ƒ‰ ์ง€์›
SPATIAL ์ธ๋ฑ์Šค ๊ณต๊ฐ„ ๋ฐ์ดํ„ฐ (์œ„์น˜, ์ง€๋ฆฌ์ •๋ณด ๋“ฑ) ๊ฒ€์ƒ‰ ์ตœ์ ํ™” GIS ๋ฐ์ดํ„ฐ(GEOMETRY, POINT, POLYGON) ๋“ฑ ๊ณต๊ฐ„ ์—ฐ์‚ฐ์—์„œ ๋น ๋ฅธ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ

๐Ÿ” ํด๋Ÿฌ์Šคํ„ฐ๋“œ & ๋„Œํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค

๊ตฌ๋ถ„ ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค (Clustered) ๋„Œํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค (Non-Clustered)
์ •์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ธ๋ฑ์Šค ์ˆœ์„œ์— ๋งž๊ฒŒ ์‹ค์ œ ์ €์žฅ ์ธ๋ฑ์Šค์™€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ„๋„ ์ €์žฅ, ํฌ์ธํ„ฐ๋กœ ์—ฐ๊ฒฐ
ํ…Œ์ด๋ธ”๋‹น ์ƒ์„ฑ ์ˆ˜ 1๊ฐœ๋งŒ ๊ฐ€๋Šฅ (๊ธฐ๋ณธ ํ‚ค์™€ ๋™์ผ) ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€๋Šฅ
์žฅ์  ๋ฐ์ดํ„ฐ ์ •๋ ฌ & ์กฐํšŒ ๋น ๋ฆ„, ๋ฒ”์œ„ ๊ฒ€์ƒ‰ ํšจ์œจ์  ๋‹ค์–‘ํ•œ ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค ์ƒ์„ฑ ๊ฐ€๋Šฅ, ๋ฐ์ดํ„ฐ ์ˆ˜์ • ์‹œ ์œ ์—ฐ
๋‹จ์  ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€/์‚ญ์ œ ์‹œ ๋ฌผ๋ฆฌ์  ์žฌ์ •๋ ฌ ํ•„์š” โ†’ ๋ถ€ํ•˜ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์‹œ ์ถ”๊ฐ€๋กœ ๋ฐ์ดํ„ฐ ์œ„์น˜ ํƒ์ƒ‰ ํ•„์š” โ†’ ๋А๋ฆด ์ˆ˜ ์žˆ์Œ
MariaDB์—์„œ ์ ์šฉ ์˜ˆ์‹œ PRIMARY KEY = ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค (InnoDB ์—”์ง„ ๊ธฐ์ค€) UNIQUE, ์ผ๋ฐ˜ ์ธ๋ฑ์Šค ๋“ฑ ๋Œ€๋ถ€๋ถ„ ๋„Œํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค

๐Ÿ› ๏ธ ๊ฐ ์ธ๋ฑ์Šค ์œ ํ˜•๋ณ„ ์‚ฌ์šฉ ์˜ˆ์‹œ

1๏ธโƒฃ PRIMARY ์ธ๋ฑ์Šค

CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(50)
);

๊ธฐ๋ณธ ํ‚ค๋กœ ์ž๋™ ์ธ๋ฑ์Šค ์ƒ์„ฑ, ๊ณ ์œ  ์‹๋ณ„์ž ๋ณด์žฅ!


2๏ธโƒฃ UNIQUE ์ธ๋ฑ์Šค

CREATE UNIQUE INDEX idx_email ON student(email);

์ค‘๋ณต ์—†๋Š” ์ด๋ฉ”์ผ ๋ณด์žฅ, NULL์€ ์—ฌ๋Ÿฌ ๋ฒˆ ํ—ˆ์šฉ


3๏ธโƒฃ FULLTEXT ์ธ๋ฑ์Šค

CREATE FULLTEXT INDEX idx_content ON articles(content);

๋Œ€๋Ÿ‰ ํ…์ŠคํŠธ(content ์ปฌ๋Ÿผ)์—์„œ ๋น ๋ฅธ ๋‹จ์–ด ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ


4๏ธโƒฃ SPATIAL ์ธ๋ฑ์Šค

CREATE SPATIAL INDEX idx_location ON places(location);

์œ„์น˜ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ์ตœ์ ํ™”, GIS ์ฟผ๋ฆฌ์—์„œ ์„ฑ๋Šฅ UP!


โš ๏ธ ์ธ๋ฑ์Šค ์ฃผ์˜์‚ฌํ•ญ

๊ณ ๋ ค์‚ฌํ•ญ ์„ค๋ช…
๊ณผ๋„ํ•œ ์ธ๋ฑ์Šค ์ƒ์„ฑ X ์ธ๋ฑ์Šค๊ฐ€ ๋งŽ์œผ๋ฉด INSERT, UPDATE, DELETE ์„ฑ๋Šฅ ์ €ํ•˜
๋ถˆํ•„์š”ํ•œ ๋„“์€ ์ธ๋ฑ์Šค ์ž์ œ ์ž์ฃผ ๊ฒ€์ƒ‰, ์ •๋ ฌ, ์กฐ๊ฑด์ ˆ์— ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ ์œ„์ฃผ๋กœ ์ธ๋ฑ์Šค ์ƒ์„ฑ
์นด๋””๋„๋ฆฌํ‹ฐ(Cardinality) ๊ณ ๋ ค ์ปฌ๋Ÿผ์˜ ๊ณ ์œ ๊ฐ’ ๋น„์œจ์ด ๋†’์„์ˆ˜๋ก ์ธ๋ฑ์Šค ํšจ์œจ์  (์˜ˆ: ์ฃผ๋ฏผ๋ฒˆํ˜ธ, ID ๋“ฑ)
์ธ๋ฑ์Šค ํฌ๊ธฐ ๊ด€๋ฆฌ ์ธ๋ฑ์Šค๋„ ๋””์Šคํฌ ๊ณต๊ฐ„ ์ฐจ์ง€ โ†’ ๋ถˆํ•„์š”ํ•œ ์ธ๋ฑ์Šค๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ์ ๊ฒ€ & ์‚ญ์ œ

๐Ÿ“Œ ์ •๋ฆฌ

๐Ÿ“Œ ์ธ๋ฑ์Šค๋ž€? โ†’ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ํ–ฅ์ƒ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ, ์ฑ…์˜ ์ƒ‰์ธ์ฒ˜๋Ÿผ ๋น ๋ฅธ ํƒ์ƒ‰ ๊ฐ€๋Šฅ
๐Ÿ“Œ ์ข…๋ฅ˜ โ†’ PRIMARY, UNIQUE, FULLTEXT, SPATIAL
๐Ÿ“Œ ํด๋Ÿฌ์Šคํ„ฐ๋“œ vs ๋„Œํด๋Ÿฌ์Šคํ„ฐ๋“œ โ†’ ์ €์žฅ ๋ฐฉ์‹ ์ฐจ์ด, ์„ฑ๋Šฅ ์˜ํ–ฅ
๐Ÿ“Œ ์ฃผ์˜ โ†’ ๊ณผ๋„ํ•œ ์ธ๋ฑ์Šค ์‚ฌ์šฉ ์ง€์–‘, DML ์ž‘์—… ์‹œ ์˜ค๋ฒ„ํ—ค๋“œ ๊ณ ๋ ค

๐Ÿ“Œ ์ธ๋ฑ์Šค๋ž€? - ์ฑ…์˜ ๋ชฉ์ฐจ(์ƒ‰์ธ)์™€ ๊ฐ™๋‹ค!

โ†’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€!

ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š๊ณ  ์ธ๋ฑ์Šค๋ผ๋Š” ๋ชฉ์ฐจ๋ฅผ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„๋ƒ…๋‹ˆ๋‹ค.


๐ŸŸข ์ธ๋ฑ์Šค์˜ ํšจ๊ณผ

ํšจ๊ณผ ๋น„์œ  ์„ค๋ช…
1. ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ์†๋„ ํ–ฅ์ƒ ์ฑ…์˜ ์ƒ‰์ธ ์ฑ…์˜ ์ƒ‰์ธ์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ๋ฐ”๋กœ ์ฐพ๋“ฏ, WHERE ์กฐ๊ฑด์˜ ์—ด์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ๋ฉด ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ ์ฐพ๊ธฐ ๊ฐ€๋Šฅ
2. ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ ์‚ฌ์ „ ์‚ฌ์ „์ฒ˜๋Ÿผ ์ด๋ฏธ ์ •๋ ฌ๋œ ์ƒํƒœ โ†’ ORDER BY ์‹œ ์ •๋ ฌ ์ž‘์—… ๋ถ€๋‹ด์ด ์ ์Œ
3. ๋ฒ”์œ„ ๊ฒ€์ƒ‰ ์ตœ์ ํ™” ์ „ํ™”๋ฒˆํ˜ธ๋ถ€ ์ด๋ฆ„ A~D๊นŒ์ง€๋งŒ ์ฐพ์„ ๋•Œ, ์ „ํ™”๋ฒˆํ˜ธ๋ถ€์ฒ˜๋Ÿผ ๋ฒ”์œ„ ๊ฒ€์ƒ‰์ด ๋น ๋ฆ„ (์˜ˆ: WHERE age BETWEEN 20 AND 30)

๐Ÿ› ๏ธ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋ฒ•

์ตœ์ ํ™” ๋ฐฉ๋ฒ• ๋น„์œ  ์„ค๋ช…
1๏ธโƒฃ ์ ์ ˆํ•œ ์ธ๋ฑ์Šค ์„ค๊ณ„ ๊ฐ€๊ฒŒ์—์„œ ์ž์ฃผ ํŒ”๋ฆฌ๋Š” ์ƒํ’ˆ ์ง„์—ด๋Œ€์— ๋ฐฐ์น˜ ์ž์ฃผ ์“ฐ์ด๋Š” ์ปฌ๋Ÿผ(๊ฒ€์ƒ‰, JOIN, ์ •๋ ฌ ์ปฌ๋Ÿผ)์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์–ด์•ผ ํšจ๊ณผ์ ! ๋ถˆํ•„์š”ํ•œ ์ธ๋ฑ์Šค = ๊ณต๊ฐ„ ๋‚ญ๋น„
2๏ธโƒฃ ์ธ๋ฑ์Šค ํ†ต๊ณ„ ์œ ์ง€ ๋„์„œ๊ด€ ์ฑ… ๋ฐฐ์น˜๋„ ์ตœ์‹ ํ™” ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์ธ๋ฑ์Šค ํ†ต๊ณ„ ์ •๋ณด๋„ ์—…๋ฐ์ดํŠธ! โ†’ DB๊ฐ€ ๋” ์ข‹์€ ์‹คํ–‰ ๊ณ„ํš ์„ธ์›€
3๏ธโƒฃ ์ธ๋ฑ์Šค ๊ฐฑ์‹  ๋น„์šฉ ๊ณ ๋ ค ์ฑ…๋งˆ๋‹ค ์ƒ‰์ธ ๋ถ™์ด๊ธฐ = ๊ด€๋ฆฌ ๋น„์šฉ INSERT, UPDATE, DELETE ์‹œ ์ธ๋ฑ์Šค๋„ ๊ฐ™์ด ์ˆ˜์ • โ†’ ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ์˜คํžˆ๋ ค ๋А๋ ค์ง. ๊ผญ ํ•„์š”ํ•œ ๊ฒƒ๋งŒ!
4๏ธโƒฃ ์ฟผ๋ฆฌ ์ตœ์ ํ™” (๋ฆฌํŒฉํ† ๋ง) ๊ฐ€๊ฒŒ์—์„œ ์†๋‹˜ ๋™์„  ์งง๊ฒŒ ์ •๋ฆฌ ๋ถˆํ•„์š”ํ•œ JOIN, WHERE ์กฐ๊ฑด ์ œ๊ฑฐ & ์ธ๋ฑ์Šค ์ž˜ ํƒ€๋„๋ก ์ฟผ๋ฆฌ ์ž‘์„ฑ! โ†’ ์‹คํ–‰ ๊ณ„ํš(EXPLAIN)์œผ๋กœ ํ™•์ธ ๊ฐ€๋Šฅ

๐Ÿ”ฅ ๋น„์œ ๋กœ ์‰ฝ๊ฒŒ ํ•ต์‹ฌ ์ •๋ฆฌ

๊ฐœ๋… ๋น„์œ  ์š”์ 
์ธ๋ฑ์Šค ์ฑ…์˜ ์ƒ‰์ธ, ๋„์„œ๊ด€์˜ ์ฑ… ๋ฐฐ์น˜๋„ ๋น ๋ฅด๊ฒŒ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์œ„์น˜ ์ฐพ๊ธฐ
๋„ˆ๋ฌด ๋งŽ์€ ์ธ๋ฑ์Šค ๋ชจ๋“  ํŽ˜์ด์ง€์— ํฌ์ŠคํŠธ์ž‡ ๋ถ™์—ฌ๋†“๊ธฐ ์˜คํžˆ๋ ค ๊ด€๋ฆฌ ๋ถ€๋‹ด, ์„ฑ๋Šฅ ์ €ํ•˜
์ ์ ˆํ•œ ์ธ๋ฑ์Šค ์„ค๊ณ„ ๊ฐ€๊ฒŒ์—์„œ ์ธ๊ธฐ ์ƒํ’ˆ ์•ž์— ๋ฐฐ์น˜ ์ž์ฃผ ์“ฐ๋Š” ์—ด์—๋งŒ ์ธ๋ฑ์Šค ๊ฑธ๊ธฐ
๊ฐฑ์‹  ๋น„์šฉ ์ฑ… ๋‚ด์šฉ ๋ฐ”๊ฟ€ ๋•Œ๋งˆ๋‹ค ์ƒ‰์ธ ๋‹ค์‹œ ๋งŒ๋“ค๊ธฐ DML ์ž‘์—… ๋งŽ์œผ๋ฉด ์ธ๋ฑ์Šค ๋ถ€๋‹ด ์ปค์ง
์ฟผ๋ฆฌ ์ตœ์ ํ™” ๋™์„  ์ค„์ด๊ธฐ, ๋ฉ”๋‰ด ์ •๋ฆฌ ์ฟผ๋ฆฌ ์•ˆ์—์„œ ์ธ๋ฑ์Šค ์ž˜ ํ™œ์šฉํ•˜๋„๋ก ์ž‘์„ฑ

๐Ÿ” ์‹ค๋ฌด ์ ์šฉ ๊ฟ€ํŒ (๋น„์œ  ํฌํ•จ)

๊ฟ€ํŒ ๋น„์œ  ์„ค๋ช…
1๏ธโƒฃ WHERE, JOIN, ORDER BY์— ์ž์ฃผ ์“ฐ๋Š” ์ปฌ๋Ÿผ = ์ธ๋ฑ์Šค ํ›„๋ณด ๐Ÿช ๋งˆํŠธ์—์„œ ์‚ฌ๋žŒ๋“ค์ด ์ž์ฃผ ์ฐพ๋Š” ๋ฌผ๊ฑด์€ ์ž…๊ตฌ ๊ทผ์ฒ˜์— ๋ฐฐ์น˜! ์‚ฌ๋žŒ๋“ค์ด ์ž์ฃผ ์ฐพ๋Š” ์ƒํ’ˆ(์ž์ฃผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์ปฌ๋Ÿผ)์€ ์ž…๊ตฌ(์ธ๋ฑ์Šค) ๊ฐ€๊นŒ์ด์— ๋‘์–ด์•ผ ์ฐพ๊ธฐ ๋น ๋ฆ„! โ†’ WHERE, JOIN, ORDER BY์— ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ์ปฌ๋Ÿผ์€ ๊ผญ ์ธ๋ฑ์Šค!
2๏ธโƒฃ EXPLAIN์œผ๋กœ ์ธ๋ฑ์Šค ์‚ฌ์šฉ ์—ฌ๋ถ€, Full Scan ์—ฌ๋ถ€ ๊ผญ ํ™•์ธ ๐Ÿ” ์ง€๋„ ์•ฑ์—์„œ ๊ฒฝ๋กœ ๋ฏธ๋ฆฌ ํ™•์ธํ•˜๋Š” ๊ฒƒ! ๋ชฉ์ ์ง€(์ฟผ๋ฆฌ ๊ฒฐ๊ณผ) ๊ฐ€๊ธฐ ์ „์— ๋น ๋ฅธ ๊ธธ(์ธ๋ฑ์Šค ํƒ€๋Š”์ง€) ํ™•์ธํ•˜๋Š” ๊ฒƒ! EXPLAIN์œผ๋กœ ์‹คํ–‰ ๊ณ„ํš ๋ณด๋ฉด, ์ „์ฒด ํ…Œ์ด๋ธ” ๋‹ค ํ›‘๋Š” Full Scan์ธ์ง€ ํ™•์ธ ๊ฐ€๋Šฅ! ๋ถˆํ•„์š”ํ•œ Full Scan โ†’ ๐Ÿšซ
3๏ธโƒฃ DML ๋นˆ๋ฒˆํ•œ ํ…Œ์ด๋ธ”์€ ์ธ๋ฑ์Šค ์ตœ์†Œํ™” (๋ณ€๊ฒฝ ๋น„์šฉโ†‘) ๐Ÿ“ฆ ์ž์ฃผ ์ •๋ฆฌํ•˜๋Š” ์ฐฝ๊ณ ์— ํฌ์ŠคํŠธ์ž‡ ๋„ˆ๋ฌด ๋งŽ์ด ๋ถ™์ด๋ฉด ์ •๋ฆฌํ•˜๊ธฐ ๋ถˆํŽธ! INSERT, UPDATE, DELETE ์ž์ฃผ ํ•˜๋Š” ํ…Œ์ด๋ธ”์€ ์ธ๋ฑ์Šค ๋งŽ์œผ๋ฉด ๋งค๋ฒˆ ์ธ๋ฑ์Šค๋„ ๊ฐ™์ด ๊ฐฑ์‹ ํ•ด์•ผ ํ•จ โ†’ ๋А๋ ค์ง! ๊ผญ ํ•„์š”ํ•œ ์ธ๋ฑ์Šค๋งŒ ์ตœ์†Œํ™”
4๏ธโƒฃ ๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค๋Š” ์ปฌ๋Ÿผ ์ˆœ์„œ ์ค‘์š” (๊ฐ€์žฅ ์ž์ฃผ ์กฐ๊ฑด ๊ฑฐ๋Š” ์—ด ๋จผ์ €!) ๐Ÿ™๏ธ ๋„๋กœ ํ‘œ์ง€ํŒ: ๊ณ ์†๋„๋กœ์—์„œ ๋จผ์ € ๋‚˜์˜ค๋Š” ๋ฐฉํ–ฅ ํ‘œ์‹œ! ์˜ˆ๋ฅผ ๋“ค์–ด (A, B) ์ˆœ์„œ๋กœ ๋งŒ๋“  ์ธ๋ฑ์Šค๋ฉด, A ๊ธฐ์ค€์œผ๋กœ ๊ฒ€์ƒ‰ํ•ด์•ผ ์ธ๋ฑ์Šค ์ œ๋Œ€๋กœ ์‚ฌ์šฉ๋จ. B ๋จผ์ € ์“ฐ๋ฉด ์ธ๋ฑ์Šค ๋ฌด์šฉ์ง€๋ฌผ! โ†’ ๊ฐ€์žฅ ๋งŽ์ด ์กฐ๊ฑด ๊ฑฐ๋Š” ์ปฌ๋Ÿผ์„ ์•ž์— ๋ฐฐ์น˜!

๐ŸŽฏ ํ•œ ์ค„ ํ•ต์‹ฌ ์ •๋ฆฌ

๊ฟ€ํŒ ๋ฒˆํ˜ธ ํ•ต์‹ฌ
1๏ธโƒฃ ์ž์ฃผ ๊ฒ€์ƒ‰, ์ •๋ ฌ, JOIN์— ์“ฐ์ด๋Š” ์ปฌ๋Ÿผ โ†’ ๋ฐ˜๋“œ์‹œ ์ธ๋ฑ์Šค ํ›„๋ณด
2๏ธโƒฃ EXPLAIN์œผ๋กœ ํ•ญ์ƒ ์‹คํ–‰ ๊ณ„ํš ํ™•์ธ โ†’ Full Scan ๋‚˜์˜ค๋ฉด ๊ฐœ์„  ํ•„์š”!
3๏ธโƒฃ INSERT, UPDATE ๋งŽ์€ ํ…Œ์ด๋ธ”์€ ์ธ๋ฑ์Šค ์ตœ์†Œํ™” โ†’ DML ๋ถ€๋‹ด ์ค„์ด๊ธฐ
4๏ธโƒฃ ๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค โ†’ ๊ฐ€์žฅ ์ž์ฃผ ํ•„ํ„ฐ ๊ฑฐ๋Š” ์ปฌ๋Ÿผ๋ถ€ํ„ฐ ๋จผ์ €!

๐Ÿ“„ ๊ฒฐ๋ก 


๐Ÿ” ์‹คํ–‰ ๊ณ„ํš ๋ถ„์„

๐Ÿ“Š ์‹คํ–‰ ๊ณ„ํš์ด๋ž€?

์‹คํ–‰ ๊ณ„ํš์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์„ ํƒํ•œ ๊ฒฝ๋กœ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•˜๊ณ  ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. MySQL์—์„œ๋Š” EXPLAIN ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ๊ณ„ํš์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ› ๏ธ EXPLAIN ๋ช…๋ น์–ด ์‚ฌ์šฉ๋ฒ•

EXPLAIN SELECT * FROM employees WHERE department_id = 10;

์œ„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ•ด๋‹น ์ฟผ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ์ •๋ณด๋ฅผ ํ†ตํ•ด ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ์ง€์ ์„ ํŒŒ์•…ํ•˜๊ณ  ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”„ ์ฟผ๋ฆฌ ์ตœ์ ํ™” ๊ธฐ๋ฒ•

๐Ÿ› ๏ธ ์ฟผ๋ฆฌ ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•œ ์†๋„ ํ–ฅ์ƒ

  1. ์„œ๋ธŒ์ฟผ๋ฆฌ ์ตœ์ ํ™”
    • ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์ข…์ข… ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์›์ธ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹(CTE)์ด๋‚˜ ์กฐ์ธ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์˜ˆ์‹œ: ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ CTE๋กœ ๋ณ€ํ™˜

     WITH MaxSalary AS (
         SELECT MAX(salary) AS max_salary
         FROM salaries
         WHERE from_date > '2000-01-01'
     )
     SELECT e.emp_no, e.first_name, e.last_name, s.salary
     FROM employees e
     JOIN salaries s ON e.emp_no = s.emp_no
     JOIN MaxSalary ms ON s.salary = ms.max_salary
     WHERE e.hire_date < '1995-01-01'
     ORDER BY e.hire_date DESC;
    

    ์œ„ ์˜ˆ์‹œ์—์„œ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ CTE๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

  2. ์ธ๋ฑ์Šค ํ™œ์šฉ
    • ์ ์ ˆํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ณผ๋„ํ•œ ์ธ๋ฑ์Šค๋Š” ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํ•„์š”ํ•œ ์ธ๋ฑ์Šค๋งŒ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ์‹œ: ์ธ๋ฑ์Šค ์ƒ์„ฑ

     CREATE INDEX idx_salaries_salary ON salaries(salary);
     CREATE INDEX idx_salaries_from_date ON salaries(from_date);
     CREATE INDEX idx_employees_hire_date ON employees(hire_date);
    

    ์œ„ ์˜ˆ์‹œ์—์„œ๋Š” ์ฟผ๋ฆฌ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์—ด์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

  3. ๋ถˆํ•„์š”ํ•œ ์ปฌ๋Ÿผ ์ œ๊ฑฐ: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ปฌ๋Ÿผ์˜ ์กฐํšŒ๋ฅผ ํ”ผํ•˜์—ฌ I/O ๋ถ€๋‹ด์„ ์ค„์ž…๋‹ˆ๋‹ค.
  4. ์กฐ์ธ ์ˆœ์„œ ์ตœ์ ํ™”: ์กฐ์ธ์˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ž‘์€ ํ…Œ์ด๋ธ”๋ถ€ํ„ฐ ๋จผ์ € ์กฐ์ธํ•˜๋„๋ก ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”„ ์ฟผ๋ฆฌ ์ตœ์ ํ™” ๊ธฐ๋ฒ• ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ!

๊ธฐ๋ฒ• ๋น„์œ  ์„ค๋ช…
1๏ธโƒฃ ์„œ๋ธŒ์ฟผ๋ฆฌ ์ตœ์ ํ™” โ†’ CTE๋กœ ๋ณ€ํ™˜ ๐Ÿญ ๊ณต์žฅ์—์„œ ๋งค๋ฒˆ ์žฌ๋ฃŒ๋ฅผ ๋”ฐ๋กœ๋”ฐ๋กœ ์ฃผ๋ฌธํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ•œ ๋ฒˆ์— ์žฌ๊ณ  ์ •๋ฆฌํ•ด๋‘๊ณ  ์“ฐ๋Š” ๊ฒƒ! ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•˜๋ฉด ๋งค๋ฒˆ ์ƒˆ๋กœ ๊ฒ€์ƒ‰ํ•˜๋А๋ผ ์‹œ๊ฐ„ ๋‚ญ๋น„. โ†’ CTE(Common Table Expression)๋กœ ํ•œ ๋ฒˆ ์ •๋ฆฌํ•ด๋‘๊ณ  ์—ฌ๋Ÿฌ ๋ฒˆ ์žฌํ™œ์šฉํ•˜๋ฉด ๋น ๋ฆ„!
2๏ธโƒฃ ์ธ๋ฑ์Šค ํ™œ์šฉ ๐Ÿ“š ์ฑ…์— ์ƒ‰์ธ(Index)์ด ์žˆ์œผ๋ฉด, ์›ํ•˜๋Š” ๋‚ด์šฉ ๋ฐ”๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ! WHERE, JOIN, ORDER BY์—์„œ ์ž์ฃผ ์“ฐ๋Š” ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์–ด์ฃผ๋ฉด ๊ฒ€์ƒ‰์ด ํ›จ์”ฌ ๋น ๋ฆ„. ๋‹จ, ๋„ˆ๋ฌด ๋งŽ์€ ์ƒ‰์ธ(์ธ๋ฑ์Šค)์€ ์˜คํžˆ๋ ค ์ฑ…์ด ๋‘๊บผ์›Œ์ง€๊ณ  ๊ด€๋ฆฌ๊ฐ€ ํž˜๋“ค์–ด์ง (DML ์‹œ ๋น„์šฉ โ†‘)
3๏ธโƒฃ ๋ถˆํ•„์š”ํ•œ ์ปฌ๋Ÿผ ์ œ๊ฑฐ ๐Ÿฑ ๋„์‹œ๋ฝ ๋ฐฐ๋‹ฌํ•  ๋•Œ ์•ˆ ๋จน์„ ๋ฐ˜์ฐฌ๊นŒ์ง€ ๋‹ค ์‹ธ์˜ค๋ฉด ๋ฌด๊ฑฐ์›Œ์ง€๊ณ  ๋А๋ ค์ง! ์ฟผ๋ฆฌ์—์„œ ํ•„์š”ํ•œ ์ปฌ๋Ÿผ๋งŒ SELECT! โ†’ SELECT * ์‚ฌ์šฉ ๊ธˆ์ง€! โ†’ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ๋“ค๊ณ  ์˜ค๋Š” I/O ๋ถ€๋‹ด ์ค„์ž„
4๏ธโƒฃ ์กฐ์ธ ์ˆœ์„œ ์ตœ์ ํ™” ๐Ÿ›’ ๋งˆํŠธ์—์„œ ์žฅ ๋ณผ ๋•Œ ๋ฌด๊ฑฐ์šด ์Œ€๋ถ€ํ„ฐ ๋จผ์ € ์‚ฌ๊ณ  ๋Œ์•„๋‹ค๋‹ˆ๋ฉด ํž˜๋“ฆ โ†’ ๊ฐ€๋ฒผ์šด ๊ฒƒ๋ถ€ํ„ฐ ๋จผ์ € ๋‹ด๊ธฐ! ํฐ ํ…Œ์ด๋ธ” ๋จผ์ € ์กฐ์ธํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ถ€๋‹ด ์ปค์ง โ†’ ์ž‘์€ ํ…Œ์ด๋ธ”๋ถ€ํ„ฐ ๋จผ์ € ์กฐ์ธํ•˜๋„๋ก ์ฟผ๋ฆฌ ์ž‘์„ฑ!

๐ŸŽฏ ํ•ต์‹ฌ ์ •๋ฆฌ

์ตœ์ ํ™” ๊ธฐ๋ฒ• ํ•œ ์ค„ ์š”์•ฝ
์„œ๋ธŒ์ฟผ๋ฆฌ โ†’ CTE๋กœ ๋ณ€ํ™˜ ๊ณตํ†ต ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ๊ณ„์‚ฐ & ์ €์žฅ, ์ค‘๋ณต ์—ฐ์‚ฐ ์ค„์ด๊ธฐ
์ธ๋ฑ์Šค ํ™œ์šฉ ์ฑ…์˜ ์ƒ‰์ธ์ฒ˜๋Ÿผ ๋น ๋ฅธ ๊ฒ€์ƒ‰์šฉ, ํ•„์š”ํ•œ ์—ด๋งŒ!
๋ถˆํ•„์š”ํ•œ ์ปฌ๋Ÿผ ์ œ๊ฑฐ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ๋“ค๊ณ ์˜ค๊ธฐ! SELECT * ๊ธˆ์ง€!
์กฐ์ธ ์ˆœ์„œ ์ตœ์ ํ™” ์ž‘์€ ํ…Œ์ด๋ธ”๋ถ€ํ„ฐ ๋จผ์ € ์กฐ์ธํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€๋‹ด ์ค„์ด๊ธฐ

โš™๏ธ ์บ์‹œ ๋ฐ ์„ฑ๋Šฅ ํŠœ๋‹ ๊ธฐ๋ฒ•

  1. ์ฟผ๋ฆฌ ์บ์‹œ ํ™œ์šฉ
    • ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋™์ผํ•œ ์ฟผ๋ฆฌ์— ๋Œ€ํ•ด ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ MySQL 8.0๋ถ€ํ„ฐ๋Š” ์ฟผ๋ฆฌ ์บ์‹œ ๊ธฐ๋Šฅ์ด ์ œ๊ฑฐ๋˜์—ˆ์œผ๋ฏ€๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ ์บ์‹ฑ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์˜ตํ‹ฐ๋งˆ์ด์ € ํžŒํŠธ ์‚ฌ์šฉ
    • ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ ์˜ตํ‹ฐ๋งˆ์ด์ €์—๊ฒŒ ํŠน์ • ์‹คํ–‰ ๊ณ„ํš์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ง€์‹œํ•˜๋Š” ํžŒํŠธ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์˜ˆ์‹œ: ์ธ๋ฑ์Šค ํžŒํŠธ ์‚ฌ์šฉ

     SELECT * FROM test USE INDEX (idx_name)
     WHERE name IN ('1', '2', ..., '150') AND second_name IN ('1', '2', ..., '150');
        
    

    ์œ„ ์˜ˆ์‹œ์—์„œ๋Š” USE INDEX ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•˜๋„๋ก ์ง€์‹œํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹
    • ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ, ์Šคํ† ๋ฆฌ์ง€ ์„ฑ๋Šฅ, ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ ๋“ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ค์ • ๊ฐ’์„ ์กฐ์ •ํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -

๐Ÿš€ ์บ์‹œ ๋ฐ ์„ฑ๋Šฅ ํŠœ๋‹ ๊ธฐ๋ฒ• ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ!

๊ธฐ๋ฒ• ๋น„์œ  ์„ค๋ช…
1๏ธโƒฃ ์ฟผ๋ฆฌ ์บ์‹œ ํ™œ์šฉ ๐Ÿฝ๏ธ ์ž์ฃผ ์ฃผ๋ฌธํ•˜๋Š” ๋ฉ”๋‰ด๋Š” ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“๊ณ  ๋ฐ”๋กœ ๋‚ด์ฃผ๋Š” ํŒจ์ŠคํŠธํ‘ธ๋“œ์ ! ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๊ณ„์† ์š”์ฒญํ•˜๋ฉด, ๋งค๋ฒˆ ์ƒˆ๋กœ ์š”๋ฆฌํ•˜์ง€ ์•Š๊ณ  ๋ฏธ๋ฆฌ ๊ฒฐ๊ณผ ์ €์žฅ(์บ์‹œ)ํ•ด ๋‘์—ˆ๋‹ค๊ฐ€ ๋ฐ”๋กœ ์ œ๊ณต โ†’ ์†๋„ ํ–ฅ์ƒ!โ€ป MySQL 8.0 ์ด์ƒ์—์„œ๋Š” ์„œ๋ฒ„ ๋ ˆ๋ฒจ ์บ์‹œ๋Š” ์‚ฌ๋ผ์ ธ์„œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Redis ๊ฐ™์€ ์บ์‹œ ์จ์•ผ ํ•จ!
2๏ธโƒฃ ์˜ตํ‹ฐ๋งˆ์ด์ € ํžŒํŠธ ์‚ฌ์šฉ ๐Ÿšฆ ๋‚ด๋น„๊ฒŒ์ด์…˜์—๊ฒŒ โ€œ์ด ๊ธธ๋กœ ๊ฐ€!โ€๋ผ๊ณ  ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ! DB๊ฐ€ ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ณ„ํš์„ ์Šค์Šค๋กœ ์งœ์ง€๋งŒ, ๊ฐ€๋” ๋Œ์•„๊ฐ€๋Š” ๊ธธ์„ ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ์Œ. โ†’ ํžŒํŠธ(์˜ˆ: USE INDEX)๋กœ ๋น ๋ฅธ ๊ธธ์„ ๊ฐ•์ œ๋กœ ์•Œ๋ ค์ฃผ๊ธฐ!
3๏ธโƒฃ DB ํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹ ๐Ÿ› ๏ธ ์ž๋™์ฐจ ์—”์ง„, ํƒ€์ด์–ด ๊ณต๊ธฐ์••, ์—ฐ๋ฃŒ ํšจ์œจ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ! ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ, ๋ฒ„ํผ ํฌ๊ธฐ, ์Šค๋ ˆ๋“œ ์ˆ˜ ๋“ฑ์€ ์ž๋™์ฐจ ์„ธํŒ…๊ณผ ๊ฐ™์Œ. โ†’ ๋ฉ”๋ชจ๋ฆฌ ๋„ˆ๋ฌด ์ ์œผ๋ฉด ๋А๋ฆผ, ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ๋‚ญ๋น„ โ†’ ์„œ๋ฒ„ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ๋งž์ถค ์„ค์ • ํ•„์š”!

๐ŸŽฏ ํ•ต์‹ฌ ์ •๋ฆฌ

์„ฑ๋Šฅ ํŠœ๋‹ ๊ธฐ๋ฒ• ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๋Š” ํ•œ ์ค„
์ฟผ๋ฆฌ ์บ์‹œ ์ž์ฃผ ์š”์ฒญ๋˜๋Š” ๋ฉ”๋‰ด๋Š” ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋‘  (์†๋„ โ†‘)
์˜ตํ‹ฐ๋งˆ์ด์ € ํžŒํŠธ ๋‚ด๋น„๊ฒŒ์ด์…˜์—๊ฒŒ โ€œ์ด์ชฝ ๊ธธ๋กœ ๊ฐ€!โ€ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ
DB ํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹ ์ž๋™์ฐจ ์—”์ง„ ์„ธํŒ… ๋งž์ถ”๋“ฏ, ์„œ๋ฒ„ ํ™˜๊ฒฝ์— ์ตœ์ ํ™”