๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„

[๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ข ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๊ฐœ๋ฐœ์ž HOON 2022. 10. 31. 14:37

๐Ÿง‘๐Ÿป‍๐Ÿ’ป ๊ธ€์„ ์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ..

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

 

 

๐Ÿง‘๐Ÿป‍๐Ÿ’ป ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฉด์ ‘ ์งˆ๋ฌธ

๐Ÿ’ก 1. DBMS๊ฐ€ ๋ฌด์—‡์ธ์ง€, DB๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์‹œ๊ฒ ์–ด์š”?

๋”๋ณด๊ธฐ

 DBMS(Database Management System)๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

DB๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , OS์— ์ข…์†์ ์ธ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ํ™•์žฅ์„ฑ์„ ํ•ด์นฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๋ฐ์ดํ„ฐ ์ค‘๋ณต, ๋น„์ผ๊ด€์„ฑ, ๊ฒ€์ƒ‰ ๋“ฑ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

DB์˜ ํŠน์ง• : 

1) ์‹ค์‹œ๊ฐ„ ์ ‘๊ทผ์„ฑ : ๋น„์ •ํ˜•์ ์ธ ์งˆ์˜์— ๋Œ€ํ•ด ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ์— ์˜ํ•œ ์‘๋‹ต์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

2) ์ง€์†์ ์ธ ๋ณ€ํ™” : DB์˜ ์ƒํƒœ๋Š” ๋™์ ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…, ์‚ญ์ œ, ๊ฐฑ์‹ ์œผ๋กœ ํ•ญ์ƒ ์ตœ์‹ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

3) ๋™์‹œ ๊ณต์šฉ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ๊ฐ™์€ ๋‚ด์šฉ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

4) ๋‚ด์šฉ์— ์˜ํ•œ ์ฐธ์กฐ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ๋Š” ์ฃผ์†Œ๋‚˜ ์œ„์น˜๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๊ฐ€ ์š”๊ตฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋‚ด์šฉ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฐพ์Šต๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 2. DB์—์„œ '์Šคํ‚ค๋งˆ'๊ฐ€ ๋ฌด์—‡์ผ๊นŒ์š”?

๋”๋ณด๊ธฐ
https://coding-factory.tistory.com/216

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ์™€ ์ œ์•ฝ ์กฐ๊ฑด์— ๊ด€ํ•œ ์ „๋ฐ˜์ ์ธ ๋ช…์„ธ๋ฅผ ๊ธฐ์ˆ ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

DB์—์„œ ๋ฐ์ดํ„ฐ ๊ฐœ์ฒด, ์†์„ฑ, ๊ด€๊ณ„๋ฅผ ํ˜•์‹์–ธ์–ด๋กœ ์ •์˜ํ•œ ๊ตฌ์กฐ๋กœ, DB ์‚ฌ์šฉ์ž๊ฐ€ ์ž๋ฃŒ๋ฅผ ์ €์žฅ, ์กฐํšŒ, ์‚ญ์ œ, ๋ณ€๊ฒฝํ•  ๋•Œ DBMS๋Š” ์ž์‹ ์ด ์ƒ์„ฑํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ์ฐธ์กฐํ•ด ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

  • ์™ธ๋ถ€ ์Šคํ‚ค๋งˆ(External Schema) : ํ”„๋กœ๊ทธ๋ž˜๋จธ๋‚˜ ์‚ฌ์šฉ์ž์˜ ์ž…์žฅ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ์Šต์œผ๋กœ ์กฐ์ง์˜ ์ผ๋ถ€๋ถ„์„ ์ •์˜ํ•œ ๊ฒƒ
  • ๊ฐœ๋… ์Šคํ‚ค๋งˆ(Conceptual Schema) : ๋ชจ๋“  ์‘์šฉ ์‹œ์Šคํ…œ๊ณผ ์‚ฌ์šฉ์ž๋“ค์ด ํ•„์š”๋กœํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉํ•œ ์กฐ์ง ์ „์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ •์˜ํ•œ ๊ฒƒ
  • ๋‚ด๋ถ€ ์Šคํ‚ค๋งˆ(Internal Schema) : ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฌผ๋ฆฌ์  ์ €์žฅ ํ˜•ํƒœ๋ฅผ ๊ธฐ์ˆ ํ•˜๋Š” ๊ฒƒ

 

 

 

 

๐Ÿ’ก 3. DB์—์„œ '๋ทฐ'๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

๋”๋ณด๊ธฐ

๋ทฐ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ ‘๊ทผ์ด ํ—ˆ์šฉ๋œ ์ž๋ฃŒ๋งŒ์„ ์ œํ•œ์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์—์„œ ์œ ๋„๋œ, ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ€์ƒํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค.

 

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

๋ทฐ๋Š” JOIN๋ฌธ์˜ ์‚ฌ์šฉ ์ตœ์†Œํ™”๋กœ ์‚ฌ์šฉ์ƒ์˜ ํŽธ์˜์„ฑ์„ ์ตœ๋Œ€ํ™” ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 4. DB์—์„œ ์‚ฌ์šฉํ•˜๋Š” 'ํ‚ค'์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ , ํ‚ค์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์„ค๋ช…์ด ๊ฐ€๋Šฅํ• ๊นŒ์š”?

๋”๋ณด๊ธฐ

 

๊ฒ€์ƒ‰, ์ •๋ ฌ ์‹œ ํŠœํ”Œ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ธฐ์ค€์ด ๋˜๋Š” ์†์„ฑ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 

 

> ์Šˆํผํ‚ค (Super Key)

ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ํ•„๋“œ๋“ค์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์œผ๋กœ์จ, ์œ ์ผ์„ฑ์„ ๋งŒ์กฑํ•ด์•ผ ํ•˜๋Š” ํ‚ค์ž…๋‹ˆ๋‹ค. ๋ถ€๋ถ„ ์ง‘ํ•ฉ์ด๋ฏ€๋กœ ํ•„๋“œ ํ•˜๋‚˜๋„ ์Šˆํผํ‚ค๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ณ , ํ•„๋“œ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋ฌถ์ธ ํ‚ค๋„ ์Šˆํผํ‚ค๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ๋ฌถ์ธ ํ‚ค๋ฅผ '๋ณตํ•ฉํ‚ค'๋ผ๊ณ ๋„ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

 

> ํ›„๋ณดํ‚ค (Candidate Key)

ํ›„๋ณดํ‚ค๋Š” ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ํ›„๋ณด๊ฐ€ ๋˜๋Š” ํ‚ค๋“ค์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์Šˆํผํ‚ค ์ค‘์—์„œ ์ตœ์†Œ์„ฑ์„ ๋งŒ์กฑํ•˜๋Š” ํ‚ค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํ›„๋ณดํ‚ค๋Š”, ์œ ์ผ์„ฑ + ์ตœ์†Œ์„ฑ์„ ๋งŒ์กฑํ•˜๋Š” ํ‚ค๋“ค์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

- ์œ ์ผ์„ฑ : ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์—์„œ ํ•ด๋‹น ํ•„๋“œ์— ์ค‘๋ณต๋œ ๊ฐ’์ด ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์†์„ฑ

- ์ตœ์†Œ์„ฑ : ์ตœ์†Œํ•œ์˜ ํ•„๋“œ๋กœ ๋ ˆ์ฝ”๋“œ๋ฅผ ์œ ์ผํ•˜๊ฒŒ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์†์„ฑ

 

> ๊ธฐ๋ณธํ‚ค (Primary Key)

๊ธฐ๋ณธ ํ‚ค๋Š” ํ…Œ์ด๋ธ”์—์„œ ํŠน์ • ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ํ›„๋ณด ํ‚ค ์ค‘์—์„œ ์„ ํƒ๋œ ํ•˜๋‚˜์˜ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ค‘๋ณต๋˜๋Š” ๊ฐ’์ด๋‚˜ NULL๊ฐ’์€ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ›„๋ณดํ‚ค ์ค‘์—์„œ ๊ฐ’์ด ์ž์ฃผ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ , ๊ฐ’์ด ๋‹จ์ˆœํ•œ ๊ฒƒ์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 

> ๋Œ€์ฒดํ‚ค (Alternate Key)

ํ›„๋ณด ํ‚ค ์ค‘์—์„œ ๊ธฐ๋ณธ ํ‚ค๋กœ ์„ ํƒ๋œ ๊ฒƒ๋“ค์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ชจ๋“  ๊ฒƒ์„ ๋Œ€์ฒดํ‚ค๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

 

> ์™ธ๋ž˜ํ‚ค (Foreign Key)

ํ•œ ํ…Œ์ด๋ธ”์˜ ํ‚ค ์ค‘์—์„œ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ํ•„๋“œ ๋˜๋Š” ์ „์ฒด ํ•„๋“œ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋˜๊ณ , ์ค‘๋ณต๋œ ๊ฐ’๊ณผ NULL๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฐ˜๋“œ์‹œ ์ฐธ์กฐ๋˜๋Š” ํ…Œ์ด๋ธ”์—์„œ ์œ ์ผํ•œ ๊ฐ’์„ ๊ฐ–๋Š” ํ•„๋“œ๋ฅผ ์ฐธ์กฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ•ด ์ฐธ์กฐ ๋Œ€์ƒ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์™ธ๋ž˜ ํ‚ค๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์–ด๋– ํ•œ ์™ธ๋ž˜ ํ‚ค BB๊ฐ€ AA๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๋ฉด, AA๋Š” ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ž˜ ํ‚ค๋Š” ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด RESTRICTED์™€ CASCADE, SET NULL์ด๋ผ๋Š” ๊ฐœ๋…์„ ์™ธ๋ž˜ ํ‚ค์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 

 

  • RESTRICTED: ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝ ๋˜๋Š” ์‚ญ์ œํ•˜๊ณ ์ž ํ•  ๋•Œ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ์ฒด๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋ณ€๊ฒฝ ๋˜๋Š” ์‚ญ์ œ ์—ฐ์‚ฐ์„ ์ทจ์†Œํ•œ๋‹ค.
  • CASCADE: ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝ ๋˜๋Š” ์‚ญ์ œํ•˜๋ฉด, ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ์ฒด๋„ ๋ณ€๊ฒฝ ๋˜๋Š” ์‚ญ์ œ๋œ๋‹ค.
  • SET NULL: ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝ ๋˜๋Š” ์‚ญ์ œํ•˜๋ฉด, ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ์ฒด์˜ ๊ฐ’์„ NULL๋กœ ์„ค์ •ํ•œ๋‹ค.

 

 

 

๐Ÿ’ก 5. ํŠธ๋žœ์žญ์…˜์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๋Š” ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—… ๋‹จ์œ„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋…ผ๋ฆฌ์ ์ธ ์ž‘์—…์˜ ์ฟผ๋ฆฌ ๊ฐœ์ˆ˜์™€ ๊ด€๊ณ„ ์—†์ด ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์–ด๋†“์€ ์ž‘์—… ๋‹จ์œ„ ์ „์ฒด๊ฐ€ 100% ์ ์šฉ๋˜๊ฑฐ๋‚˜ ์•„๋ฌด๊ฒƒ๋„ ์ ์šฉ๋˜์ง€ ์•Š์•„์•ผ ํ•จ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 6. ๊ทธ๋ ‡๋‹ค๋ฉด ํŠธ๋žœ์žญ์…˜์˜ ํŠน์ง•์€ ๋ฌด์—‡์ด ์žˆ์„๊นŒ์š”?

๋”๋ณด๊ธฐ

ํŠธ๋žœ์žญ์…˜์˜ ํŠน์ง•์€ ์•ž ๊ธ€์ž๋ฅผ ๋”ฐ์„œ ACID๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

 

- Atomicity (์›์ž์„ฑ) : ํŠธ๋žœ์žญ์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ์—ฐ์‚ฐ ์ „์ฒด๊ฐ€ ๋ชจ๋‘ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ๋ชจ๋‘ ์ทจ์†Œ๋˜์–ด์•ผ ํ•œ๋‹ค.

- Consistency (์ผ๊ด€์„ฑ) : ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰์„ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒํ•˜๋ฉด ์–ธ์ œ๋‚˜ ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒํƒœ๋กœ ์œ ์ง€ํ•œ๋‹ค.

- Isolation (๊ณ ๋ฆฝ์„ฑ) : ๋‘ ๊ฐœ ์ด์ƒ์˜ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ๋ฐœ์ƒํ•  ๋•Œ, ์„œ๋กœ์˜ ์—ฐ์‚ฐ์— ์˜ํ–ฅ์„ ์ฃผ๋ฉด ์•ˆ ๋œ๋‹ค.

- Durability (์˜๊ตฌ์„ฑ) : ์ปค๋ฐ‹๋œ ํŠธ๋žœ์žญ์…˜์˜ ๋‚ด์šฉ์€ ์˜๊ตฌํžˆ ๋ฐ˜์˜๋œ๋‹ค.

 

 

 

๐Ÿ’ก 7. ํŠธ๋žœ์žญ์…˜์˜ ์ƒํƒœ๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ์„๊นŒ์š”?

๋”๋ณด๊ธฐ

ํŠธ๋žœ์žญ์…˜์˜ ์ƒํƒœ๋Š” ํ™œ๋™, ์žฅ์• , ์ฒ ํšŒ, ๋ถ€๋ถ„์™„๋ฃŒ, ์™„๋ฃŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

- ํ™œ๋™ (Active) : ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰ ์ค‘์ธ ์ƒํƒœ

- ์žฅ์•  (Fail) : ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด ์ค‘๋‹จํ•œ ์ƒํƒœ

- ์ฒ ํšŒ (Aborted) : ํŠธ๋žœ์žญ์…˜์ด ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์–ด Rollback(ํŠธ๋žœ์žญ์…˜ ์—ฐ์‚ฐ ์ด์ „์˜ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ) ์ˆ˜ํ–‰ํ•˜๋Š” ์ƒํƒœ

- ๋ถ€๋ถ„ ์™„๋ฃŒ (Partitially Commit) : ํŠธ๋žœ์žญ์…˜์ด ๋งˆ์ง€๋ง‰ ์—ฐ์‚ฐ๊นŒ์ง€ ์‹คํ–‰ํ–ˆ์ง€๋งŒ, Commit ์—ฐ์‚ฐ์ด ์‹คํ–‰๋˜๊ธฐ ์ง์ „์˜ ์ƒํƒœ

- ์™„๋ฃŒ (Committed) : ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์–ด commit ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ•œ ํ›„์˜ ์ƒํƒœ

 

 

 

๐Ÿ’ก 8. ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ์ˆ˜์ค€์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

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

 

  • Read Uncommitted
    • ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋‚ด์šฉ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ (Dirty Read)
    • ๋ฝ ๋ฐœ์ƒ X
  • Read Committed
    • ์ปค๋ฐ‹๋œ ๋‚ด์šฉ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ํ•œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ๋น„์ผ๊ด€์ ์ธ ํ˜„์ƒ ๋ฐœ์ƒ (Nonrepeatable read)
    • ๋ฝ ๋ฐœ์ƒ X
  • Repeatable Read
    • ์ปค๋ฐ‹์ด ์™„๋ฃŒ๋œ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„ ๋‚ด์—์„œ ์กฐํšŒํ•œ ๋‚ด์šฉ์ด ํ•ญ์ƒ ๋™์ผํ•จ์„ ๋ณด์žฅ
    • ์ผ์ •๋ฒ”์œ„์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋‘๋ฒˆ ์ด์ƒ ์ฝ์„ ๋•Œ, ์ฒซ ๋ฒˆ์žฌ ์ฟผ๋ฆฌ์—์„œ ์—†๋˜ ์œ ๋ น ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋‘๋ฒˆ์งธ ์ฟผ๋ฆฌ์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ์„ Phantom read
    • ๋ฝ ๋ฐœ์ƒ
  • Serializable
    • ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ
    • ๋ฝ ๋ฐœ์ƒ

 

 

 

๐Ÿ’ก 9. ํŠธ๋žœ์žญ์…˜์˜ ์—ฐ์‚ฐ ์ค‘, Commit๊ณผ Rollback์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

- Commit : ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณตํ•ด ํŠธ๋žœ์žญ์…˜ ๊ฒฐ๊ณผ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ˜์˜ํ•˜๋Š” ์—ฐ์‚ฐ์ž…๋‹ˆ๋‹ค.

- Rollback : ํŠธ๋žœ์žญ์…˜์˜ ์‹คํ–‰์„ ์ทจ์†Œํ–ˆ์Œ์„ ์•Œ๋ฆฌ๋Š” ์—ฐ์‚ฐ์ด๋ฉฐ, ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์›๋ž˜์˜ ์ƒํƒœ(ํŠธ๋žœ์žญ์…˜ ์—ฐ์‚ฐ ์ด์ „์˜ ์ƒํƒœ)๋กœ ์›์ƒ ๋ณต๊ท€์‹œํ‚ค๋Š” ์—ฐ์‚ฐ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 10. DB์—์„œ ๋™์‹œ์„ฑ ์ œ์–ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

๋”๋ณด๊ธฐ

DBMS๋Š” ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ค‘ ํŠธ๋žœ์žญ์…˜์˜ ์ƒํ˜ธ ๊ฐ„์„ญ ์ž‘์šฉ ์ค‘, DB๋ฅผ ๋ณดํ˜ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜ํ–‰๋  ๋•Œ, ํŠธ๋žœ์žญ์…˜๋“ค์ด DB์˜ ์ผ๊ด€์„ฑ์„ ํŒŒ๊ดดํ•˜์ง€ ์•Š๋„๋ก ํŠธ๋žœ์žญ์…˜ ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

๋™์‹œ์„ฑ ์ œ์–ด ๊ธฐ๋ฒ•์˜ ์ข…๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

https://velog.io/@ha0kim/%EB%8F%99%EC%8B%9C%EC%84%B1-%EC%A0%9C%EC%96%B4

 

 

 

๐Ÿ’ก 11. DB Lock์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

DB Lock์€ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ์˜ ์ˆœ์ฐจ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์ „์— Lock์„ ์š”์ฒญํ•ด์„œ Lock์ด ํ—ˆ๋ฝ๋˜๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

 

DB Lock์˜ ์ข…๋ฅ˜๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ, ๋น„๊ด€์  ๋ฝ๊ณผ ๋‚™๊ด€์  ๋ฝ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

- ๋น„๊ด€์  ๋ฝ (Pessimistic Lock) : ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ด ๋ฝ์„ ๊ฑฐ๋Š” ๋ฐฉ์‹

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

 

- ๋‚™๊ด€์  ๋ฝ (Optimistic Lock) : ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ ๊ฐ€์ •ํ•ด ๋ฝ์„ ๊ฑธ์ง€ ์•Š๊ณ , ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด์„œ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹.

  • Version ์ปฌ๋Ÿผ์„ ๋ณ„๋„๋กœ ์ถ”๊ฐ€ํ•ด์„œ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. Version ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ์ดˆ ์ปค๋ฐ‹๋งŒ ์ธ์ •์ด ๋˜๊ณ , Bulk Insert๋Š” ๋ฒ„์ „์„ ๋ฌด์‹œํ•˜๊ธฐ ๋–„๋ฌธ์— Bulk Insert์—์„œ ๋ฒ„์ „์„ ์ฆ๊ฐ€์‹œํ‚ค๋ ค๋ฉด ๋ฒ„์ „ ํ•„๋“œ๋ฅผ ๊ฐ•์ œ๋กœ ์ฆ๊ฐ€์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • DB๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฝ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , JPA๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ(Application Level์˜ Lock)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ปค๋ฐ‹ ์ „๊นŒ์ง€๋Š” ์ถฉ๋Œ์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ถฉ๋Œ์ด ๋‚˜๋ฉด ๋กค๋ฐฑ ์ฒ˜๋ฆฌ๋Š” ๊ฐœ๋ฐœ์ž์˜ ๋ชซ์ž…๋‹ˆ๋‹ค.

 

๋น„๊ด€์  ๋ฝ๊ณผ ๋‚™๊ด€์  ๋ฝ์˜ ์‚ฌ์šฉ ๊ธฐ์ค€์€ '์ฝ๊ธฐ์™€ ์ˆ˜์ • ๋น„์œจ์ด ์–ด๋””์— ๊ฐ€๊นŒ์šด์ง€'์ž…๋‹ˆ๋‹ค. ์ˆ˜์ •์˜ ๋น„์œจ์ด ๋†’๋‹ค๋ฉด ๋น„๊ด€์  ๋ฝ์„, ์ฝ๊ธฐ์˜ ๋น„์ค‘์ด ๋†’๋‹ค๋ฉด Optimistic์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

Why?

๋ฐ์ดํ„ฐ ์ˆ˜์ • ์ฆ‰์‹œ ํŠธ๋žœ์žญ์…˜ ์ถฉ๋Œ์„ ๊ฐ์ง€ํ•˜๊ณ  ๋กค๋ฐฑ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์ˆ˜์ •์ด ๋งŽ์€ ๊ฒฝ์šฐ ๋น„๊ด€์  ๋ฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ฝ๊ธฐ ์ž‘์—…์ด ๋งŽ๋‹ค๋ฉด JPA์˜ ๋ฒ„์ „๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ๋”์šฑ ํŽธ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚™๊ด€์  ๋ฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 12. ๋ฌด๊ฒฐ์„ฑ์ด ๋ฌด์—‡์ธ์ง€, ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ ์กฐ๊ฑด์€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์€, ์ •ํ™•์„ฑ / ์ผ๊ด€์„ฑ / ์œ ํšจ์„ฑ์ด ์œ ์ง€๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ DB์˜ ์ •ํ™•์„ฑ, ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ €์žฅ, ์‚ญ์ œ, ์ˆ˜์ •์„ ์ œ์•ฝํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด์ด ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค.

 

- ๊ฐœ์ฒด ๋ฌด๊ฒฐ์„ฑ : ๊ธฐ๋ณธ ํ‚ค๋Š” null, ์ค‘๋ณต ๊ฐ’ ๋ถˆ๊ฐ€๋Šฅ

- ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ : ์™ธ๋ž˜ ํ‚ค๋Š” null์ด๊ฑฐ๋‚˜ ์ฐธ์กฐ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค ๊ฐ’๊ณผ ๋™์ผํ•ด์•ผ ํ•จ.

 

 

 

๐Ÿ’ก 13. JOIN์€ ์–ด๋–จ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ ์–ด๋„ ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ์„ ๊ณต์œ ํ•˜๊ณ  ์žˆ์–ด์•ผ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 14. Inner join๊ณผ Outer join์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ
https://dev-coco.tistory.com/59

 

inner join์€ ์„œ๋กœ ์—ฐ๊ด€๋œ ๋‚ด์šฉ๋งŒ ๊ฒ€์ƒ‰ํ•˜๋Š” ์กฐ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

A์™€ B์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€, A์™€ B์˜ ๊ต์ง‘ํ•ฉ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ฒค๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๊ทธ๋ ธ์„ ๋•Œ ๊ต์ฐจ๋˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

 

outer join์€ ํ•œ ์ชฝ์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๊ณ  ํ•œ ์ชฝ์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ์ชฝ์˜ ๋‚ด์šฉ์„ ์ „๋ถ€ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

A์™€ B์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€, A์™€ B์˜ ํ•ฉ์ง‘ํ•ฉ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ฒค๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๊ทธ๋ ธ์„ ๋•Œ ํ•ฉ์ง‘ํ•ฉ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

outer join์—๋Š” LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 15. Group By์˜ ์—ญํ• ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

GROUP BY ๋Š” GROUP BY ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํŠน์ • ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์—ฐ์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ง‘๊ณ„ ํ‚ค๋กœ ์ •์˜ํ•˜์—ฌ ๊ทธ๋ฃน์„ ์ง“๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž๋Š” COUNT, SUM, AVG, MAX, MIN ๋“ฑ์ด ์žˆ๊ณ , DISTINCT์™€ ๊ฐ™์ด ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 16. DELETE, TRUNCATE, DROP์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

DELETE๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ง€์šฐ์ง€๋งŒ ํ…Œ์ด๋ธ” ์šฉ๋Ÿ‰์€ ์ค„์–ด๋“ค์ง€ ์•Š๊ณ  ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ณจ๋ผ์„œ ์ง€์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ญ์ œ ํ›„ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

TRUNCATE๋Š” ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ์— ์‚ญ์ œํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ” ์šฉ๋Ÿ‰์ด ์ค„์–ด๋“ค๊ณ  ์ธ๋ฑ์Šค ๋“ฑ๋„ ์‚ญ์ œ๋˜์ง€๋งŒ ํ…Œ์ด๋ธ”์€ ์‚ญ์ œํ•  ์ˆ˜ ์—†๊ณ ,  ์‚ญ์ œ ํ›„ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

DROP์€ ํ…Œ์ด๋ธ” ์ž์ฒด๋ฅผ ์™„์ „ํžˆ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ์‹(๊ณต๊ฐ„, ์ธ๋ฑ์Šค, ๊ฐ์ฒด ๋ชจ๋‘ ์‚ญ์ œ)์ž…๋‹ˆ๋‹ค. ์‚ญ์ œ ํ›„ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 17. ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

ํŠธ๋ฆฌ๊ฑฐ๋Š” ํŠน์ • ํ…Œ์ด๋ธ”์— ๋ฐ˜์‘ํ•ด INSERT, DELETE, UPDATE ๊ฐ™์€ DML์ด ์ˆ˜ํ–‰๋˜์—ˆ์„ ๋•Œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ž๋™์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ(๋ฉ”์„œ๋“œ ํ˜•์‹์˜ ์ฟผ๋ฆฌ)์œผ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  DB์—์„œ ์ž๋™์ ์œผ๋กœ ํ˜ธ์ถœ๋œ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

DML์ด ์‹คํ–‰๋˜๊ณ , ์ž๋™์œผ๋กœ ์ •์˜๋œ ํ”„๋กœ์‹œ์ €๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

(ํ”„๋กœ์‹œ์ € : ์ฟผ๋ฆฌ๋ฌธ์„ ๋งˆ์น˜ ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ ํ˜•์‹์œผ๋กœ ๋งŒ๋“ค๊ณ  ์–ด๋–ค ๋™์ž‘์„ ์ผ๊ด„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์šฉ๋„.)

 

 

๐Ÿ’ก 18. DML, DDL, DCL์ด ๊ฐ๊ฐ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ
  • DDL(์ •์˜์–ด) : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ์ •์˜, ์ˆ˜์ •, ์‚ญ์ œํ•˜๋Š” ์–ธ์–ด (ALTER, CREATE, DROP)
  • DML(์กฐ์ž‘์–ด) : DB๋‚ด์˜ ์ž๋ฃŒ ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ๊ฐฑ์‹ , ์‚ญ์ œ๋ฅผ ์œ„ํ•œ ์–ธ์–ด (SELECT, INSERT, UPDATE, DELETE)
  • DCL(์ œ์–ด์–ด) : ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€, ๋ณ‘ํ–‰ ์ˆ˜ํ–‰ ์ œ์–ด, ๋ณดํ˜ธ์™€ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์–ธ์–ด (COMMIT, ROLLBACK, GRANT, REVOKE)

 

 

 

๐Ÿ’ก 19. DB ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

Index๋Š” ํ…Œ์ด๋ธ”์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š๊ณ , ์ธ๋ฑ์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ํ•ด๋‹น ์ž๋ฃŒ์˜ ํ…Œ์ด๋ธ”์„ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

Index๋Š” ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ ๋น ๋ฅธ ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ, ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ, ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ฟผ๋ฆฌ๋ฌธ ์‹คํ–‰ ์†๋„๊ฐ€ ๋Š๋ ค์ง‘๋‹ˆ๋‹ค. (์ธ๋ฑ์Šค๋„ ๋ณ€๊ฒฝํ•˜๊ณ  ์ •๋ ฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ ์ €ํ•˜)

 

์ฆ‰, ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ์„ฑ๋Šฅ์„ ํฌ์ƒํ•˜๋Š” ๋Œ€์‹ , ๋ฐ์ดํ„ฐ์˜ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋†’์ด๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 20. Index์˜ B+ ํŠธ๋ฆฌ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

B+ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” B ํŠธ๋ฆฌ๋ฅผ ํ™•์žฅํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

1) B ํŠธ๋ฆฌ

์ด์ง„ํŠธ๋ฆฌ๋ฅผ ํ™•์žฅํ•ด์„œ ๋งŽ์€ ์ž์‹์„ ๊ฐ–์„ ์ˆ˜ ์žˆ๋Š” ๊ท ํ˜• ํŠธ๋ฆฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Key๋“ค์ด ํ•ญ์ƒ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ๊ตฌ์„ฑ๋˜๋ฉฐ, Branch์™€ Leaf ๋…ธ๋“œ๊ฐ€ Key์™€ Data๋ฅผ ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

2) B+ ํŠธ๋ฆฌ

B-ํŠธ๋ฆฌ๋ฅผ ํ™•์žฅํ•ด์„œ ๋ฐ์ดํ„ฐ์˜ ๋น ๋ฅธ ์ ‘๊ทผ์„ ์œ„ํ•œ ์ธ๋ฑ์Šค ์—ญํ• ๋งŒ ํ•˜๋Š” ๋น„๋‹จ๋ง ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.

Branch ๋…ธ๋“œ๋Š” Key๋งŒ ์ €์žฅํ•˜๊ฒŒ ๋˜๋ฉฐ, Key๋“ค์ด ํ•ญ์ƒ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ๋” ๋งŽ์€ Key๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ B-ํŠธ๋ฆฌ์— ๋น„ํ•ด B+ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ๋”์šฑ ๋‚ฎ์•„์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (cache hit๋ฅผ ๋†’์ธ๋‹ค)

Leaf๋…ธ๋“œ๋Š” Key์™€ Data๋ฅผ ์ €์žฅํ•˜๊ณ , Linked List๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Full scan์‹œ B-ํŠธ๋ฆฌ๋Š” ๋ฆฌํ”„๋…ธ๋“œ๋ผ๋ฆฌ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์— ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜์ง€๋งŒ, B+ํŠธ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋ฆฌํ”„๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ์„ ํ˜• ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ์ธก๋ฉด์—์„œ ์ข‹์€ ํšจ์œจ์„ ๋ณด์ž…๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 21. ํ•ด์‹œ ์ธ๋ฑ์Šค ๋ฐฉ์‹๊ณผ B+ ํŠธ๋ฆฌ ์ธ๋ฑ์Šค ๋ฐฉ์‹์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

ํ•ด์‹œ ์ธ๋ฑ์Šค ๋ฐฉ์‹์€, ์นผ๋Ÿผ ๊ฐ’์œผ๋กœ ์ƒ์„ฑ๋œ ํ•ด์‹œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(1)๋กœ ๊ต‰์žฅํžˆ ๋น ๋ฆ…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ €๊ธ๋กœ B+ํŠธ๋ฆฌ๋กœ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ด์œ ๋Š”, ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ '๋™๋“ฑ ์—ฐ์‚ฐ(=)'์— ํŠนํ™”๋œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฉฐ, '๋ถ€๋“ฑํ˜ธ ์—ฐ์‚ฐ'์—์„œ๋Š” ์—ฐ์‚ฐ์‹œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

 

- ๋™๋“ฑ ๋น„๊ต์—์„œ๋Š” ํ•ด์‹œ ์ธ๋ฑ์Šค๊ฐ€ ํšจ๊ณผ์ 

- ๊ทธ๋Ÿฌ๋‚˜ ๋ฒ”์œ„ ๊ฒ€์ƒ‰(๋ถ€๋“ฑํ˜ธ ์—ฐ์‚ฐ)์—์„œ๋Š” B+ํŠธ๋ฆฌ ์ธ๋ฑ์Šค๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํšจ๊ณผ์ 

 

 

 

๐Ÿ’ก 22. ์ •๊ทœํ™”๋ฅผ ์™œ ํ•˜๋Š”์ง€, ๊ฐ ์ •๊ทœํ™” ๋‹จ๊ณ„๋Š” ์–ด๋–ค ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š”์ง€, ์ •๊ทœํ™”์˜ ์žฅ๋‹จ์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

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

์ฆ‰, ์ด์ƒํ˜„์ƒ์ด ์กด์žฌํ•˜๋Š” ํ…Œ์ด๋ธ”(๋ฆด๋ ˆ์ด์…˜)์„ ๋ถ„ํ•ดํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ด๋ธ”(๋ฆด๋ ˆ์ด์…˜)์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ณผ์ •์„ ์ •๊ทœํ™”๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด์ƒํ˜„์ƒ : ํ…Œ์ด๋ธ”์„ ์„ค๊ณ„ํ•  ๋•Œ ์ž˜๋ชป ์„ค๊ณ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…, ์‚ญ์ œ, ์ˆ˜์ •ํ•  ๋•Œ ์ƒ๊ธฐ๋Š” ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜๋ฅผ ์˜๋ฏธ.

 

> ์ด์ƒํ˜„์ƒ์˜ ์ข…๋ฅ˜

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

 

> ์ •๊ทœํ™”

  • 1 ์ •๊ทœํ™” : ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์ด ํ•˜๋‚˜์˜ ๊ฐ’์„ ๊ฐ–๋„๋ก ํ…Œ์ด๋ธ”์„ ๋ถ„ํ•ดํ•˜๋Š” ๊ฒƒ(๋„๋ฉ”์ธ์ด ์›์ž๊ฐ’๋งŒ ํฌํ•จ)
  • 2 ์ •๊ทœํ™” : ๊ธฐ๋ณธํ‚ค์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์ด ๊ฒฐ์ •์ž๊ฐ€ ์•ˆ๋˜๋„๋ก ๋ถ„๋ฆฌ(์™„์ „ ํ•จ์ˆ˜์  ์ข…์†)
  • 3 ์ •๊ทœํ™” : ์ดํ–‰์ข…์† ์ œ๊ฑฐ (a -> b, b -> c ์ผ๋•Œ, a->c ๊ฐ€ ์„ฑ๋ฆฝ๋˜๋Š” ๊ฒƒ์„ ๋ถ„๋ฆฌ, ์ฆ‰, a-> b๋ž‘ b->c ํ…Œ์ด๋ธ”๋กœ ๋ถ„๋ฆฌ)
  • BCNF ์ •๊ทœํ™” : ๊ฐ’์„ ์ •ํ•˜๋Š” ๊ฒฐ์ •์ž๊ฐ€ ํ›„๋ณดํ‚ค๊ฐ€ ๋˜๋„๋ก ํ…Œ์ด๋ธ” ๋ถ„ํ•ด(๋ชจ๋“  ๊ฒฐ์ •ํ‚ค๊ฐ€ ํ›„๋ณดํ‚ค)

 

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

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

 

 

 

๐Ÿ’ก 23. ์—ญ์ •๊ทœํ™”(๋ฐ˜์ •๊ทœํ™”)๋Š” ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

์ •๊ทœํ™”์˜ ๋‹จ์ ์œผ๋กœ, ๋ฆด๋ ˆ์ด์…˜ ๊ฐ„์˜ JOIN ์—ฐ์‚ฐ์ด ๋Š˜์–ด๋‚˜ ์งˆ์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์šฐ๋ ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ๊ธฐ ์ž‘์—…์ด ๋งŽ์ด ํ•„์š”ํ•œ DB์˜ ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์—ญ์ •๊ทœํ™”๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 24. Connection Pool์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

Client์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ๊ฐ Application์˜ Thread์—์„œ DB์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Connection์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ปค๋„ฅ์…˜ ํ’€์€, ๋ฏธ๋ฆฌ ์ผ์ • ์ˆ˜์˜ Connection์„ ์ƒ์„ฑํ•ด Pool์— ๋ณด๊ด€ํ•ด ๋‘๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

์š”์ฒญ์ด ์˜ฌ ๋•Œ๋งˆ๋‹ค Connection์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์€, ์—ฐ๊ฒฐ๋Ÿ‰์ด ๋งŽ์„ ๋•Œ ์„œ๋ฒ„์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด Pool์— ์ €์žฅํ•˜๋ฉด ์ด๋Ÿฌํ•œ ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Connection Pool์„ ์‚ฌ์šฉํ•˜๋ฉด, ์ƒ์„ฑ ๋ฐ ์†Œ๋ฉธ์— ๋Œ€ํ•œ ์‹œ๊ฐ„ ์†Œ์š”๊ฐ€ ์—†์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ ์ด๊ณ , ํ•œ ๋ฒˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ปค๋„ฅ์…˜ ์ˆ˜๊ฐ€ ์ œ์–ด๋˜์–ด Application์ด ์‰ฝ๊ฒŒ ์ฃฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 25. RDB์™€ NoSQL์˜ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹ค ์ˆ˜ ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ

1) RDB(๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)

  • ์ •ํ•ด์ง„ ์Šคํ‚ค๋งˆ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ 'ํ…Œ์ด๋ธ”'์— ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋ณด์žฅ๋˜์–ด์žˆ๊ณ , ์ค‘๋ณต์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • SQL์„ ์‚ฌ์šฉํ•ด RDBMS์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ์ˆ˜์ •, ์‚ญ์ œ ๋ฐ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ˆ˜์ง์  ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ)
  • ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ์žฆ์€ ๊ฒฝ์šฐ / ๋ณ€๊ฒฝ๋  ์—ฌ์ง€๊ฐ€ ์—†๊ณ , ๋ช…ํ™•ํ•œ ์Šคํ‚ค๋งˆ๊ฐ€ ์‚ฌ์šฉ์ž์™€ ๋ฐ์ดํ„ฐ์—๊ฒŒ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

2) NoSQL

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

 

 

 

๐Ÿ’ก 26. Redis์˜ ํŠน์ง•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

Redis๋Š” NoSQL๋กœ ์‹ฑ๊ธ€์“ฐ๋ ˆ๋“œ ์ธ๋ฉ”๋ชจ๋ฆฌ DB์ž…๋‹ˆ๋‹ค. key-value ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉฐ ์ฃผ๋กœ ์บ์‹œ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

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

 

 

 

๐Ÿ’ก 27. DB ํด๋Ÿฌ์Šคํ„ฐ๋ง์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

 

DB ํด๋Ÿฌ์Šคํ„ฐ๋ง์€ DB ์Šคํ† ๋ฆฌ์ง€๋Š” ๊ณต์œ ํ•˜๊ณ , ๋™์ผํ•œ DB ์„œ๋ฒ„๋ฅผ ์—ฌ๋Ÿฌ ๋Œ€ ๋†“๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋™๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • Active-Active ๋ฐฉ์‹
    • ์—ฌ๋Ÿฌ ๋Œ€์˜ DB์„œ๋ฒ„๊ฐ€ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•ด์„œ ๋ฐ›์Šต๋‹ˆ๋‹ค.
    • ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„๊ฐ€ DB ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ‘๋ชฉ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Active-Standby ๋ฐฉ์‹
    • ํ•œ์ชฝ์€ Standby ์ƒํƒœ๋กœ ๋‘์–ด Active ์ƒํƒœ์˜ ์„œ๋ฒ„๊ฐ€ ์ฃฝ์œผ๋ฉด FailOver๋˜์–ด ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ์‹
    • FailOver์ด ์ด๋ฃจ์–ด์ง€๋Š” ๋™์•ˆ ์†์‹ค์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 28. DB ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

 

DB ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜์€ DB ์„œ๋ฒ„์™€ DB ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๋‹ค์ค‘ํ™”ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ DB ํด๋Ÿฌ์Šคํ„ฐ๋ง๊ณผ๋Š” ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์กฐํšŒ์ž‘์—…์€ Slave์—์„œ INSERT, DELETE, UPDATE ์ž‘์—…์€ Master์—์„œ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  • Slave๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธธ ๋•Œ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Master ๋…ธ๋“œ๊ฐ€ ๋‹ค์šด๋˜๋ฉด ๋ณต๊ตฌ ๋ฐ ๋Œ€์ฒ˜๊ฐ€ ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 29. ์ˆ˜์ง ํŒŒํ‹ฐ์…”๋‹๊ณผ ์ˆ˜ํ‰ ํŒŒํ‹ฐ์…”๋‹(์ƒค๋”ฉ)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

์„œ๋น„์Šค์˜ ํฌ๊ธฐ๊ฐ€ ์ ์  ์ปค์ง€๊ณ  DB์— ์ €์žฅํ•˜๋Š” ๊ทœ๋ชจ๊ฐ€ ๋Œ€์šฉ๋Ÿ‰ํ™” ๋˜๋ฉด์„œ ์šฉ๋Ÿ‰์˜ ํ•œ๊ณ„์™€ ์„ฑ๋Šฅ์˜ ์ €ํ•˜๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ด๋ธ”์„ ํŒŒํ‹ฐ์…˜์ด๋ผ๋Š” ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ  ๊ด€๋ฆฌํ•˜๋Š” ํŒŒํ‹ฐ์…”๋‹ ๊ธฐ๋ฒ•์ด ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

 

ํฐ ํ…Œ์ด๋ธ”์ด๋‚˜ ์ธ๋ฑ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด Partition์ด๋ผ๋Š” ์ž‘์€ ๋‹จ์œ„๋กœ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

1) ์ˆ˜์ง ํŒŒํ‹ฐ์…”๋‹

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

 

2) ์ˆ˜ํ‰ ํŒŒํ‹ฐ์…”๋‹ (์ƒค๋”ฉ)

  • ๊ฐ™์€ ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ถ„์‚ฐํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜ ๋ถ„์‚ฐ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๊ณ ๋ คํ•ด์•ผํ•  ๊ฒƒ์ด Shard Key์ด๊ณ  ์ด๋ฅผ ์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ Hash Sharding, Dynamic Sharding, Entity Group ๋ฐฉ์‹์ด ์žˆ๋‹ค.
  • ์ƒค๋”ฉ์€ ๋ณต์žก๋„๊ฐ€ ๋งค์šฐ ๋†’์•„์ง€๋ฏ€๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์„ ์šฐ์„ ์ ์œผ๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

๐Ÿ’ก 30. SQL Injection์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ
์ถœ์ฒ˜ : AhnLab

 

์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด์•ˆ์ƒ์˜ ์ทจ์•ฝ์ ์„ ์ด์šฉํ•ด, ์ž„์˜์˜ SQL๋ฌธ์„ ์ฃผ์ž…ํ•˜๊ณ  ์‹คํ–‰๋˜๊ฒŒ ํ•˜์—ฌ DB๊ฐ€ ๋น„์ •์ƒ์ ์ธ ๋™์ž‘์„ ํ•˜๋„๋ก ์กฐ์ž‘ํ•˜๋Š” ํ–‰์œ„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

- Error based SQL Injection, Union based SQL Injection, Boolean based SQL Injection, Time based SQL Injection ๋“ฑ ๋‹ค์–‘ํ•œ ๊ณต๊ฒฉ๊ธฐ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

- ๋Œ€์‘ ๋ฐฉ์•ˆ์œผ๋กœ๋Š” ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ, Prepared Statement ๊ตฌ๋ฌธ ์‚ฌ์šฉ, Error Message ๋…ธ์ถœ ๊ธˆ์ง€, ์›น ๋ฐฉํ™”๋ฒฝ ์‚ฌ์šฉ ๋“ฑ์˜ ๋ฐฉ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 31. ORM์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

ORM์€ ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งคํ•‘์˜ ์ค„์ž„๋ง์ž…๋‹ˆ๋‹ค. (Object-RDBMS Mapping)

OOP์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋ผ๋Š” ๊ฐœ๋…์„ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์™€ RDB์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์„ ์„œ๋กœ ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก 32. ์˜ตํ‹ฐ๋งˆ์ด์ €(Optimizer)์— ๋Œ€ํ•ด ์•„๋Š”๋Œ€๋กœ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

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

 

 

 

 

๐Ÿƒ‍โ™‚๏ธ ๋‹ค๋ฅธ ์งˆ๋ฌธ ๋Œ€๋น„ ์ž๋ฃŒ

[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ - โ“ช ์ฒดํฌ๋ฆฌ์ŠคํŠธ

[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘  ์ž๋ฃŒ๊ตฌ์กฐ
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ก ์•Œ๊ณ ๋ฆฌ์ฆ˜
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ข ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฃ ๋„คํŠธ์›Œํฌ
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ค ์šด์˜์ฒด์ œ
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฅ ์ž๋ฐ”(Java)
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฆ ๋ฐฑ์—”๋“œ(Java Spring ๊ธฐ๋ฐ˜)
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ง ๊ฐœ๋ฐœ๊ณตํ†ต / ์ธ์„ฑ๋ฉด์ ‘