SQL Injection

์›น ์‚ฌ์ดํŠธ์˜ ๋ณด์•ˆ์ƒ ํ—ˆ์ ์„ ์ด์šฉํ•ด ํŠน์ • SQL ์ฟผ๋ฆฌ๋ฌธ์„ ์ „์†กํ•˜์—ฌ
๊ณต๊ฒฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํ•ดํ‚น ๊ธฐ๋ฒ•์ด๋‹ค.

๋Œ€๋ถ€๋ถ„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๋Œ€๋กœ ํ•„ํ„ฐ๋งํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•œ๋‹ค.

๊ณต๊ฒฉ์ด ์‰ฌ์šด ๋‚œ์ด๋„์— ๋น„ํ•ด ํ”ผํ•ด๊ฐ€ ์ƒ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์—
๋ณด์•ˆ ์œ„ํ˜‘ 1์ˆœ์œ„๋กœ ๋ถˆ๋ฆด๋งŒํผ ์ค‘์š”ํ•œ ๊ธฐ๋ฒ•์ด๋‹ค.

 

 

 

 

๊ฐ„๋žตํ•œ ๊ณต๊ฒฉ ์‹œ๋‚˜๋ฆฌ์˜ค


์˜ˆ๋ฅผ ๋“ค์–ด ํšŒ์›์ด ์ž์‹ ์˜ ์ผ๋ จ๋ฒˆํ˜ธ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

๊ธฐ๋ณธ์ ์ธ SQL ์ง„ํ–‰์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ผ๋ จ๋ฒˆํ˜ธ ์กฐํšŒ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์›น์„œ๋ฒ„์— ์ด๋ฆ„์ด ๋“ค์–ด๊ฐ€๊ณ  DB์— ์ž…๋ ฅํ•œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„ ์กด์žฌํ•œ๋‹ค๋ฉด ๋ฒˆํ˜ธ DB๋ฅผ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฒˆํ˜ธ ์กฐํšŒ๋ฅผ ํด๋ฆญํ•˜๋ฉด url์ด http://numbersearch.com/mysearch?=ohyaelim ์ด ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

๊ทธ๋Ÿผ ๊ณต๊ฒฉ์ž์˜ ์กฐํšŒ๋Š” http://numbersearch.com/mysearch?=blackhat  ์—์„œ ํƒˆ์ทจํ•˜๊ณ  ์‹ถ์€ ์ •๋ณด์˜ ์œ ์ €์ธ ohyaelim์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ค˜์•ผํ•˜๋Š”๋ฐ, ๊ทธ๋ƒฅ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋Š” ํ˜„์žฌ ๋กœ๊ทธ์ธ ๋œ ์ž์‹ ๊ณผ๋Š” ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์›น์„œ๋ฒ„์—์„œ ์ธ์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. 

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ํŠน์ • ์ฟผ๋ฆฌ๋ฌธ์„ ๋„ฃ์–ด์ค€๋‹ค. 'ohyaelim' or '1' = '1' ๊ณผ ๊ฐ™์ด ๋„ฃ์–ด๋ถ€๋… 1๊ณผ 1์€ ๊ฐ™๋‹ค๋ผ๋Š” ๊ตฌ๋ฌธ์ด ์ฐธ์ด๋ฏ€๋กœ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

 

์ด๋Ÿฌํ•œ SQL Injection์˜ ๊ณต๊ฒฉ ๋ฒ”์œ„๋Š” ๋งค์šฐ ๋‹ค์–‘ํ•˜๋‹ค.

bypass
data access
content change
db delete

 

 

 

 

 

๊ณต๊ฒฉ ์ข…๋ฅ˜ ๋ฐ ๋ฐฉ๋ฒ•


Error based SQL Injection

- ๋…ผ๋ฆฌ์  ์—๋Ÿฌ๋ฅผ ์ด์šฉํ•œ SQL Injection

SQL ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ ๋…ผ๋ฆฌ์  ์—๋Ÿฌ๋ฅผ ์ด์šฉํ•œ SQL Injection์€ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๊ณ  ๋Œ€์ค‘์ ์ธ ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์ด๋‹ค.

์•ž์„œ ์‚ดํŽด๋ดค๋˜ ๊ณต๊ฒฉ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์—ฌ๊ธฐ์— ํ•ด๋‹น๋œ๋‹ค. 

 

select * from client where name='ohyaelim' and password='1122'

 

๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋กœ๊ทธ์ธ์˜ ์˜ˆ๋ผ๋ฉด 

 

select * from client where name='ohyaelim' and password=' or '1'='1

 

์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ด or ์•ž์˜ ๊ฐ’๊ณผ ๋’ค์— ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์ฐธ์ด๋ฉด ์ฐธ์ด๋ฏ€๋กœ ์ด ๊ตฌ๋ฌธ ์ž์ฒด๊ฐ€ ์ฐธ์œผ๋กœ ์ธ์‹๋˜์–ด ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

UNION based SQL Injection = UNION

- ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•œ SQL Injection

SQL UNION์ด๋ž€, ์—ฌ๋Ÿฌ๊ฐœ์˜ SQL๋ฌธ์„ ํ•ฉ์ณ ํ•˜๋‚˜์˜ SQL๋ฌธ์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 
์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๊ธฐ์— ์•ž์„œ ์‚ฌ์ „ ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค. Union ํ•˜๋Š” ๋‘ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ˆ˜๊ฐ€ ๊ฐ™์•„์•ผ ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ํ˜•์ด ๊ฐ™์•„์•ผ ํ•œ๋‹ค.

UNION๊ณผ UNION ALL๋กœ ๋‚˜๋‰˜๋Š”๋ฐ ์ค‘๋ณต ๊ฐ’์„ ์ œ์™ธ ํ•˜๊ณ  ์•ˆํ•˜๊ณ ์˜ ์ฐจ์ด๋‹ค. 

UNION - ์ค‘๋ณต ๊ฐ’์„ ์ œ์™ธํ•œ๋‹ค.

UNION ALL - ์ค‘๋ณต ๊ฐ’์„ ์ œ์™ธํ•˜์ง€ ์•Š๊ณ  ์ „์ฒด๋ฅผ ํ•ฉ์นœ๋‹ค.

 

์ž…๋ ฅ๊ฐ’์„ title ๊ณผ contents ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ๋ž‘ ๋น„๊ตํ•œ ๋’ค ๋น„์Šทํ•œ ๊ธ€์ž๊ฐ€ ์žˆ๋Š” ๊ฒŒ์‹œ๊ธ€์„ ์ถœ๋ ฅํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ์ž…๋ ฅ๊ฐ’์œผ๋กœ Union ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ์ปฌ๋Ÿผ ์ˆ˜๋ฅผ ๋งž์ถฐ์„œ SELECT ๊ตฌ๋ฌธ์„ ๋„ฃ์–ด์ฃผ๊ฒŒ ๋˜๋ฉด ๋‘ ์ฟผ๋ฆฌ๋ฌธ์ด ํ•ฉ์ณ์„œ์„œ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋กœ ๋ณด์—ฌ์ง€๊ฒŒ ๋œ๋‹ค.

ํ˜„์žฌ ์ธ์ ์…˜ ํ•œ ๊ตฌ๋ฌธ์€ ์‚ฌ์šฉ์ž์˜ id์™€ passwd๋ฅผ ์š”์ฒญํ•˜๋Š” ์ฟผ๋ฆฌ๋ฌธ์œผ๋กœ ์ธ์ ์…˜์ด ์„ฑ๊ณตํ•˜๊ฒŒ ๋˜๋ฉด, ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ธ์ •๋ณด๊ฐ€ ๊ฒŒ์‹œ๊ธ€๊ณผ ํ•จ๊ป˜ ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๊ฒŒ ๋œ๋‹ค.

 

( * ๋ฌผ๋ก  ํŒจ์Šค์›Œ๋“œ๋ฅผ ํ‰๋ฌธ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜์ง€๋Š” ์•Š๊ฒ ์ง€๋งŒ ์ธ์ ์…˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์—์„œ ์ด๋ฏธ ๊ทธ ์ด์ƒ์˜ ๋ณด์•ˆ์œ„ํ—˜์— ๋…ธ์ถœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณต๊ฒฉ๋„ ์—ญ์‹œ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. )

 

 

 

 

Blind SQL Injection 

- Boolean based Blind SQL Injection

Blind SQL Injection์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ํŠน์ •ํ•œ ๊ฐ’์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ๋ฐ›์ง€ ์•Š๊ณ , ๋‹จ์ˆœํžˆ ์ฐธ๊ณผ ๊ฑฐ์ง“์˜ ์ •๋ณด๋งŒ ์•Œ ์ˆ˜ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๋กœ๊ทธ์ธ ํผ์— SQL Injection์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๊ฐ€์ • ํ–ˆ์„ ๋•Œ, ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•˜๋Š” ๋กœ๊ทธ์ธ ์„ฑ๊ณต๊ณผ ๋กœ๊ทธ์ธ ์‹คํŒจ ๋ฉ”์‹œ์ง€๋ฅผ ์ด์šฉํ•˜์—ฌ, DB์˜ ํ…Œ์ด๋ธ” ์ •๋ณด ๋“ฑ์„ ์ถ”์ถœํ•ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์€ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด limit ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋งŒ ์กฐํšŒํ•˜๊ณ , SUBSTR ํ•จ์ˆ˜๋กœ ์ฒซ ๊ธ€์ž๋งŒ, ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ASCII ๋ฅผ ํ†ตํ•ด์„œ ascii ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค. ๋งŒ์•ฝ์— ์กฐํšŒ๋˜๋Š” ํ…Œ์ด๋ธ” ๋ช…์ด Users ๋ผ๋ฉด ‘U’ ์ž๊ฐ€ ascii ๊ฐ’์œผ๋กœ ์กฐํšŒ๊ฐ€ ๋  ๊ฒƒ์ด๊ณ , ๋’ค์˜ 100 ์ด๋ผ๋Š” ์ˆซ์ž ๊ฐ’๊ณผ ๋น„๊ต๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ฑฐ์ง“์ด๋ฉด ๋กœ๊ทธ์ธ ์‹คํŒจ๊ฐ€ ๋  ๊ฒƒ์ด๊ณ , ์ฐธ์ด ๋  ๋•Œ๊นŒ์ง€ ๋’ค์˜ 100์ด๋ผ๋Š” ์ˆซ์ž๋ฅผ ๋ณ€๊ฒฝํ•ด ๊ฐ€๋ฉด์„œ ๋น„๊ต๋ฅผ ํ•˜๋ฉด ๋œ๋‹ค.  ๊ณต๊ฒฉ์ž๋Š” ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•˜์—ฌ ๋‹จ๊ธฐ๊ฐ„ ๋‚ด์— ํ…Œ์ด๋ธ” ๋ช…์„ ์•Œ์•„ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

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

 

 

Blind SQL Injection

- Time based SQL

Time Based SQL Injection ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํŠน์ •ํ•œ ์‘๋‹ต ๋Œ€์‹ ์— ์ฐธ ํ˜น์€ ๊ฑฐ์ง“์˜ ์‘๋‹ต์„ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ •๋ณด๋ฅผ ์œ ์ถ”ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๋Š” MySQL ๊ธฐ์ค€์œผ๋กœ SLEEP ๊ณผ BENCHMARK ์ด๋‹ค.

 

์œ„์˜ ๊ทธ๋ฆผ์˜ ์˜ˆ์‹œ์—์„œ ๋กœ๊ทธ์ธ ํผ์— ์ฃผ์ž…์ด ๋˜์—ˆ์œผ๋ฉฐ ์ž„์˜๋กœ abc123 ์ด๋ผ๋Š” ๊ณ„์ •์„ ์ƒ์„ฑํ•ด ๋‘์—ˆ๋Š”๋ฐ ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ abc123’ OR (LENGTH(DATABASE())=1 AND SLEEP(2)) – ์ด๋ผ๋Š” ๊ตฌ๋ฌธ์„ ์ฃผ์ž…ํ•œ ์ƒํ™ฉ์ด๋‹ค. 

 ์ฃผ์ž…๋œ ๊ตฌ๋ฌธ์—์„œ, LENGTH(DATABASE()) = 1 ๊ฐ€ ์ฐธ์ด๋ฉด SLEEP(2) ๊ฐ€ ๋™์ž‘ํ•˜๊ณ , ๊ฑฐ์ง“์ด๋ฉด ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ ์ˆซ์ž 1 ๋ถ€๋ถ„์„ ์กฐ์ž‘ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ธธ์ด๋ฅผ ์•Œ์•„ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ์— SLEEP ์ด๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์น˜ํ™˜์ฒ˜๋ฆฌ ๋˜์–ด์žˆ๋‹ค๋ฉด, ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ BENCHMARK ๋‚˜ WAIT ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค

BENCHMARK ๋Š”
BENCHMARK(1000000,AES_ENCRYPT('hello','goodbye'));
์ด๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์ด ๊ตฌ๋ฌธ์„ ์‹คํ–‰ ํ•˜๋ฉด ์•ฝ 4.74์ดˆ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค. 

 

 

Stored Procedure SQL Injection

- ์ €์žฅ๋œ ํ”„๋กœ์‹œ์ €์—์„œ์˜ SQL Injection

stored procedure๋Š” ์ผ๋ จ์˜ ์ฟผ๋ฆฌ๋“ค์„ ๋ชจ์•„ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ๊ฒƒ์ด๋‹ค.

๊ณต๊ฒฉ์— ์‚ฌ์šฉ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์ €์žฅ ํ”„๋กœ์‹œ์ €๋Š” MS-SQL ์— ์žˆ๋Š” xp_cmdshell๋กœ ์œˆ๋„์šฐ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋‹จ, ๊ณต๊ฒฉ์ž๊ฐ€ ์‹œ์Šคํ…œ ๊ถŒํ•œ์„ ํš๋“ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ณต๊ฒฉ๋‚œ์ด๋„๊ฐ€ ๋†’์œผ๋‚˜ ๊ณต๊ฒฉ์— ์„ฑ๊ณตํ•œ๋‹ค๋ฉด, ์„œ๋ฒ„์— ์ง์ ‘์ ์ธ ํ”ผํ•ด๋ฅผ ์ž…ํž ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฒฉ์ด๋‹ค.

 

 

Mass SQL Injection

- ๋‹ค๋Ÿ‰์˜ SQL Injection ๊ณต๊ฒฉ

 2008๋…„์— ์ฒ˜์Œ ๋ฐœ๊ฒฌ๋œ ๊ณต๊ฒฉ๊ธฐ๋ฒ•์ด๋‹ค.

๊ธฐ์กด SQL Injection ๊ณผ ๋‹ฌ๋ฆฌ ํ•œ๋ฒˆ์˜ ๊ณต๊ฒฉ์œผ๋กœ ๋‹ค๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์กฐ์ž‘๋˜์–ด ํฐ ํ”ผํ•ด๋ฅผ ์ž…ํžˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋ณดํ†ต MS-SQL์„ ์‚ฌ์šฉํ•˜๋Š” ASP ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋ฉฐ, ์ฟผ๋ฆฌ๋ฌธ์€ HEX ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์œผ๋กœ ์ธ์ฝ”๋”ฉ ํ•˜์—ฌ ๊ณต๊ฒฉํ•œ๋‹ค. ๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ’์„ ๋ณ€์กฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•…์„ฑ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ , ์‚ฌ์šฉ์ž๋“ค์ด ๋ณ€์กฐ๋œ ์‚ฌ์ดํŠธ์— ์ ‘์† ์‹œ ์ข€๋น„PC๋กœ ๊ฐ์—ผ๋˜๊ฒŒ ํ•˜๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๊ฐ์—ผ๋œ ์ข€๋น„ PC๋“ค์€ DDoS ๊ณต๊ฒฉ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

๋Œ€์‘๋ฐฉ์•ˆ


  • ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ 
  • Prepared Statement ๊ตฌ๋ฌธ ์‚ฌ์šฉ
  • Error Message ๋…ธ์ถœ ๊ธˆ์ง€
  • ์›น ๋ฐฉํ™”๋ฒฝ ์‚ฌ์šฉ

 

์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ

SQL Injection ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ฒ•๊ณผ ํ‚ค์›Œ๋“œ๋Š” ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ์ด ํ•„์š”ํ•˜๋‹ค. ์„œ๋ฒ„ ๋‹จ์—์„œ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒ€์ฆํ•ด์•ผ ํ•œ๋‹ค. ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒ€์ฆํ•˜๊ฒŒ ๋˜๋ฉด ์ˆ˜๋งŽ์€ ์ฐจ๋‹จ๋ฆฌ์ŠคํŠธ๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•˜๊ณ , ํ•˜๋‚˜๋ผ๋„ ๋น ์ง€๋ฉด ๊ณต๊ฒฉ์— ์„ฑ๊ณตํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ณต๋ฐฑ์œผ๋กœ ์น˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋งŽ์ด ์“ฐ์ด๋Š”๋ฐ, ์ด ๋ฐฉ๋ฒ•๋„ ์ทจ์•ฝํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ณต๊ฒฉ์ž๊ฐ€ SESELECTLECT ๋ผ๊ณ  ์ž…๋ ฅ ์‹œ ์ค‘๊ฐ„์˜ SELECT๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ์น˜ํ™˜์ด ๋˜๋ฉด SELECT ๋ผ๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ ์™„์„ฑ๋˜๊ฒŒ ๋œ๋‹ค. ๊ณต๋ฐฑ ๋Œ€์‹  ๊ณต๊ฒฉ ํ‚ค์›Œ๋“œ์™€๋Š” ์˜๋ฏธ ์—†๋Š” ๋‹จ์–ด๋กœ ์น˜ํ™˜๋˜์–ด์•ผ ํ•œ๋‹ค.

 

 

Prepared Statement ๊ตฌ๋ฌธ์‚ฌ์šฉ

 Prepared Statement ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๊ฐ’์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—DBMS๊ฐ€ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ ํ•˜์—ฌ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋Œ€๊ธฐํ•˜๋Š”๋ฐ ๊ทธ ํ›„ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ์ธ์‹ํ•˜๊ฒŒ ํ•˜์—ฌ ๊ณต๊ฒฉ์ฟผ๋ฆฌ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์€ ์ด๋ฏธ ์˜๋ฏธ ์—†๋Š” ๋‹จ์ˆœ ๋ฌธ์ž์—ด ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ์ฟผ๋ฆฌ๋ฌธ๋„ ๊ณต๊ฒฉ์ž์˜ ์˜๋„๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

 

Error Message ๋…ธ์ถœ ๊ธˆ์ง€

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

 

์›น ๋ฐฉํ™”๋ฒฝ ์‚ฌ์šฉ

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

 

 

 

 

 


์ฐธ๊ณ 

link1 link2

NoSQL์ด๋ž€?

์ผ๋ช… "SQL๋งŒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค"
ํ‘œ ํ˜•์‹์ด ์•„๋‹ˆ๋ฉฐ, ๊ด€๊ณ„ํ˜• ํ…Œ์ด๋ธ”๊ณผ๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ

 

NoSQL์€ Not Only SQL์˜ ์•ฝ์ž๋กœ ๊ธฐ์กด RDBMs ํ˜•ํƒœ์˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ธฐ์ˆ ์„ ์˜๋ฏธํ•˜๋ฉฐ, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์˜ ์ƒˆ๋กœ์šด ํ˜•ํƒœ๋กœ, ์ˆ˜ํ‰์  ํ™•์žฅ์„ฑ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค. ๋ฌธ์„œ, ๊ทธ๋ž˜ํ”„, ํ‚ค ๊ฐ’, ์ธ ๋ฉ”๋ชจ๋ฆฌ, ๊ฒ€์ƒ‰์„ ํฌํ•จํ•ด ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ๋‹ค. RDBMS๊ฐ€ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ํ™˜๊ฒฝ์— ๋งž๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ๊ธฐ์ˆ ์ด๋ผ๋ฉด, NoSQL์€ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์— ๋งž๋Š” ์ €์žฅ ๊ธฐ์ˆ ์ด๋‹ค.

 

 

 

 

 

 

NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ด์œ 


NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํƒ์›”ํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋น„๋กฏํ•ด ๊ณ ์„ฑ๋Šฅ์˜ ๋งค์šฐ ๊ธฐ๋Šฅ์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๋ชจ๋ฐ”์ผ, ์›น์ด๋‚˜ ๊ฒŒ์ด๋ฐ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํ˜„๋Œ€์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•˜๋‹ค.

  • ์œ ์—ฐ์„ฑ: NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์œ ์—ฐํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ์ œ๊ณตํ•˜์—ฌ, ๋ณด๋‹ค ๋น ๋ฅด๊ณ  ๋ฐ˜๋ณต์ ์ธ ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. ์ด ๊ฐ™์€ ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์€ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฐ˜์ •ํ˜• ๋ฐ ๋ฐ์ดํ„ฐ์— ์ด์ƒ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • ํ™•์žฅ์„ฑ: NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณ ๊ฐ€์˜ ๊ฐ•๋ ฅํ•œ ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  ๋ถ„์‚ฐํ˜• ํ•˜๋“œ์›จ์–ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ด์šฉํ•ด ํ™•์žฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. ์ผ๋ถ€ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์ž๋“ค์€ ์™„์ „ ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค๋กœ์„œ ์ด๋Ÿฐ ์šด์˜ ์ž‘์—…์„ ๋ณด์ด์ง€ ์•Š๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ๊ณ ์„ฑ๋Šฅ: NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ(๋ฌธ์„œ, ํ‚ค ๊ฐ’, ๊ทธ๋ž˜ํ”„ ๋“ฑ) ๋ฐ ์—‘์„ธ์Šค ํŒจํ„ด์— ๋Œ€ํ•ด ์ตœ์ ํ™”๋˜์–ด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ถฉ์กฑํ•˜๋ ค ํ•  ๋•Œ๋ณด๋‹ค ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์„ ์–ป๊ฒŒ ํ•ด์ค€๋‹ค.
  • ๊ณ ๊ธฐ๋Šฅ์„ฑ: NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ฐ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์— ๋งž์ถ”์–ด ํŠน๋ณ„ํžˆ ๊ตฌ์ถ•๋œ ๋›ฐ์–ด๋‚œ ๊ธฐ๋Šฅ์˜ API์™€ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ œ๊ณตํ•œ๋‹ค.
SQL ์žฅ์ 
๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜๋œ ์Šคํ‚ค๋งˆ, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ๊ด€๊ณ„๋Š” ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๋ณต์—†์ด ํ•œ๋ฒˆ๋งŒ ์ €์žฅ
SQL ๋‹จ์ 
๋œ ์œ ์—ฐํ•จ. ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์ „์— ๊ณ„ํšํ•˜๊ณ  ์•Œ๋ ค์•ผ ํ•จ. (๋‚˜์ค‘์— ์ˆ˜์ •ํ•˜๊ธฐ ํž˜๋“ฌ)๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ์–ด์„œ ์กฐ์ธ๋ฌธ์ด ๋งŽ์€ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ์Œ๋Œ€์ฒด๋กœ ์ˆ˜์ง์  ํ™•์žฅ๋งŒ ๊ฐ€๋Šฅํ•จ


NoSQL ์žฅ์ 
์Šคํ‚ค๋งˆ๊ฐ€ ์—†์–ด์„œ ์œ ์—ฐํ•จ. ์–ธ์ œ๋“ ์ง€ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์ƒˆ๋กœ์šด ํ•„๋“œ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ๋ฐ์ดํ„ฐ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ•„์š”๋กœ ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ์ €์žฅ๋จ. ๋ฐ์ดํ„ฐ ์ฝ์–ด์˜ค๋Š” ์†๋„ ๋นจ๋ผ์ง์ˆ˜์ง ๋ฐ ์ˆ˜ํ‰ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ชจ๋“  ์ฝ๊ธฐ/์“ฐ๊ธฐ ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
NoSQL ๋‹จ์ 
์œ ์—ฐ์„ฑ์œผ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๊ฒฐ์ •์„ ๋ฏธ๋ฃจ๊ฒŒ ๋  ์ˆ˜ ์žˆ์Œ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ๊ณ„์† ์—…๋ฐ์ดํŠธ ํ•ด์•ผ ํ•จ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ์ปฌ๋ ‰์…˜์— ์ค‘๋ณต๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ • ์‹œ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•จ (SQL์—์„œ๋Š” ์ค‘๋ณต ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํ•œ๋ฒˆ๋งŒ ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅ)

 

 

 

NoSQL์˜ ํŠน์ง•


  1. NoSQL์€ RDBMS์™€๋Š” ๋‹ฌ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๊ฐ€์žฅ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์ธ RDBMS๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ๊ด€๊ณ„๋ฅผ Foreign Key ๋“ฑ์œผ๋กœ ์ •์˜ํ•˜๊ณ  ์ด๋ฅผ ์ด์šฉํ•ด Join ๋“ฑ์˜ ๊ด€๊ณ„ํ˜• ์—ฐ์‚ฐ์„ ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด, NoSQL์€ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์€ ๊ทธ๋ƒฅ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์ด๋ฉฐ ๊ฐ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ํ…Œ์ด๋ธ” ๊ฐ„์˜ Join๋„ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  2. RDBMS์— ๋น„ํ•ด ํ›จ์”ฌ ๋” ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
    • RDBMS์˜ ๋ณต์žก๋„์™€ ์šฉ๋Ÿ‰์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๋“ฑ์žฅํ•œ ๋งŒํผ ํŽ˜ํƒ€๋ฐ”์ดํŠธ๊ธ‰์˜ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ๋ถ„์‚ฐํ˜• ๊ตฌ์กฐ์ด๋‹ค.
    • NoSQL์€ ๊ธฐ์กด RDBMS์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ํ•˜๋‚˜์˜ ๊ณ ์„ฑ๋Šฅ ๋จธ์‹ ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜์ ์ธ ์„œ๋ฒ„ ์ˆ˜์‹ญ ๋Œ€๋ฅผ ์—ฐ๊ฒฐํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค. ์ฆ‰ ๋ถ„์‚ฐํ˜• ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„์— ๋ถ„์‚ฐํ•ด ์ €์žฅํ•˜๊ณ  ๋ถ„์‚ฐ ์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ƒํ˜ธ ๋ณต์ œํ•ด ํŠน์ • ์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ์—๋„ ๋ฐ์ดํ„ฐ ์œ ์‹ค์ด๋‚˜ ์„œ๋น„์Šค ์ค‘์ง€๊ฐ€ ์—†๋Š” ๊ตฌ์กฐ์˜ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค.
  4. ๊ณ ์ •๋˜์ง€ ์•Š์€ ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ–๋Š”๋‹ค.
    • RDBMS์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ํ…Œ์ด๋ธ”์˜ ์Šคํ‚ค๋งˆ๊ฐ€ ์œ ๋™์ ์ด๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ปฌ๋Ÿผ์€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์ด๋ฆ„๊ณผ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ฐ–๋Š” ๊ฒƒ์ด ํ—ˆ์šฉ๋œ๋‹ค.
    • ์Šคํ‚ค๋งˆ๋ž€? ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ์™€ ์ œ์•ฝ ์กฐ๊ฑด์— ๊ด€ํ•œ ์ „๋ฐ˜์ ์ธ ๋ช…์„ธ๋ฅผ ๊ธฐ์ˆ ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์ด๋‹ค.

 

 

CAP ์ด๋ก 


1. ์ผ๊ด€์„ฑ(Consistency)

์ผ๊ด€์„ฑ์€ ๋™์‹œ์„ฑ ๋˜๋Š” ๋™์ผ์„ฑ์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ๋‹ค์ค‘ ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ฐ™์€ ์‹œ๊ฐ„์— ์กฐํšŒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ์ž„์„ ๋ณด์ฆํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๊ฒƒ์€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ง€์›ํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์ด์ง€๋งŒ ์ผ๊ด€์„ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” NoSQL ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์ด ๋Š์Šจํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋˜์–ด ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ๋Š์Šจํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์„ ์‹œ๊ฐ„์˜ ํ๋ฆ„์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ์ „ํŒŒํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์ตœ์ข…์ ์œผ๋กœ ์ผ๊ด€์„ฑ์ด ์œ ์ง€๋œ๋‹ค๊ณ  ํ•˜์—ฌ ์ตœ์ข… ์ผ๊ด€์„ฑ ๋˜๋Š” ๊ถ๊ทน์  ์ผ๊ด€์„ฑ์„ ์ง€์›ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

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

 

2. ๊ฐ€์šฉ์„ฑ(Availability)

๊ฐ€์šฉ์„ฑ์ด๋ž€ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์˜ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ์š”์ฒญ์— ๋Œ€ํ•˜์—ฌ ํ•ญ์ƒ ์‘๋‹ต์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ์„ ๋ณด์ฆํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ ๋‚ด๊ณ ์žฅ์„ฑ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค. ๋‚ด๊ณ ์žฅ์„ฑ์„ ๊ฐ€์ง„ NoSQL ์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ๋ช‡ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ๋ง๊ฐ€์ง€๋”๋ผ๋„ ์ •์ƒ์ ์ธ ์„œ๋น„์Šค๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ช‡๋ช‡ NoSQL ์€ ๊ฐ€์šฉ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ๋ณต์ œ(Replication)์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์ค‘ ๋…ธ๋“œ์— ์ค‘๋ณต ์ €์žฅํ•˜์—ฌ ๊ทธ ์ค‘ ๋ช‡ ๋Œ€์˜ ๋…ธ๋“œ๊ฐ€ ๊ณ ์žฅ๋‚˜๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ฐ์ดํ„ฐ ์ค‘๋ณต ์ €์žฅ ๋ฐฉ๋ฒ•์—๋Š” ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ ์ €์žฅ์†Œ๋ฅผ ํ•˜๋‚˜ ๋” ์ƒ์„ฑํ•˜๋Š” Master-Slave ๋ณต์ œ ๋ฐฉ๋ฒ•๊ณผ ๋ฐ์ดํ„ฐ ๋‹จ์œ„๋กœ ์ค‘๋ณต ์ €์žฅํ•˜๋Š” Peer-to-Peer ๋ณต์ œ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

3. ๋„คํŠธ์›Œํฌ ๋ถ„ํ•  ํ—ˆ์šฉ์„ฑ(Partition tolerance)

๋ถ„ํ•  ํ—ˆ์šฉ์„ฑ์ด๋ž€ ์ง€์—ญ์ ์œผ๋กœ ๋ถ„ํ• ๋œ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ ๋‘ ์ง€์—ญ ๊ฐ„์˜ ๋„คํŠธ์›Œํฌ๊ฐ€ ๋‹จ์ ˆ๋˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ ๋ฐ์ดํ„ฐ์˜ ์œ ์‹ค์ด ์ผ์–ด๋‚˜๋”๋ผ๋„ ๊ฐ ์ง€์—ญ ๋‚ด์˜ ์‹œ์Šคํ…œ์€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•œ๋‹ค.

 

 

 

 

 

 

 

NoSQL์˜ ์ข…๋ฅ˜


  • Key-Value DB
    • Key์™€ Value์˜ ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ์œ ํ˜•์œผ๋กœ์จ Amazon์˜ Dynamo Paper์—์„œ ์œ ๋ž˜๋˜์—ˆ๋‹ค. Riak, Vodemort, Tokyo ๋“ฑ์˜ ์ œํ’ˆ์ด ์•Œ๋ ค์ ธ ์žˆ๋‹ค.
๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ์˜ NoSQL ์ด๋ฉฐ ํ‚ค ํ•˜๋‚˜๋กœ ๋ฐ์ดํ„ฐ ํ•˜๋‚˜๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ ํ‚ค-๊ฐ’ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค. ๋‹จ์ˆœํ•œ ์ €์žฅ๊ตฌ์กฐ๋กœ ์ธํ•˜์—ฌ ๋ณต์žกํ•œ ์กฐํšŒ ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ ๊ณ ์† ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ์— ์ตœ์ ํ™”๋œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์‚ฌ์šฉ์ž์˜ ํ”„๋กœํ•„ ์ •๋ณด, ์›น ์„œ๋ฒ„ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์œ„ํ•œ ์„ธ์…˜ ์ •๋ณด, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ •๋ณด, URL ๋‹จ์ถ• ์ •๋ณด ์ €์žฅ ๋“ฑ์— ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์„œ๋น„์Šค ์š”์ฒญ์— ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋ฐ ์ˆ˜์ • ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ•˜๋ฉด ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋‹ค. 
ex) Redis

 

 

  • Wide Column DB
    • Big Table DB๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, Google์˜ BigTable Paper์—์„œ ์œ ๋ž˜๋˜์—ˆ๋‹ค. Column Family ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ , HBase, Cassandra, Hypertable์ด ์ด์— ํ•ด๋‹น๋œ๋‹ค.
ํ•˜๋‚˜์˜ ํ‚ค์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„๊ณผ ์ปฌ๋Ÿผ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•œ๋‹ค. ๋ชจ๋“  ์ปฌ๋Ÿผ์€ ํ•ญ์ƒ ํƒ€์ž„ ์Šคํƒฌํ”„ ๊ฐ’๊ณผ ํ•จ๊ป˜ ์ €์žฅ๋œ๋‹ค.
๊ตฌ๊ธ€์˜ ๋น…ํ…Œ์ด๋ธ”์ด ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ ์ฐจํ›„ ์ปฌ๋Ÿผํ˜• NoSQL ์€ ๋น…ํ…Œ์ด๋ธ”์˜ ์˜ํ–ฅ์„ ๋ฐ›์•˜๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ Row key, Column Key, Column Family ๊ฐ™์€ ๋น…ํ…Œ์ด๋ธ” ๊ฐœ๋…์ด ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์ €์žฅ์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๋Š” ์ปฌ๋Ÿผ์œผ๋กœ ์ปฌ๋Ÿผ์€ ์ปฌ๋Ÿผ ์ด๋ฆ„๊ณผ ์ปฌ๋Ÿผ ๊ฐ’, ํƒ€์ž„์Šคํƒฌํ”„๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์ปฌ๋Ÿผ๋“ค์˜ ์ง‘ํ•ฉ์ด ๋กœ์šฐ(Row)์ด๋ฉฐ, ๋กœ์šฐํ‚ค(Row key)๋Š” ๊ฐ ๋กœ์šฐ๋ฅผ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๋Š” ๊ฐ’์ด๋‹ค. ์ด๋Ÿฌํ•œ ๋กœ์šฐ๋“ค์˜ ์ง‘ํ•ฉ์€ ํ‚ค ์ŠคํŽ˜์ด์Šค(Key Space)๊ฐ€ ๋œ๋‹ค.
๋Œ€๋ถ€๋ถ„์˜ ์ปฌ๋Ÿผ ๋ชจ๋ธ NoSQL ์€ ์“ฐ๊ธฐ์™€ ์ฝ๊ธฐ ์ค‘์— ์“ฐ๊ธฐ์— ๋” ํŠนํ™”๋˜์–ด ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ปค๋ฐ‹๋กœ๊ทธ์™€ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•œ ํ›„ ์‘๋‹ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅธ ์‘๋‹ต์†๋„๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ฝ๊ธฐ ์—ฐ์‚ฐ ๋Œ€๋น„ ์“ฐ๊ธฐ ์—ฐ์‚ฐ์ด ๋งŽ์€ ์„œ๋น„์Šค๋‚˜ ๋น ๋ฅธ ์‹œ๊ฐ„ ์•ˆ์— ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐ€์žฅ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค. ์ฑ„ํŒ… ๋‚ด์šฉ ์ €์žฅ, ์‹ค์‹œ๊ฐ„ ๋ถ„์„์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ๋“ฑ์˜ ์„œ๋น„์Šค ๊ตฌํ˜„์— ์ ํ•ฉํ•˜๋‹ค.

 

 

  • KDoument DB
    • Lotus Notes์—์„œ ์œ ๋ž˜๋˜์—ˆ์œผ๋ฉฐ, JSON, XML๊ณผ ๊ฐ™์€ Collection ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋‹ค. Mongo DB, Cough DB๊ฐ€ ์ด ์ข…๋ฅ˜์— ํ•ด๋‹น๋œ๋‹ค.
ํ‚ค-๊ฐ’ ๋ชจ๋ธ์„ ๊ฐœ๋…์ ์œผ๋กœ ํ™•์žฅํ•œ ๊ตฌ์กฐ๋กœ ํ•˜๋‚˜์˜ ํ‚ค์— ํ•˜๋‚˜์˜ ๊ตฌ์กฐํ™”๋œ ๋ฌธ์„œ๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•œ๋‹ค. ๋…ผ๋ฆฌ์ ์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ๊ณผ ์กฐํšŒ ๋ฐฉ๋ฒ•์ด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์œ ์‚ฌํ•˜๋‹ค. ํ‚ค๋Š” ๋ฌธ์„œ์— ๋Œ€ํ•œ ID ๋กœ ํ‘œํ˜„๋œ๋‹ค. ๋˜ํ•œ ์ €์žฅ๋œ ๋ฌธ์„œ๋ฅผ ์ปฌ๋ ‰์…˜์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ ๋ฌธ์„œ ์ €์žฅ๊ณผ ๋™์‹œ์— ๋ฌธ์„œ ID ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๋ฌธ์„œ ID ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ O(1) ์‹œ๊ฐ„ ์•ˆ์— ๋ฌธ์„œ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์„œ ๋ชจ๋ธ NoSQL ์€ B ํŠธ๋ฆฌ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 2 ์ฐจ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. B ํŠธ๋ฆฌ๋Š” ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋ฉด ์ปค์งˆ์ˆ˜๋ก ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ์˜ ๋น„์œจ์ด 7:3 ์ •๋„์ผ ๋•Œ ๊ฐ€์žฅ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค. ์ค‘์•™ ์ง‘์ค‘์‹ ๋กœ๊ทธ ์ €์žฅ, ํƒ€์ž„๋ผ์ธ ์ €์žฅ, ํ†ต๊ณ„ ์ •๋ณด ์ €์žฅ ๋“ฑ์— ์‚ฌ์šฉ๋œ๋‹ค. ex) MongoDB

 

 

  • Graph DB
    • Euler & Graph Theory์—์„œ ์œ ๋ž˜ํ•œ DB์ด๋ฉฐ, Nodes, Relationship, Key-Value ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์ฑ„์šฉํ•˜๊ณ  ์žˆ๋‹ค. Neo4J ๋“ฑ์˜ ์ œํ’ˆ์ด ์žˆ๋‹ค.

 

 

 

 

 


References.

link1 link2

ํŠธ๋žœ์žญ์…˜์ด๋ž€ 


ํŠธ๋žœ์žญ์…˜์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ˆ˜ํ–‰์ด ์ผ๋ จ์˜ ์ฒ˜๋ฆฌ ๋‹จ์œ„๋กœ ๋ฌถ์ด๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

์œ„ ๊ทธ๋ฆผ์€ ์™ผ์ชฝ ๊ณ„์ขŒ์˜ ๋ˆ์„ ์˜ค๋ฅธ์ชฝ ๊ณ„์ขŒ๋กœ ์ž…๊ธˆํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.
์ฒซ๋ฒˆ ์งธ์ฒ˜๋Ÿผ ์™ผ์ชฝ ๊ณ„์ขŒ์—์„œ ์ถœ๊ธˆ์ด ์„ฑ๊ณต๋˜๋ฉด ์˜ค๋ฅธ์ชฝ ๊ณ„์ขŒ๋กœ ์ž…๊ธˆ๋œ๋‹ค.
ATM์˜ ๋ฌธ์ œ๋กœ ์™ผ์ชฝ์—์„œ ์ถœ๊ธˆ์ด ๋˜๊ณ  ๋ช‡ ๋ถ„ ํ›„, ์ถœ๊ธˆ์ด ์ทจ์†Œ๋˜์—ˆ๋‹ค๊ณ  ํ•˜๋ฉด ๋‘๋ฒˆ์งธ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์˜ค๋ฅธ์ชฝ ๊ณ„์ขŒ์—๋„ ์ž…๊ธˆ์ด ๋˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค.

๋งŒ์•ฝ ์ถœ๊ธˆ์€ ์ทจ์†Œ ๋˜์—ˆ๋Š”๋ฐ ์ž…๊ธˆ์ด ๋ผ๋ฒ„๋ฆฌ๋ฉด ํฐ ๊ธฐ๋Šฅ์ƒ์˜ ๋ฌธ์ œ์ธ ๊ฒƒ์ด๋‹ค.
์ด๋ ‡๊ฒŒ ์ผ๋ จ์˜ ์ฒ˜๋ฆฌ๊ฐ€ All or Nothing์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ์ด ํŠธ๋žœ์žญ์…˜์ด๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—… ๋‹จ์œ„
  • ์ƒํƒœ๋ฅผ ๋ณ€ํ™” ์‹œํ‚จ๋‹ค =  SQL ์งˆ์˜์–ด๋ฅผ ํ†ตํ•ด DB์— ์ ‘๊ทผํ•œ๋‹ค 
    • SELECT INSERT DELETE UPDATE
  • ์ž‘์—… ๋‹จ์œ„ ---> ๋งŽ์€ SQL ๋ช…๋ น๋ฌธ๋“ค์„ ์‚ฌ๋žŒ์ด ์ •ํ•˜๋Š” ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ •ํ•˜๋Š” ๊ฒƒ
    •  ๊ฒŒ์‹œํŒ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธ€์„ ์ž‘์„ฑํ•˜๊ณ  ์˜ฌ๋ฆฌ๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ํ›„ ๊ฒŒ์‹œํŒ์— ๋‹ค์‹œ ๋Œ์•„์˜ค๋ฉด ๊ฒŒ์‹œํŒ์— ๋‚ด๊ฐ€ ์“ด ๊ธ€์ด ์—…๋ฐ์ดํŠธ๋œ ์ƒํƒœ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
      • ์ด๋•Œ DB ์ž‘์—…
        • ์˜ฌ๋ฆฌ๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋‹ค. : INSERT๋ฌธ์„ ์‚ฌ์šฉํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฒŒ์‹œ๊ธ€ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊น€.
        • ๊ฒŒ์‹œํŒ ์ƒˆ๋กœ ๊ตฌ์„ฑ : SELECT๋ฌธ์„ ์‚ฌ์šฉํ•ด ์ตœ์‹  ์ •๋ณด๋ฅผ ์œ ์ง€.
      • ํ˜„์žฌ ์ž‘์—… ๋‹จ์œ„  INSERT ๋ฌธ + SELECT ๋ฌธ -----------> ์ด๋ฅผ ํ†ตํ‹€์–ด ํ•˜๋‚˜์˜ tranaction์ด๋ผ ํ•œ๋‹ค!

์ฆ‰. ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜ ์„ค๊ณ„๋ฅผ ์ž˜ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๋งŽ์€ ์ด์ ์„ ์ค€๋‹ค.

 

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

 

 

 

 

 

ํŠธ๋žœ์žญ์…˜์˜ Commit, Rollback ์—ฐ์‚ฐ


Commit

 ์ด๋ž€ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋๋‚ฌ๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ผ๊ด€์„ฑ์žˆ๋Š” ์ƒํƒœ์— ์žˆ์„ ๋•Œ, ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ด ๋๋‚ฌ๋‹ค๋ผ๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ฃผ๊ธฐ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์—ฐ์‚ฐ์ด๋‹ค.

์ด ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ˆ˜ํ–‰ํ–ˆ๋˜ ํŠธ๋žœ์žญ์…˜์ด ๋กœ๊ทธ์— ์ €์žฅ๋˜๋ฉฐ, ํ›„์— Rollback ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ–ˆ์—ˆ๋˜ ํŠธ๋žœ์žญ์…˜๋‹จ์œ„๋กœ ํ•˜๋Š”๊ฒƒ์„ ๋„์™€์ค€๋‹ค.

 

 

Rollback

์ด๋ž€ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์–ด ํŠธ๋žœ์žญ์…˜์˜ ์›์ž์„ฑ์ด ๊นจ์ง„๊ฒฝ์šฐ, ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜, ํŠธ๋žœ์žญ์…˜์˜ ๋ถ€๋ถ„์ ์œผ๋กœ๋งŒ ์—ฐ์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์ทจ์†Œ์‹œํ‚จ๋‹ค.

ํ›„์— ์‚ฌ์šฉ์ž๊ฐ€ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋œ ๋‹จ์œ„๋Œ€๋กœ Rollback์„ ์ง„ํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

 

 

ํŠธ๋žœ์žญ์…˜ ํŠน์ง• ACID


ACID 4๊ฐ€์ง€ ํŠน์„ฑ์„ ๋งŒ์กฑํ•ด์•ผํ•œ๋‹ค.

 

1. ์›์ž์„ฑ(Atomicity)

๋งŒ์•ฝ ํŠธ๋žœ์žญ์…˜ ์ค‘๊ฐ„์— ์–ด๋– ํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ํŠธ๋žœ์žญ์…˜์— ํ•ด๋‹นํ•˜๋Š” ์–ด๋– ํ•œ ์ž‘์—… ๋‚ด์šฉ๋„ ์ˆ˜ํ–‰๋˜์–ด์„œ๋Š” ์•ˆ๋˜๋ฉฐ ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ๋˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ์—๋งŒ ๋ชจ๋“  ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค.

 

2. ์ผ๊ด€์„ฑ(Consistency)

ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋œ ๋‹ค์Œ์˜ ์ƒํƒœ์—์„œ๋„ ํŠธ๋žœ์žญ์…˜์ด ์ผ์–ด๋‚˜๊ธฐ ์ „์˜ ์ƒํ™ฉ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ด์•ผ ํ•œ๋‹ค.

 

3. ๊ณ ๋ฆฝ์„ฑ(Isolation)

๊ฐ๊ฐ์˜ ํŠธ๋žœ์žญ์…˜์€ ์„œ๋กœ ๊ฐ„์„ญ์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค.

 

4. ์ง€์†์„ฑ(Durability)

ํŠธ๋žœ์žญ์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋œ ๋‹ค์Œ์—๋Š” ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ž‘์—…์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ €์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

 

 

 

 

ํŠธ๋žœ์žญ์…˜์˜ ์ƒํƒœ


 

Active

ํŠธ๋žœ์žญ์…˜์˜ ํ™œ๋™ ์ƒํƒœ. ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰์ค‘์ด๋ฉฐ ๋™์ž‘์ค‘์ธ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

 

Failed

ํŠธ๋žœ์žญ์…˜ ์‹คํŒจ ์ƒํƒœ. ํŠธ๋žœ์žญ์…˜์ด ๋”์ด์ƒ ์ •์ƒ์ ์œผ๋กœ ์ง„ํ–‰ ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

 

Partially Committed

ํŠธ๋žœ์žญ์…˜์˜ Commit ๋ช…๋ น์ด ๋„์ฐฉํ•œ ์ƒํƒœ. ํŠธ๋žœ์žญ์…˜์˜ commit์ด์ „ sql๋ฌธ์ด ์ˆ˜ํ–‰๋˜๊ณ  commit๋งŒ ๋‚จ์€ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

 

Committed

ํŠธ๋žœ์žญ์…˜ ์™„๋ฃŒ ์ƒํƒœ. ํŠธ๋žœ์žญ์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋œ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

 

Aborted

ํŠธ๋žœ์žญ์…˜์ด ์ทจ์†Œ ์ƒํƒœ. ํŠธ๋žœ์žญ์…˜์ด ์ทจ์†Œ๋˜๊ณ  ํŠธ๋žœ์žญ์…˜ ์‹คํ–‰ ์ด์ „ ๋ฐ์ดํ„ฐ๋กœ ๋Œ์•„๊ฐ„ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

 

Partially Committed ์™€ Committed ์˜ ์ฐจ์ด์ 

Commit ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ƒํƒœ๋Š” Partial Commited ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ์ดํ›„ Commit์„ ๋ฌธ์ œ์—†์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉดCommitted ์ƒํƒœ๋กœ ์ „์ด๋˜๊ณ , ๋งŒ์•ฝ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Failed ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

์ฆ‰, Partial Commited๋Š” Commit ์š”์ฒญ์ด ๋“ค์–ด์™”์„๋•Œ๋ฅผ ๋งํ•˜๋ฉฐ, Commited๋Š” Commit์„ ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒํ•œ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

 

 

 

 

์ž ๊ธˆ


โ–  ์ž ๊ธˆ(Locking)์ด๋ž€ ?

- ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์ผํ•œ ์‹œ๊ฐ„์— ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

- ์ž ๊ธˆ์€ ํŠธ๋žœ์žญ์…˜์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋„๋ก ํ•จ์œผ๋กœ์จ ์†์‹ค๋œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š”๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋ฉฐ ์ž๋™์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค.

- ์ž ๊ธˆ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ผ๊ด€์„ฑ ์œ ์ง€์™€ ๋™์‹œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

 

 

 โ–  ๋ธ”๋กœํ‚น(Blocking)์ด๋ž€ ?

- ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ์—‘์„ธ์Šคํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ด๋ฏธ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ทธ ์ž์›์„ ์ž ๊ทธ๊ณ  ์žˆ์–ด์„œ ๊ทธ ์ž ๊ธˆ์ด ํ’€๋ฆด ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ์ƒํ™ฉ์„ ๋งํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ฐจ๋‹จ์ด ์˜ค๋žซ๋™์•ˆ ์œ ์ง€๋  ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.

 

 

 

โ–  ์ž ๊ธˆ ๊ด€๋ฆฌ

- ๊ต์ฐฉ์ƒํƒœ(Dead Locks) :

  * ํŠธ๋žœ์žญ์…˜ A๋Š” ํŠธ๋žœ์žญ์…˜ B๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž ๊ทธ๊ณ  ์žˆ์œผ๋ฉด์„œ ํŠธ๋žœ์žญ์…˜ B๊ฐ€ ์ž ๊ทธ๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•œ๋‹ค.

  * ํŠธ๋žœ์žญ์…˜ B๋Š” ํŠธ๋žœ์žญ์…˜ A๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž ๊ทธ๊ณ  ์žˆ์œผ๋ฉด์„œ ํŠธ๋žœ์žญ์…˜ A๊ฐ€ ์ž ๊ทธ๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•œ๋‹ค.

- MSSQL ํ•ด๊ฒฐ๋ฐฉ๋ฒ• : ํ•œ์ชฝ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ(๋น„์šฉ์ด ์ ์€ ํŠธ๋žœ์žญ์…˜์˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒํ•œ๋‹ค.)

- SET DEADLOCK_PRIORITY ๋ฌธ์„ ์‚ฌ์šฉํ•ด ๊ต์ฐฉ ์ƒํƒœ ๋ฐœ์ƒ ์‹œ ํŠธ๋žœ์žญ์…˜์˜ ์ค‘์š”๋„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ์šฐ๋ฆฌ ํšŒ์‚ฌ์˜ ๊ฒฝ์šฐ sp_mon_blocking ํ”„๋กœ์‹œ์ €๋ฅผ ์ด์šฉํ•ด ๋ธ”๋กœํ‚น ์ƒํƒœ์ธ spid๋ฅผ ์ฐพ์•„๋‚ธ๋‹ค. ๋ธ”๋กœํ‚นํ•˜๊ณ  ์žˆ๋Š” spid ์„ธ์…˜์„ ์ฃฝ์ด๊ธฐ ์œ„ํ•ด ' kill [spid] ' ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ 


ํŠธ๋žœ์žญ์…˜์€ ๊ผญ ํ•„์š”ํ•œ ์ตœ์†Œ์˜ ์ฝ”๋“œ์—๋งŒ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ฆ‰ ํŠธ๋žœ์žญ์…˜์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ผ๋Š” ์˜๋ฏธ๋‹ค.

 

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜์€ ๊ฐœ์ˆ˜๊ฐ€ ์ œํ•œ์ ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๊ฐ ๋‹จ์œ„ ํ”„๋กœ๊ทธ๋žจ์ด ์ปค๋„ฅ์…˜์„ ์†Œ์œ ํ•˜๋Š” ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง„๋‹ค๋ฉด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์—ฌ์œ  ์ปค๋„ฅ์…˜์˜ ๊ฐœ์ˆ˜๋Š” ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค ์–ด๋Š ์ˆœ๊ฐ„์—๋Š” ๊ฐ ๋‹จ์œ„ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ปค๋„ฅ์…˜์„ ๊ฐ€์ ธ๊ฐ€๊ธฐ ์œ„ํ•ด ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

๊ต์ฐฉ์ƒํƒœ

๊ต์ฐฉ์ƒํƒœ๋ž€ ๋ฌด์—‡์ธ๊ฐ€
๋ณต์ˆ˜์˜ ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ์ผ์–ด๋‚ ์ˆ˜ ์žˆ๋‹ค. ๊ต์ฐฉ์ƒํƒœ๋ž€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํŠธ๋žœ์žญ์…˜์ด ํŠน์ • ์ž์›(ํ…Œ์ด๋ธ” ๋˜๋Š” ํ–‰)์˜ ์ž ๊ธˆ(Lock)์„ ํš๋“ํ•œ ์ฑ„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž ๊ธˆ์„ ์š”๊ตฌํ•˜๋ฉด ์•„๋ฌด๋ฆฌ ๊ธฐ๋‹ค๋ ค๋„ ์ƒํ™ฉ์ด ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ์ƒํƒœ๊ฐ€ ๋˜๋Š”๋ฐ, ์ด๋ฅผ ๊ต์ฐฉ์ƒํƒœ๋ผ๊ณ  ํ•œ๋‹ค.

 

 

 

๊ต์ฐฉ์ƒํƒœ์˜ ๋นˆ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๋ฐฉ๋ฒ•

  • ํŠธ๋žœ์žญ์…˜์„ ์ž์ฃผ ์ปค๋ฐ‹ํ•œ๋‹ค.
  • ์ •ํ•ด์ง„ ์ˆœ์„œ๋กœ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•œ๋‹ค. ์œ„์—์„œ ํŠธ๋žœ์žญ์…˜ 1 ์ด ํ…Œ์ด๋ธ” B -> A ์˜ ์ˆœ์œผ๋กœ ์ ‘๊ทผํ–ˆ๊ณ , ํŠธ๋žœ์žญ์…˜ 2 ๋Š” ํ…Œ์ด๋ธ” A -> B์˜ ์ˆœ์œผ๋กœ ์ ‘๊ทผํ–ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜๋“ค์ด ๋™์ผํ•œ ํ…Œ์ด๋ธ” ์ˆœ์œผ๋กœ ์ ‘๊ทผํ•˜๊ฒŒ ํ•œ๋‹ค.
  • ์ฝ๊ธฐ ์ž ๊ธˆ ํš๋“ (SELECT ~ FOR UPDATE)์˜ ์‚ฌ์šฉ์„ ํ”ผํ•œ๋‹ค.
  • ํ•œ ํ…Œ์ด๋ธ”์˜ ๋ณต์ˆ˜ ํ–‰์„ ๋ณต์ˆ˜์˜ ์—ฐ๊ฒฐ์—์„œ ์ˆœ์„œ ์—†์ด ๊ฐฑ์‹ ํ•˜๋ฉด ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค, ์ด ๊ฒฝ์šฐ์—๋Š” ํ…Œ์ด๋ธ” ๋‹จ์œ„์˜ ์ž ๊ธˆ์„ ํš๋“ํ•ด ๊ฐฑ์‹ ์„ ์ง๋ ฌํ™” ํ•˜๋ฉด ๋™์‹œ์„ฑ์„ ๋–จ์–ด์ง€์ง€๋งŒ ๊ต์ฐฉ์ƒํƒœ๋ฅผ ํšŒํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

 


Reference.

link1 link2 link3

์ •๊ทœํ™”์˜ ํƒ„์ƒ ๋ฐฐ๊ฒฝ

ํ•œ relation์—์„œ ์—ฌ๋Ÿฌ entity์˜ attribute๋“ค์„ ํ˜ผํ•ฉํ•˜๊ฒŒ ๋˜๋ฉด ์ •๋ณด๊ฐ€ ์ค‘๋ณต ์ €์žฅ๋˜๋ฉฐ ์ €์žฅ๊ณต๊ฐ„์„ ๋‚ญ๋น„ํ•˜๊ฒŒ ๋œ๋‹ค.

๋˜ํ•œ ์ด๋Ÿฐ ์ค‘๋ณต๋œ ์ •๋ณด๋กœ ์ธํ•ด ๊ฐฑ์‹  ์ด์ƒ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

๋™์ผํ•œ ์ •๋ณด๋ฅผ ํ•œ relation์—๋Š” ๋ณ€๊ฒฝํ•˜๊ณ  ๋‚˜๋จธ์ง€ relation์—์„œ๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์–ด๋Š ๊ฒƒ์ด ์ •ํ™•ํ•œ์ง€ ์•Œ ์ˆ˜ ์—†๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ •๊ทœํ™” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค.

 

๊ฐฑ์‹  ์ด์ƒ์ด๋ž€...?

1. ์‚ฝ์ž… ์ด์ƒ Insertion anomalies
์›ํ•˜์ง€ ์•Š๋Š” ์ž๋ฃŒ๊ฐ€ ์‚ฝ์ž…๋œ๋‹ค๋“ ์ง€, ์‚ฝ์ž…ํ•˜๋Š”๋ฐ ์ž๋ฃŒ๊ฐ€ ๋ถ€์กฑํ•ด ์‚ฝ์ž…์ด ๋˜์ง€ ์•Š์•„ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ 

2. ์‚ญ์ œ ์ด์ƒ Deletion anomalies
ํ•˜๋‚˜์˜ ์ž๋ฃŒ๋งŒ ์‚ญ์ œํ•˜๊ณ  ์‹ถ์ง€๋งŒ, ๊ทธ ์ž๋ฃŒ๊ฐ€ ํฌํ•จ๋œ ํŠœํ”Œ ์ „์ฒด๊ฐ€ ์‚ญ์ œ๋จ์œผ๋กœ ์›ํ•˜์ง€ ์•Š๋Š” ์ •๋ณด ์†์‹ค์ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ 

3. ์ˆ˜์ • ์ด์ƒ Modification anomalies
์ •ํ™•ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ผ๋ถ€์˜ ํŠœํ”Œ๋งŒ ๊ฐฑ์‹ ๋˜์–ด ์ •๋ณด๊ฐ€ ๋ชจํ˜ธํ•ด์ง€๊ฑฐ๋‚˜ ์ผ๊ด€์„ฑ์ด ์—†์–ด์ ธ ์ •ํ™•ํ•œ ์ •๋ณด ํŒŒ์•…์ด ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ์ 

 

 

 

์ •๊ทœํ™”๋ž€

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๋Š” ์ž‘์—…์ด๋‹ค. ์ข€ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ๋Š” ๋ถˆ๋งŒ์กฑ์Šค๋Ÿฌ์šด ๋‚˜์œ relation์˜ attribute๋“ค์„ ๋‚˜๋ˆ„์–ด์„œ ์ข‹์€ ์ž‘์€ relation์œผ๋กœ ๋ถ„ํ•ดํ•˜๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค.

๋‚˜์œ relation ?
์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ์• ํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ„์— ํ•จ์ˆ˜์  ์ข…์†์„ฑ(Functional Dependency)์„ ํŒ๋‹จํ•˜๋Š”๋ฐ, ๊ฐ๊ฐ์˜ ์ •๊ทœํ˜•๋งˆ๋‹ค ์–ด๋– ํ•œ ํ•จ์ˆ˜์  ์ข…์†์„ฑ์„ ๋งŒ์กฑํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ์ •๊ทœํ˜•์ด ์ •์˜๋˜๊ณ , ๊ทธ ์ •๊ทœํ˜•์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋Š” ์ •๊ทœํ˜•์„ ๋‚˜์œ ๋ฆด๋ ˆ์ด์…˜์œผ๋กœ ํŒŒ์•…ํ•œ๋‹ค.

ํ•จ์ˆ˜์  ์ข…์†์„ฑ์€..?
์• ํŠธ๋ฆฌ๋ทฐํŠธ ๋ฐ์ดํ„ฐ๋“ค์˜ ์˜๋ฏธ์™€ ์• ํŠธ๋ฆฌ๋ทฐํŠธ๋“ค ๊ฐ„์˜ ์ƒํ˜ธ ๊ด€๊ณ„๋กœ๋ถ€ํ„ฐ ์œ ๋„๋˜๋Š” ์ œ์•ฝ์กฐ๊ฑด์˜ ์ผ์ข…์ด๋‹ค. 

 

์ •๊ทœํ™” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋˜๋ฉด ์ •๊ทœํ˜•์„ ๋งŒ์กฑํ•˜๊ฒŒ ๋œ๋‹ค. ์ •๊ทœํ˜•์ด๋ž€ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฆด๋ ˆ์ด์…˜์˜ ์Šคํ‚ค๋งˆ์˜ ํ˜•ํƒœ๋ฅผ ๋งํ•˜๋ฉฐ ์ œ 1 ์ •๊ทœํ˜•, ์ œ 2 ์ •๊ทœํ˜•, ์ œ 3 ์ •๊ทœํ˜•, … ๋“ฑ์ด ์กด์žฌํ•œ๋‹ค.

 

์ œ 1 ์ •๊ทœํ˜•

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

์ œ 2 ์ •๊ทœํ˜•

๋ชจ๋“  ๋น„์ฃผ์š” ์• ํŠธ๋ฆฌ๋ทฐํŠธ๋“ค์ด ์ฃผ์š” ์• ํŠธ๋ฆฌ๋ทฐํŠธ์— ๋Œ€ํ•ด์„œ ์™„์ „ ํ•จ์ˆ˜์  ์ข…์†์ด๋ฉด ์ œ 2 ์ •๊ทœํ˜•์„ ๋งŒ์กฑํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์™„์ „ ํ•จ์ˆ˜์  ์ข…์†์ด๋ž€ X -> Y ๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, X ์˜ ์–ด๋– ํ•œ ์• ํŠธ๋ฆฌ๋ทฐํŠธ๋ผ๋„ ์ œ๊ฑฐํ•˜๋ฉด ๋” ์ด์ƒ ํ•จ์ˆ˜์  ์ข…์†์„ฑ์ด ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค. ์ฆ‰, ํ‚ค๊ฐ€ ์•„๋‹Œ ์—ด๋“ค์ด ๊ฐ๊ฐ ํ›„๋ณดํ‚ค์— ๋Œ€ํ•ด ๊ฒฐ์ •๋˜๋Š” ๋ฆด๋ ˆ์ด์…˜ ํ˜•ํƒœ๋ฅผ ๋งํ•œ๋‹ค.

์ œ 3 ์ •๊ทœํ˜•

์–ด๋– ํ•œ ๋น„์ฃผ์š” ์• ํŠธ๋ฆฌ๋ทฐํŠธ๋„ ๊ธฐ๋ณธํ‚ค์— ๋Œ€ํ•ด์„œ ์ดํ–‰์ ์œผ๋กœ ์ข…์†๋˜์ง€ ์•Š์œผ๋ฉด ์ œ 3 ์ •๊ทœํ˜•์„ ๋งŒ์กฑํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ดํ–‰ ํ•จ์ˆ˜์  ์ข…์†์ด๋ž€ X - >Y, Y -> Z์˜ ๊ฒฝ์šฐ์— ์˜ํ•ด์„œ ์ถ”๋ก ๋  ์ˆ˜ ์žˆ๋Š” X -> Z์˜ ์ข…์†๊ด€๊ณ„๋ฅผ ๋งํ•œ๋‹ค. ์ฆ‰, ๋น„์ฃผ์š” ์• ํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ ๋น„์ฃผ์š” ์• ํŠธ๋ฆฌ๋ทฐํŠธ์— ์˜ํ•ด ์ข…์†๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—†๋Š” ๋ฆด๋ ˆ์ด์…˜ ํ˜•ํƒœ๋ฅผ ๋งํ•œ๋‹ค.

BCNF(Boyce-Codd) ์ •๊ทœํ˜•

์—ฌ๋Ÿฌ ํ›„๋ณด ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ฆด๋ ˆ์ด์…˜์— ํ•ด๋‹นํ•˜๋Š” ์ •๊ทœํ™” ๋‚ด์šฉ์ด๋‹ค. ๋ณต์žกํ•œ ์‹๋ณ„์ž ๊ด€๊ณ„์— ์˜ํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ œ 3 ์ •๊ทœํ˜•์„ ๋ณด์™„ํ•˜๋Š”๋ฐ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค. ๋น„์ฃผ์š” ์• ํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ ํ›„๋ณดํ‚ค์˜ ์ผ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ถ„ํ•ดํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค.

๊ฐ ์ •๊ทœํ˜•์€ ๊ทธ์˜ ์„ ํ–‰ ์ •๊ทœํ˜•๋ณด๋‹ค ๋” ์—„๊ฒฉํ•œ ์กฐ๊ฑด์„ ๊ฐ–๋Š”๋‹ค.

  • ๋ชจ๋“  ์ œ 2 ์ •๊ทœํ˜• ๋ฆด๋ ˆ์ด์…˜์€ ์ œ 1 ์ •๊ทœํ˜•์„ ๊ฐ–๋Š”๋‹ค.
  • ๋ชจ๋“  ์ œ 3 ์ •๊ทœํ˜• ๋ฆด๋ ˆ์ด์…˜์€ ์ œ 2 ์ •๊ทœํ˜•์„ ๊ฐ–๋Š”๋‹ค.
  • ๋ชจ๋“  BCNF ์ •๊ทœํ˜• ๋ฆด๋ ˆ์ด์…˜์€ ์ œ 3 ์ •๊ทœํ˜•์„ ๊ฐ–๋Š”๋‹ค.

์ˆ˜๋งŽ์€ ์ •๊ทœํ˜•์ด ์žˆ์ง€๋งŒ ๊ด€๊ณ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„์˜ ๋ชฉํ‘œ๋Š” ๊ฐ ๋ฆด๋ ˆ์ด์…˜์ด 3NF(or BCNF)๋ฅผ ๊ฐ–๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 

์ •๊ทœํ™”์˜ ์žฅ์ 

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

 

 

์ •๊ทœํ™”์˜ ๋‹จ์ 

๋ฆด๋ ˆ์ด์…˜์˜ ๋ถ„ํ•ด๋กœ ์ธํ•ด ๋ฆด๋ ˆ์ด์…˜ ๊ฐ„์˜ ์—ฐ์‚ฐ(JOIN ์—ฐ์‚ฐ)์ด ๋งŽ์•„์ง„๋‹ค.

์ด๋กœ ์ธํ•ด ์งˆ์˜์— ๋Œ€ํ•œ ์‘๋‹ต ์‹œ๊ฐ„์ด ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

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

 

๋”ฐ๋ผ์„œ ์ •๊ทœํ™”๋œ ํ…Œ์ด๋ธ”์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์†๋„๊ฐ€ ๋นจ๋ผ์งˆ ์ˆ˜๋„ ์žˆ๊ณ  ๋Š๋ ค์งˆ ์ˆ˜๋„ ์žˆ๋Š” ํŠน์„ฑ์ด ์žˆ๋‹ค.

 

์ด์™€ ๊ฐ™์€ ๋‹จ์ ์ด ์žˆ๋‹ค๋ฉด, ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์ •๊ทœํ™”๋ฅผ ์ง„ํ–‰ํ•ด์•ผํ•˜๋Š”๊ฐ€?

๋ฐ˜์ •๊ทœํ™”(De-normalization, ๋น„์ •๊ทœํ™”)
๋ฐ˜์ •๊ทœํ™”๋Š” ์ •๊ทœํ™”๋œ ์—”ํ‹ฐํ‹ฐ, ์†์„ฑ, ๊ด€๊ณ„๋ฅผ ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๋ฐ ๊ฐœ๋ฐœ๊ณผ ์šด์˜์˜ ๋‹จ์ˆœํ™”๋ฅผ ์œ„ํ•ด ์ค‘๋ณต ํ†ตํ•ฉ, ๋ถ„๋ฆฌ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๋””์Šคํฌ I/O ๋Ÿ‰์ด ๋งŽ์•„์„œ ์กฐํšŒ ์‹œ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๊ฑฐ๋‚˜, ํ…Œ์ด๋ธ”๋ผ๋ฆฌ์˜ ๊ฒฝ๋กœ๊ฐ€ ๋„ˆ๋ฌด ๋ฉ€์–ด ์กฐ์ธ์œผ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์˜ˆ์ƒ๋˜๊ฑฐ๋‚˜, ์นผ๋Ÿผ์„ ๊ณ„์‚ฐํ•˜์—ฌ ์กฐํšŒํ•  ๋•Œ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ๊ฒƒ์ด ์˜ˆ์ƒ๋˜๋Š” ๊ฒฝ์šฐ ๋ฐ˜์ •๊ทœํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์กฐํšŒ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จ๋  ๋•Œ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ฐ˜์ •๊ทœํ™”๋ฅผ ๊ณ ๋ คํ•˜๊ฒŒ ๋œ๋‹ค.

* ๋ฐ˜์ •๊ทœํ™”์˜ ๋Œ€์ƒ
1. ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํ…Œ์ด๋ธ”์— ์•ก์„ธ์Šคํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ๊ณ , ํ•ญ์ƒ ์ผ์ •ํ•œ ๋ฒ”์œ„๋งŒ์„ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ
2. ํ…Œ์ด๋ธ”์— ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๊ณ  ๋Œ€๋Ÿ‰์˜ ๋ฒ”์œ„๋ฅผ ์ž์ฃผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ
3. ์„ฑ๋Šฅ ์ƒ ์ด์Šˆ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ
4. ํ…Œ์ด๋ธ”์— ์ง€๋‚˜์น˜๊ฒŒ ์กฐ์ธ์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ์ˆ ์ ์œผ๋กœ ์–ด๋ ค์šธ ๊ฒฝ์šฐ


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

Reference.

๋งํฌ1

Index

์นผ๋Ÿผ์˜ ๊ฐ’๊ณผ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋œ ์ฃผ์†Œ๋ฅผ ํ‚ค์™€ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์–ด๋‘”๋‹ค.

 

* DBMS์˜ ์ธ๋ฑ์Šค๋Š” ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

์›ํ•˜๋Š” ๊ฐ’์„ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์€ ๋น ๋ฅด์ง€๋งŒ ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ, ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” query๋ฌธ ์‹คํ–‰ ์†๋„๊ฐ€ ๋Š๋ ค์ง„๋‹ค.

DBMS์—์„œ ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ์„ฑ๋Šฅ์„ ํฌ์ƒํ•˜๋Š” ๋Œ€์‹  ๋ฐ์ดํ„ฐ์˜ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

 

 

 

Index ์ž๋ฃŒ๊ตฌ์กฐ - DBMS์˜ ์ธ๋ฑ์Šค ๊ด€๋ฆฌ

B+- Tree Index ์•Œ๊ณ ๋ฆฌ์ฆ˜
์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
B +- ์ธ๋ฑ์Šค๋Š” ์นผ๋Ÿผ์˜ ๊ฐ’์„ ๋ณ€ํ˜•ํ•˜์ง€ ์•Š๊ณ (์‚ฌ์‹ค์€๊ฐ’์˜ ์•ž๋ถ€๋ถ„๋งŒ ์ž˜๋ผ์„œ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ํ•œ๋‹ค),
์›๋ž˜์˜ ๊ฐ’์„ ์ด์šฉํ•ด ์ธ๋ฑ์‹ฑํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

 

Hash ์ธ๋ฑ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜

์นผ๋Ÿผ์˜ ๊ฐ’์œผ๋กœ ํ•ด์‹œ ๊ฐ’์„ ๊ณ„์‚ฐํ•ด์„œ ์ธ๋ฑ์‹ฑํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋งค์šฐ ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ์ง€์›ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฐ’์„ ๋ณ€ํ˜•ํ•ด์„œ ์ธ๋ฑ์‹ฑํ•˜๋ฏ€๋กœ, ํŠน์ • ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฐ’์œผ๋กœ ๊ฒ€์ƒ‰์„ ํ•˜๋Š” ์ „๋ฐฉ ์ผ์น˜์™€ ๊ฐ™์ด ๊ฐ’์˜ ์ผ๋ถ€๋งŒ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” ํ•ด์‹œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

์ฃผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

 

์™œ index ๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ b-tree ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?
๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(1)์ธ hash table ์ด ๋” ํšจ์œจ์ ์ผ ๊ฒƒ ๊ฐ™์€๋ฐ?
SELECT ์งˆ์˜์˜ ์กฐ๊ฑด์—๋Š” ๋ถ€๋“ฑํ˜ธ(<>) ์—ฐ์‚ฐ๋„ ํฌํ•จ์ด ๋œ๋‹ค.
hash table ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋“ฑํ˜ธ(=) ์—ฐ์‚ฐ์ด ์•„๋‹Œ ๋ถ€๋“ฑํ˜ธ ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
๋™๋“ฑ ์—ฐ์‚ฐ(=)์— ํŠนํ™”๋œ hashtable์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

 

 

 

Primary Index vs Secondary Index

ํด๋Ÿฌ์Šคํ„ฐ(Cluster)๋ž€ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๋Š”๋‹ค๋Š” ์˜๋ฏธ๋กœ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋„ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค. ์ธ๋ฑ์Šค์—์„œ ํด๋Ÿฌ์Šคํ„ฐ๋“œ๋Š” ๋น„์Šทํ•œ ๊ฒƒ๋“ค์„ ๋ฌถ์–ด์„œ ์ €์žฅํ•˜๋Š” ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋˜๋Š”๋ฐ, ์ด๋Š” ์ฃผ๋กœ ๋น„์Šทํ•œ ๊ฐ’๋“ค์„ ๋™์‹œ์— ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๋Š” ์ ์—์„œ ์ฐฉ์•ˆ๋œ ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๋น„์Šทํ•œ ๊ฐ’๋“ค์€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ธ์ ‘ํ•œ ์žฅ์†Œ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ๋งํ•œ๋‹ค.
ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”์˜ ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค์— ๋Œ€ํ•ด์„œ๋งŒ ์ ์šฉ๋˜๋Š” ๋‚ด์šฉ์ด๋‹ค. ์ฆ‰ ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค ๊ฐ’์ด ๋น„์Šทํ•œ ๋ ˆ์ฝ”๋“œ๋ผ๋ฆฌ ๋ฌถ์–ด์„œ ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค์—์„œ๋Š” ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค ๊ฐ’์— ์˜ํ•ด ๋ ˆ์ฝ”๋“œ์˜ ์ €์žฅ ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋˜๋ฉฐ ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๊ทธ ๋ ˆ์ฝ”๋“œ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ ์œ„์น˜ ๋˜ํ•œ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ๊ฒฐ์ •ํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ” ๋‹น ํ•œ ๊ฐœ๋งŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค์— ๋Œ€ํ•ด์„œ๋งŒ ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค, ์ด์— ๋ฐ˜ํ•ด non ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ” ๋‹น ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.


Composite Index

์ธ๋ฑ์Šค๋กœ ์„ค์ •ํ•˜๋Š” ํ•„๋“œ์˜ ์†์„ฑ์ด ์ค‘์š”ํ•˜๋‹ค. title, author ์ด ์ˆœ์„œ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•œ๋‹ค๋ฉด title ์„ search ํ•˜๋Š” ๊ฒฝ์šฐ, index ๋ฅผ ์ƒ์„ฑํ•œ ํšจ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ, author ๋งŒ์œผ๋กœ search ํ•˜๋Š” ๊ฒฝ์šฐ, index ๋ฅผ ์ƒ์„ฑํ•œ ๊ฒƒ์ด ์†Œ์šฉ์ด ์—†์–ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ SELECT ์งˆ์˜๋ฅผ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ๊ฐ€๊ฐ€ ์ธ๋ฑ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑํ•  ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•ด ๋งŽ์€ ์˜ํ–ฅ์„ ๋ผ์น˜๊ฒŒ ๋œ๋‹ค.

 

 


Index์˜ ์„ฑ๋Šฅ๊ณผ ๊ณ ๋ คํ•ด์•ผํ•  ์‚ฌํ•ญ

SELECT ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ์›”๋“ฑํžˆ ํ–ฅ์ƒ์‹œํ‚ค๋Š” INDEX ํ•ญ์ƒ ์ข‹์„๊นŒ?  ์•„๋‹ˆ๋‹ค.

 

- INDEX ๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด INSERT, DELETE, UPDATE ์ฟผ๋ฆฌ๋ฌธ์„ ์‹คํ–‰ํ•  ๋•Œ ๋ณ„๋„์˜ ๊ณผ์ •์ด ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐœ์ƒ

INSERT ์˜ ๊ฒฝ์šฐ INDEX ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ทธ๋งŒํผ ์„ฑ๋Šฅ์— ์†์‹ค์ด ๋”ฐ๋ฅธ๋‹ค.

DELETE ์˜ ๊ฒฝ์šฐ INDEX ์— ์กด์žฌํ•˜๋Š” ๊ฐ’์€ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ ์•ˆํ•œ๋‹ค๋Š” ํ‘œ์‹œ๋กœ ๋‚จ๊ฒŒ ๋œ๋‹ค.

์ฆ‰ row ์˜ ์ˆ˜๋Š” ๊ทธ๋Œ€๋กœ์ธ ๊ฒƒ์ด๋‹ค. ์ด ์ž‘์—…์ด ๋ฐ˜๋ณต๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” 10 ๋งŒ๊ฑด์ธ๋ฐ ๋ฐ์ดํ„ฐ๊ฐ€ 100 ๋งŒ๊ฑด ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋‚ณ์„ ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ธ๋ฑ์Šค๋Š” ๋” ์ด์ƒ ์ œ ์—ญํ• ์„ ๋ชปํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

UPDATE ์˜ ๊ฒฝ์šฐ๋Š” INSERT ์˜ ๊ฒฝ์šฐ, DELETE ์˜ ๊ฒฝ์šฐ์˜ ๋ฌธ์ œ์ ์„ ๋™์‹œ์— ์ˆ˜๋ฐ˜ํ•œ๋‹ค.

์ด์ „ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜๊ณ  ๊ทธ ์ž๋ฆฌ์— ์ƒˆ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค๋Š” ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ฆ‰ ๋ณ€๊ฒฝ ์ „ ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œ๋˜์ง€ ์•Š๊ณ  insert ๋กœ ์ธํ•œ split ๋„ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

- ์ปฌ๋Ÿผ์„ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์— ๋”ฐ๋ผ์„œ ์ธ๋ฑ์Šค์˜ ์„ฑ๋Šฅ์ด ์•…์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค.

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

 

์ด๋ฆ„, ๋‚˜์ด, ์„ฑ๋ณ„ ์„ธ ๊ฐ€์ง€์˜ ํ•„๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ํ…Œ์ด๋ธ”์„ ์ƒ๊ฐํ•ด๋ณด์ž.

์ด๋ฆ„์€ ์˜จ๊ฐ– ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์กด์žฌํ•  ๊ฒƒ์ด๋ฉฐ ๋‚˜์ด๋Š” INT ํƒ€์ž…์„ ๊ฐ–์„ ๊ฒƒ์ด๊ณ , ์„ฑ๋ณ„์€ ๋‚จ, ๋…€ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•  ๊ฒƒ์ž„์„ ์‰ฝ๊ฒŒ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์–ด๋–ค ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด์„œ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ผ๊นŒ? ์ด๋ฆ„์— ๋Œ€ํ•ด์„œ๋งŒ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ํšจ์œจ์ ์ด๋‹ค.

 

*์™œ ์„ฑ๋ณ„์ด๋‚˜ ๋‚˜์ด๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋น„ํšจ์œจ์ ์ผ๊นŒ? 

10000 ๋ ˆ์ฝ”๋“œ์— ํ•ด๋‹นํ•˜๋Š” ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด์„œ 2000 ๋‹จ์œ„๋กœ ์„ฑ๋ณ„์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๊ฐ’์˜ range ๊ฐ€ ์ ์€ ์„ฑ๋ณ„์€ ์ธ๋ฑ์Šค๋ฅผ ์ฝ๊ณ  ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋””์Šคํฌ I/O ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๋งŒํผ ๋น„ํšจ์œจ์ ์ธ ๊ฒƒ์ด๋‹ค.

 

 

 

 


< ์ฐธ๊ณ  >

https://mungto.tistory.com/312

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

ํŒŒ์ผ์ฒ˜๋ฆฌ์‹œ์Šคํ…œ์˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅ
๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„๋†“์€ ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์ฒด
๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ

๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ
์ด์ „์—๋Š” ๊ตฌ์กฐํ™”๋˜์ง€ ์•Š์€ ํŒŒ์ผ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์ด์—ˆ๋‹ค. 
ํ•˜์ง€๋งŒ ํŒŒ์ผ์ฒ˜๋ฆฌ์—๋Š” ๋‹ค์–‘ํ•œ ๋ฌธ์ œ์ ๋“ค์ด ์žˆ์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ๋‹ค. 

 

 

 

 

*ํŒŒ์ผ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์˜ ๋ฌธ์ œ์ 

 

1) ์ค‘๋ณต : ํŒŒ์ผ์ฒ˜๋ฆฌ์‹œ์Šคํ…œ์€ ๊ฐ ํŒŒ์ผ๋งˆ๋‹ค ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ๊ฐ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ ์ „์ฒด์ ์ธ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ, ๊ฒฝ์ œ๋น„์šฉ์— ์žˆ์–ด์„œ ํšจ์œจ์ด ์—†๋‹ค.

 

2) ๋น„์ผ๊ด€์„ฑ : ๋ฐ์ดํ„ฐ์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์กฐ๊ธˆ๋งŒ ์žˆ์–ด๋„ ๊ฐ ํŒŒ์ผ์—์„œ ํ•ด๋‹น๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ˆ˜์ •์— ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ , ํ•œ๊บผ๋ฒˆ์— ์ˆ˜์ •์ด ๋˜์ง€ ์•Š์œผ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ’์ด ์„œ๋กœ ํ‹€๋ฆฌ๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.

 

3) ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ ๋ฌธ์ œ : ๊ธฐ์กด์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์€ ํŒŒ์ผ ์šฉ๋„์—๋งŒ ๋งž์ถฐ์„œ ์ œ์ž‘๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๋•Œ๋Š” ๋‹ค์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค

 

4) ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ ๋ฐ ๊ฒ€์ƒ‰์˜ ๋ฌธ์ œ : ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ํŒŒ์ผ์— ์‚ฐ์žฌํ•˜๊ณ  ๋˜ ๊ทธ ํŒŒ์ผ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์–‘์‹์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฅ ์ ์ธ ๊ฒ€์ƒ‰์ด๋‚˜ ๋‹จ์ˆœ ์ถ”๊ฐ€ ์ž‘์—…์ด ์–ด๋ ต๋‹ค.

 

 

 

 

 


 

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠน์ง•

1. ๋ฐ์ดํ„ฐ์˜ ๋…๋ฆฝ์„ฑ

  • ๋ฌผ๋ฆฌ์  ๋…๋ฆฝ์„ฑ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•ด๋„ ๊ด€๋ จ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ๋…ผ๋ฆฌ์  ๋…๋ฆฝ์„ฑ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋…ผ๋ฆฌ์ ์ธ ๊ตฌ์กฐ๋กœ ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋…ผ๋ฆฌ์  ์š”๊ตฌ๋ฅผ ๋งŒ์กฑ์‹œ์ผœ์ค€๋‹ค.

 

2. ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ 

  • ๋ฐ์ดํ„ฐ๋Š” ์—ฌ๋Ÿฌ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด์„œ ๋“ค์–ด์˜ค๋Š”๋ฐ, ๋ฐ์ดํ„ฐ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ๋ฐ์ดํ„ฐ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ด์„œ ๋ฌด๊ฒฐ์„ฑ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

 

3. ๋ฐ์ดํ„ฐ์˜ ๋ณด์•ˆ์„ฑ

  • ์ธ๊ฐ€๋œ ์‚ฌ์šฉ์ž๋“ค๋งŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์— ์ž์›์„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณ„์ • ๊ด€๋ฆฌ ๋˜๋Š” ์ ‘๊ทผ ๊ถŒํ•œ์„ ์„ค์ •

 

4. ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ

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

 

5. ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต ์ตœ์†Œํ™”

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉํ•ด์„œ ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ, ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๋‹จ์  ์ค‘ ํ•˜๋‚˜์ธ ์ž๋ฃŒ์˜ ์ค‘๋ณต๊ณผ ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ฑ ๋ฌธ์ œ๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์žฅ์ 

1. ๋ฐ์ดํ„ฐ ๊ณต์œ 

2. ๋ฐ์ดํ„ฐ ์ค‘๋ณต์˜ ์ตœ์†Œํ™”

3. ๊ณ„์†์  ๋ณ€ํ™”์— ๋Œ€ํ•œ ์ ์‘

4. ๋ณด์•ˆ์„ฑ

 

 

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ

๋””์Šคํฌ I/O๋ฅผ ์–ด๋–ป๊ฒŒ ์ค„์ด๋ƒ์— ๋”ฐ๋ผ ๋‹ฌ๋ ค์žˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๋ฐ ๋””์Šคํฌ ํ—ค๋”์˜ ์œ„์น˜ ์ด๋™์—†์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ์ด ๊ธฐ๋กํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์ˆœ์ฐจ์ ์œผ๋กœ I/O๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š”๊ฒŒ ๋žœ๋ค I/O๋ณด๋‹ค ๋น ๋ฅด๋‹ค.

 

 

 

์ฟผ๋ฆฌ ์ตœ์ ํ™”, ๋น ๋ฅธ ์ฟผ๋ฆฌ๋ฅผ ์œ„ํ•œ 7๊ฐ€์ง€ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

1. SELECT ์‹œ์—๋Š” ๊ผญ ํ•„์š”ํ•œ ์นผ๋Ÿผ๋งŒ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•œ๋‹ค.

  • ๋„ˆ๋ฌด ๋งŽ์€ ํ•„๋“œ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜๋ก DB๋Š” ๋” ๋งŽ์€ ๋กœ๋“œ๋ฅผ ๋ถ€๋‹ดํ•˜๊ธฐ ๋•Œ๋ฌธ์—

 

2. ์กฐ๊ฑด ๋ถ€์—ฌ์‹œ, ๊ฐ€๊ธ‰์  ๊ธฐ์กด DB๊ฐ’์— ๋ณ„๋„์˜ ์—ฐ์‚ฐ์„ ๊ฑธ์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  • ์กฐ๊ฑด ๊ฒ€์ƒ‰์ด ํ•„์š”ํ• ๋•Œ ๊ตณ์ด ๋ชจ๋“  ํ•„๋“œ ๊ฐ’์„ ํƒ์ƒ‰ํ•  ํ•„์š” ์—†๊ฒŒ ์ฟผ๋ฆฌ๋ฅผ ์งœ์ฃผ์ž

 

3. LIKE ์‚ฌ์šฉ์‹œ %(์™€์ผ๋“œ์นด๋“œ๋ฌธ์ž์—ด)๋ฅผ string ์•ž๋ถ€๋ถ„์— ๋ฐฐ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  • ์œ„์˜ 2๋ฒˆ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ full table scan์„ ๋ง‰๊ฒŒ ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ ์กฐ๊ฑด์ ˆ์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ํšจ๊ณผ์ ์ด๋‹ค.

 

4. SELECT DISTINCT, UNION DISTINCT์™€ ๊ฐ™์ด ์ค‘๋ณต ๊ฐ’์„ ์ œ๊ฑฐํ•˜๋Š” ์—ฐ์‚ฐ์€ ์ตœ๋Œ€ํ•œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค.

  • ์ค‘๋ณต ๊ฐ’์„ ์ œ๊ฑฐํ•˜๋Š” ์—ฐ์‚ฐ์€ ์‹œ๊ฐ„์ด ๋งŽ์ด๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ์ฐจ๋ผ๋ฆฌ EXISTS๋ฅผ ์‚ฌ์šฉํ•˜์ž.

 

5. ๊ฐ™์€ ๋‚ด์šฉ์˜ ์กฐ๊ฑด์ด๋ผ๋ฉด, GROUP BY ์—ฐ์‚ฐ ์‹œ์—๋Š” ๊ฐ€๊ธ‰์  HAVING๋ณด๋‹ค๋Š” WHERE ์ ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  • WHERE ์ ˆ์ด HAVING์ ˆ๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— WHERE๋กœ ๋ฏธ๋ฆฌ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ์ค„์—ฌ ๋†“๋Š”๊ฒŒ ์ข‹๋‹ค.

 

6. 3๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ INNER JOIN ํ•  ๋•Œ๋Š”, ํฌ๊ธฐ๊ฐ€ ๊ฐ€์žฅ ํฐ ํ…Œ์ด๋ธ”์„ FROM ์ ˆ์— ๋ฐฐ์น˜ํ•˜๊ณ , INNER JOIN ์ ˆ์—๋Š” ๋‚จ์€ ํ…Œ์ด๋ธ”์„ ์ž‘์€ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  • INNER JOIN ๊ณผ์ •์—์„œ ์ตœ์†Œํ•œ์˜ Combination์„ ํƒ์ƒ‰ํ•˜๋„๋ก FROM & INNER JOIN์˜ ์ˆœ์„œ๋ฅผ ๋ฐฐ์—ดํ•˜๋ฉด ์ข‹๋‹ค๋Š” ์ด์•ผ๊ธฐ์ธ๋ฐ, ํ•ญ์ƒ ํ†ต์šฉ๋˜์ง€๋Š” ์•Š๋‹ค.

 

7. ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์— ๋Œ€ํ•ด์„œ๋Š” ๋ฏธ๋ฆฌ ์ „์ฒ˜๋ฆฌ๋œ ํ…Œ์ด๋ธ”์„ ๋”ฐ๋กœ ๋ณด๊ด€, ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ๋„ ์ข‹๋‹ค.

 

 

 

 


<์ฐธ๊ณ >

https://velog.io/@redgem92/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0%EC%99%80-%ED%8A%B9%EC%A7%95 https://yang1650.tistory.com/28

https://medium.com/watcha/%EC%BF%BC%EB%A6%AC-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%AB%EA%B1%B8%EC%9D%8C-%EB%B3%B4%EB%8B%A4-%EB%B9%A0%EB%A5%B8-%EC%BF%BC%EB%A6%AC%EB%A5%BC-%EC%9C%84%ED%95%9C-7%EA%B0%80%EC%A7%80-%EC%B2%B4%ED%81%AC-%EB%A6%AC%EC%8A%A4%ED%8A%B8-bafec9d2c073

+ Recent posts