์ผ๋‹จ ํ•˜๊ณ  ๋ณด๋Š” ์‚ฌ๋žŒ

๋‚˜์ค‘๋ณด๋‹จ ์ง€๊ธˆ์— ์ง‘์ค‘ํ•˜๋˜, ์ง€๊ธˆ๋ณด๋‹จ ๋‚˜์ค‘์— ์™„๋ฒฝํ•ด์ง€์ž๐Ÿ’ช๐Ÿป

๐Ÿ—„๏ธData Base ์•„๋Š” ๊ฒƒ๋„ ๋‹ค์‹œ๋ณด์ž

ํŠธ๋žœ์žญ์…˜, ๋™์‹œ์„ฑ ์ œ์–ด

JanginTech 2024. 8. 5. 22:57

1. ํŠธ๋žœ์žญ์…˜

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

 

2. ํŠธ๋žœ์žญ์…˜ ์ฃผ์š” ์†์„ฑ: ACID

 

2.1. ์›์ž์„ฑ

  • ํŠธ๋žœ์žญ์…˜ ๋‚ด์˜ ๋ชจ๋“  ์ž‘์—…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค.
  • ์ž‘์—…์ด ์‹คํŒจํ•˜๋ฉด ํŠธ๋žœ์žญ์…˜ ์ค‘๋‹จ -> ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด rollback -> ์›๋ž˜ ์ƒํƒœ ์œ ์ง€

 

2.2. ์ผ๊ด€์„ฑ

  • DB์˜ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ ์กฐ๊ฑด๊ณผ ๊ทœ์น™์„ ์œ ์ง€ํ•˜๋ฉด์„œ DB๋ฅผ ํ•˜๋‚˜์˜ ์œ ํšจํ•œ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์œ ํšจํ•œ ์ƒํƒœ๋กœ ๊ฐ€์ ธ์˜ค๋„๋ก ๋ณด์žฅํ•œ๋‹ค.

 

2.3. ๋…๋ฆฝ/๊ฒฉ๋ฆฌ์„ฑ

  • ์™ธ๋ถ€ ๊ฐ„์„ญ ์—†์ด ํŠธ๋žœ์žญ์…˜์ด ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜์˜ ์ค‘๊ฐ„์ƒํƒœ๋Š” ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ณด์ด์ง€ ์•Š์œผ๋ฏ€๋กœ, ํŠธ๋žœ์žญ์…˜์˜ ๋ถ€๋ถ„์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

 

2.4. ์˜๊ตฌ์„ฑ

  • ์ผ๋‹จ ํŠธ๋žœ์žญ์…˜์ด commit ๋˜๋ฉด ์‹œ์Šคํ…œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์˜๊ตฌ์ ์œผ๋กœ ์œ ์ง€๋˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค.

 

 

DBMS์—์„œ Transaction์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ SQL๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

BEGIN TRANSACTION;

INSERT INTO accounts (account_id, balance) VALUES (1, 1000);
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

COMMIT;

 

์ƒˆ ๊ณ„์ขŒ 1์„ ์‚ฝ์ž…ํ•˜๊ณ , 1์—์„œ 2๋ผ๋Š” ๊ณ„์ขŒ๋กœ 100์„ ์ด์ฒดํ•˜๋Š” ์ž‘์—…์ด๋‹ค.

์ด๋Ÿฌํ•œ ์ž‘์—… ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์ด ๊นจ์ง„๋‹ค.

 

 

โž•

์ผ๊ด€์„ฑ: ๋ชจ๋“  ์ž‘์—…์ด๋‚˜ ํŠธ๋žœ์žญ์…˜ ์ดํ›„ ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ๊ณผ ์œ ํšจ์„ฑ

๋ฌด๊ฒฐ์„ฑ: ์ •ํ™•์„ฑ, ์œ ํšจ์„ฑ, ์ผ๊ด€์„ฑ ์œ ์ง€

 

 

 

์ž‘์—… ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋”๋ผ๋„, ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ ํŠธ๋žœ์žญ์…˜ rollback์„ ํ•œ๋‹ค.

 

 

 

๋‹ค์‹œ ํ‘œ๋กœ ์ •๋ฆฌํ•ด๋ณด์ž.

 

Atomicity ALL or NOTHING
commit / rollback
Consistency ex. ๊ณ„์ขŒ ์ž”์•ก์Œ ์Œ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์—†์Œ
Isolation ํŠธ๋žœ์žญ์…˜ ์ž‘์—… ์ˆ˜ํ–‰ ์ค‘์—๋Š” ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ์˜ํ–ฅ์„ ์ฃผ์–ด์„œ๋„/๋ฐ›์•„์„œ๋„ ์•ˆ ๋จ
Durability ์‹œ์Šคํ…œ ๋ฌธ์ œ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ์™„๋ฃŒ๋œ ๋ฐ์ดํ„ฐ๋Š” ์˜๊ตฌ์ ์œผ๋กœ DB์— ์ €์žฅ

 

 

 

 

 

 

2. ๋™์‹œ์„ฑ ์ œ์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜

ํŠนํžˆ ๋‹ค์ค‘ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์—์„œ ํŠธ๋žœ์žญ์…˜์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋™์‹œ์„ฑ ์ œ์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— DB์— ์ ‘๊ทผํ•  ๋•Œ ๋ฐœ์ƒํ•  ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€/ํ•ด๊ฒฐํ•œ๋‹ค.

 

 

๋™์‹œ์„ฑ ์ œ์–ด์˜ ์žฅ์ ?

โžก๏ธ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ๊ฐ™์€ DB์— ์ ‘๊ทผํ•  ๋•Œ ๋ฐœ์ƒํ•  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ์คŒ

โžก๏ธ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ, ์ผ๊ด€์„ฑ ์œ ์ง€

โžก๏ธ ์ง๋ ฌ์„ฑ ๋ณด์žฅ: ์ˆœ์ฐจ์  ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ์™€ ๋™์ผํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€

โžก๏ธ ์‹œ์Šคํ…œ ์ฒ˜๋ฆฌ๋Ÿ‰ ์ฆ๊ฐ€

 

 

๋™์‹œ์„ฑ ์ œ์–ด์˜ ๋ฌธ์ œ์ โ—

1. ๊ฐฑ์‹  ์†์‹ค(Update Loss)

  • ๋‘ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ํ•œ ํŠธ๋žœ์žญ์…˜์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ์˜ํ•ด ๋ฎ์–ด์“ฐ๊ฒŒ ๋˜์–ด
  • ์˜๋„์™€๋Š” ๋‹ค๋ฅธ ๊ฒฐ๊ด๊ฐ’์ด ์ €์žฅ๋จ

2. ์ƒํƒœ ๊ฒฐ์ • ์˜ค๋ฅ˜(Error in Determining Status)

  • ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์‹คํ–‰๋  ๋•Œ ๋ฐ์ดํ„ฐ์˜ ์ƒํƒœ๋ฅผ ์ž˜๋ชป ํŒ๋‹จํ•˜์—ฌ ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜
  • ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ํ•ด์นจ

3. ๋ชจ์ˆœ(Contradiction)

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

4. ์—ฐ์‡„ ๋ณต๊ท€(Cascading Rollback)

  • ํ•œ ํŠธ๋žœ์žญ์…˜์ด rollback ํ•  ๋•Œ, ์—ฐ๊ด€๋œ ํŠธ๋žœ์žญ์…˜๋„ ๊ฐ™์ด rollback์„ ๋ชป ํ•˜๋Š” ๊ฒฝ์šฐ