๊ธฐํƒ€

๊ธฐ์ˆ  ๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŽธ

PYT 2019. 12. 6. 21:54
๋ฐ˜์‘ํ˜•

 

 

๊ฐœ๋ฐœ์ž ๊ธฐ์ˆ  ๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ์€ ์ด ์„ธ๊ฐ€์ง€ ๊ฒŒ์‹œ๋ฌผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ,

 

1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

2. ์ž๋ฐ”

3. ์‹ค์ œ๋กœ ๋ฉด์ ‘์žฅ์—์„œ ๋“ค์—ˆ๋˜ ์งˆ๋ฌธ

 

์„ ์ •๋ฆฌํ•ด ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

 

์ด ์ž๋ฃŒ๋“ค๋กœ ๋ฉด์ ‘ ํ•ฉ๊ฒฉ ํ›„ ์žฌ์ง์ค‘์ด๋ฉฐ, ํ˜„์žฌ ์ทจ์—…์ค€๋น„์ค‘์ด์‹ ๋ถ„๋“ค๊ป˜ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

 


 

1. index์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.

DB๋ฅผ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ๋„์™€์ฃผ๋Š” ์—ญํ• . ( B- Tree๋ฐฉ์‹ , DB ์„ฑ๋Šฅ๊ณผ ๋ฐ€์ ‘ )

(์ธ๋ฑ์Šค๋Š” B- Tree๋ฐฉ์‹(binary,์ด์ง„๋ฒ•)๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ด์ง„๋ฒ•์œผ๋กœ 0๊ณผ 1๋กœ๋งŒ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋นจ๋ผ์„œ ์‚ฌ์šฉํ•จ, 

๊ทธ๋ž˜์„œ Select ๋ฌธ์˜ where, join์—์„œ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•จ, ๋Œ€์‹  insert, update, delete๋ฌธ์—์„œ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง)

 

 

2. JOIN  ?

๋ณต์ˆ˜์˜ ํ…Œ์ด๋ธ”์„ ๊ฒฐํ•ฉ, ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ

 

1. INNER JOIN :์กฐ์ธํ•˜๋Š” ๋‘๊ฐœ์˜ ํ…Œ์ด๋ธ” ๋ชจ๋‘์— ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ํ–‰์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค

2. OUTER JOIN : ๋งค์นญ๋˜๋Š” ํ–‰์ด ์—†์–ด๋„ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๋งค์นญ๋˜๋Š” ํ–‰์ด ์—†๋Š” ๊ฒฝ์šฐ NULL๋กœ ํ‘œ์‹œํ•œ๋‹ค

  • LEFT OUTER JOIN : table A์™€ B๊ฐ€ ์žˆ์„ ๋•Œ B์˜ JOIN์ปฌ๋Ÿผ์—์„œ ๊ฐ™์€ ๊ฐ’์ด ์žˆ์„ ๋•Œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , B์˜ JOIN์ปฌ๋Ÿผ์—์„œ ๊ฐ™์€ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” Bํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ์ปฌ๋Ÿผ๋“ค์€ NULL๊ฐ’์œผ๋กœ ์ฑ„์›€
  • RIGHT OUTER JOIN : ์ด๊ฑด ์˜ค๋ฅธ์ชฝ
  • FULL OUTER JOIN : ์กฐ์ธ ์ˆ˜ํ–‰์‹œ ์ขŒ์ธก, ์šฐ์ธก ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด JOINํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑ, RIGHT OUTER JOIN ๊ณผ LEFT OUTER JOIN์˜ ๊ฒฐ๊ณผ๋ฅผ ํ•ฉ์ง‘ํ•ฉ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ์™€ ๋™์ผ

(ํ˜„์—…์—์„œ INNER JOIN๊ณผ OUTER JOIN์„ ์ฃผ๋กœ ์“ฐ๊ธฐ์—, ์‹ค์ œ ๋ฉด์ ‘์žฅ์—์„œ CROSS JOIN๊ณผ SELF JOIN์€ ์งˆ๋ฌธ๋ฐ›์€ ์  ์—†์Œ)

 

3. CROSS JOIN 

4. SELF JOIN

 

 

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

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๊ธฐ ์œ„ํ•˜์—ฌ , ๋…ผ๋ฆฌ์ ์ธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•˜๋‚˜์˜ ์ž‘์—…๋‹จ์œ„ ๋˜๋Š” ํ•œ๊บผ๋ฒˆ์— ๋ชจ๋‘ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์—ฐ์‚ฐ๋“ค

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์™„์ „์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ๊ฒƒ์ด ๋ชฉ์ 

์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ์„ ๊ฒฝ์šฐ์—๋Š” commit์ด ์ด๋ฃจ์–ด์ง€๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” rollback์ด ์‹คํ–‰๋˜๋ฉด์„œ 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š์Œ (all or nothing)

 

ํŠธ๋žœ์žญ์…˜์˜ ํŠน์„ฑ

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

- commit : ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์„œ ํŠธ๋žœ์žญ์…˜์ด ๋ฐ˜์˜๋œ ์ƒํƒœ 

- rollback : ์ทจ์†Œํ•˜๊ฑฐ๋‚˜ ์ •์ƒ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์„ ๋•Œ ์ด์ „ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ

 

 

4. ํŠธ๋žœ์žญ์…˜์„ ๋ณ‘ํ–‰์œผ๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ์˜ ๋ฌธ์ œ์  

๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐฑ์‹ ํ•  ๋•Œ ๋‹ค๋ฅธ a์˜ ํŠธ๋žœ์ ์…˜์ด ๋กค๋ฐฑ๋˜๊ณ  b๋„ ๊ฐ™์ด ๋กค๋ฐฑ์ด ๋˜๋Š” ์ƒํ™ฉ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์Œ 

๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• : ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ผ๋ถ€๋ถ„์„ LOCK์„ ๊ฑธ๊ณ , ํŠธ๋žœ์ ์…˜์ด ์™„๋ฃŒ๊ฐ€ ๋˜๋ฉด LOCK์„ ํ’€๊ณ  ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•œ๋‹ค. (๋กœํ‚น์ œ์–ด๊ธฐ๋ฒ•)

 

๋กœํ‚น์ œ์–ด๊ธฐ๋ฒ• ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ : ๋‘๊ฐœ์˜ ํŠธ๋žœ์ ์…˜์ด ๋ฌดํ•œ์ • ๋Œ€๊ธฐํ•ด์•ผํ•˜๋Š”์ƒํƒœ (๋ฐ๋“œ๋ฝ)=>๊ต์ฐฉ์ƒํƒœ์— ๋น ์กŒ๋‹ค

ํ•ด๊ฒฐ๋ฐฉ๋ฒ• : ํ•˜๋‚˜ ๋กค๋ฐฑ์‹œํ‚ค๊ณ  ๋กค๋ฐฑํ•œ๊ฑฐ ์™„๋ฃŒํ•˜๋ฉด ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋Š”๊ฑฐ ์‹คํ–‰ (๋กœํ‚น์ œ์–ด๋ž‘ ๋˜‘๊ฐ™์ด)

 

5. ๊ด€๊ณ„ํ˜• DB์™€ ๋น„๊ด€๊ณ„ํ˜•DB์˜ ์ฐจ์ด?

๊ด€๊ณ„ํ˜• : ํ…Œ์ด๋ธ”ํ˜•ํƒœ๋กœ key Value ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๋น„๊ด€๊ณ„ํ˜• : ํ…Œ์ด๋ธ”ํ˜•์‹์˜ ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ , nosql (mongoDB)

(๋น„๊ด€๊ณ„ํ˜•์˜ ์žฅ์ : ๋น„๊ด€๊ณ„ํ˜•์€ join์ด ์—†์Œ, ๊ฐ€๋ณ€์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Œ)

 

6. PK / FK ?

PK(Primary Key) : ํ…Œ์ด๋ธ”์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ ํ•œ ์ปฌ๋Ÿผ, ํ”„๋ผ์ด๋จธ๋ฆฌํ‚ค(๋ถ€๋ชจํ‚ค)

FK(Foreign Key) : ํ•ด๋‹น ์ปฌ๋Ÿผ์˜ ์˜๋ฏธ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์šธ ๋•Œ ๋ถ€๋ชจํ…Œ์ด๋ธ”์˜ pk๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ปฌ๋Ÿผ(์ž์‹ํ‚ค)

 

7. DB์„ฑ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋Š”์ง€?

QPS (query per second) ์ธก์ • : queue์— ์Œ“์ด๋Š” ์‹œ์ ์„ ๋ฐœ๊ฒฌํ•ด์„œ ์•ˆ์ • ๊ตฌ๊ฐ„์ด ์–ผ๋งˆ์ •๋„์ธ์ง€ ํ™•๋ณด

 

8. http์™€ https์˜ ์ฐจ์ด 

http: ์›น๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ์„œ๋ฒ„์— ์š”์ฒญํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๊ณ  ์ด ํ”„๋กœํ† ์ฝœ์ด๋ž€ ์›น์—์„œ์˜ ๊ทœ์น™, ๊ทœ๊ฒฉ 

https : http์™€ ๋‹ค๋ฅด๊ฒŒ ๋ชจ๋“  ํ†ต์‹ ์„ ์•”ํ˜ธํ™” ํ•˜๊ธฐ ๋•Œ๋ฌธ์— http๋ณด๋‹ค ๋ณด์•ˆ์ด ์ข‹๋‹ค

  

9. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ •๊ทœํ™”

๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์—†์•จ ์ˆ˜ ์žˆ๊ณ , ๋ฐ์ดํ„ฐ ์‚ฝ์ž…,๊ฐฑ์‹ ,์‚ญ์ œ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ข… ์ด์ƒํ˜„์ƒ(Anamolies)์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Œ

(์ •๊ทœํ™”์˜ ๋ฒ•์น™์€ 1์ฐจ์ •๊ทœํ™”, 2์ฐจ์ •๊ทœํ™”,3์ฐจ์ •๊ทœํ™”,BCNF,4์ฐจ์ •๊ทœํ™”,5์ฐจ์ •๊ทœํ™”๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๋ฐ 

์‹ค๋ฌด์ ์œผ๋กœ 4,5๊นŒ์ง€๋Š” ํ•˜์ง€์•Š์Œ)

 

* 3์ฐจ ์ •๊ทœํ™”? (๋ฉด์ ‘์งˆ๋ฌธ ๋นˆ๋„์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์ •๊ทœํ™”)

=>๊ธฐ๋ณธํ‚ค๋ฅผ ์ œ์™ธํ•œ ์†์„ฑ๋“ค ๊ฐ„์˜ ์ดํ–‰์  ํ•จ์ˆ˜ ์ข…์†์ด ์—†๋Š” ๊ฒƒ(๊ธฐ๋ณธํ‚ค ์ด์™ธ์˜ ๋‹ค๋ฅธ ์ปฌ๋Ÿผ์ด ๊ทธ์™ธ ๋‹ค๋ฅธ ์ปฌ๋Ÿผ์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ) 

 

10. mapper

parameter Type=์ž…๋ ฅ๋  ๋ฐ์ดํ„ฐ

resulte Type=์ฟผ๋ฆฌ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ

 

 

๋ฐ˜์‘ํ˜•