JS

[ACID #2] Atomicity๋ž€? ์•„ํ† ๋ฏนํ•œ ํŠธ๋žœ์žญ์…˜์ด๋ž€? ๋ณธ๋ฌธ

Database

[ACID #2] Atomicity๋ž€? ์•„ํ† ๋ฏนํ•œ ํŠธ๋žœ์žญ์…˜์ด๋ž€?

seunghyunson 2022. 1. 11. 23:08

โœ”๏ธ Atomicity๋ž€?

๐Ÿ’ก Atomicity๋Š” RDBMS๋ฅผ ์ •์˜ํ•˜๋Š” ACID ํŠธ๋žœ์žญ์…˜ ํŠน์„ฑ ์ค‘ A์— ํ•ด๋‹นํ•˜๋Š” ํŠน์„ฑ์ž…๋‹ˆ๋‹ค.

 

ํ•œ๊ธ€๋กœ ์ง์—ญํ•˜๋ฉด ์›์ž์„ฑ์ด๋ผ๋Š” ๋œป์„ ๊ฐ€์ง€๋ฉฐ ์™œ ํŠธ๋žœ์žญ์…˜์—์„œ Atomicity๋ž€ ํŠน์„ฑ์ด ์ค‘์š”ํ•œ์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค.


โœ”๏ธ Atomicity (์›์ž์„ฑ)

1๏ธโƒฃ ํŠธ๋žœ์žญ์…˜์˜ ๋ชจ๋“  ์ฟผ๋ฆฌ๋Š” ์„ฑ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โž– ์›์ž์„ฑ์ด๋ž€ ์–ด๋–ค ๊ฒƒ์ด ๋” ์ด์ƒ ์ชผ๊ฐœ์งˆ ์ˆ˜ ์—†๋Š” ์„ฑ์งˆ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ž‘์—…์ด ํ•˜๋‚˜์˜ ์ž‘์—…์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ์›์ž(atom)์™€ ๊ฐ™์ด ์ชผ๊ฐค ์ˆ˜ ์—†๋‹ค๋Š” ๋œป์ด์ฃ .

 

2๏ธโƒฃ ๋งŒ์•ฝ ํŠธ๋žœ์žญ์…˜ ๋„์ค‘ ์–ด๋–ค ์ด์œ ์—์„œ๊ฑด ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํŒจํ•œ๋‹ค๋ฉด ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜ ๋‚ด ์‹คํŒจํ•œ ์ฟผ๋ฆฌ ์ด์ „์— ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋๋˜ ๋ชจ๋“  ์ฟผ๋ฆฌ๋“ค์€ ROLLBACK ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โž– ์ฟผ๋ฆฌ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋‹ค์–‘ํ•œ ์ด์œ ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณ„์ขŒ ์ž”์•ก์ฒ˜๋Ÿผ 0 ๋ฐ‘์œผ๋กœ ๋‚ด๋ ค๊ฐ€๋ฉด ์•ˆ ๋˜๋Š” ์ƒํ™ฉ์— ์ž”์•ก์ด ์Œ์ˆ˜๊ฐ€ ๋œ๋‹ค๋˜์ง€, ์ค‘๋ณต ๊ณ ์œ  ํ‚ค, ์•„๋‹ˆ๋ฉด ์ž˜๋ชป๋œ SQL ๊ตฌ๋ฌธ๋„ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

3๏ธโƒฃ ํŠธ๋žœ์žญ์…˜์„ ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๐Ÿ’ฅCRASH๊ฐ€ ๋ฐœ์ƒํ•ด (์‹คํŒจํ•œ ์ฟผ๋ฆฌ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ) ๋ฉˆ์ถ”๊ฒŒ ๋œ๋‹ค๋ฉด ํŠธ๋žœ์žญ์…˜ ๋‚ด ์„ฑ๊ณตํ•œ ๋ชจ๋“  ์ฟผ๋ฆฌ๊ฐ€ ROLLBACK ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โž– ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋ณต๊ตฌ๋˜์—ˆ์„ ๋•Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํŠธ๋žœ์žญ์…˜ ์ค‘ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ROLLBACK ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


โœ”๏ธ Example

account_id balance
1 $1000
2 $500

 

Account 1์—์„œ Account 2๋กœ $100๋ฅผ ์†ก๊ธˆํ•˜๋Š” ์ƒํ™ฉ

BEGIN;
    SELECT balance FROM accounts WHERE id = 1;

    UPDATE accounts SET balance = balance - 100 WHERE id = 1;
    
    ** CRASH **

Account 1์˜ balance์—์„œ $100์„ ์ฐจ๊ฐํ•˜๋Š” ์ˆœ๊ฐ„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๐Ÿ’ฅCRASH๊ฐ€ ๋ฐœ์ƒํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋‹ค์šด๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค.

 

account_id balance
1 $900
2 $500

 

๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ณต๊ตฌ๋˜์—ˆ์„ ๋•Œ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•ด ROLLBACK์ด ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋‚จ๋Š”๋‹ค๋ฉด, Atomicity(์›์ž์„ฑ)์„ ๋ณด์žฅํ•˜์ง€ ์•Š๊ฒŒ ๋˜์–ด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ Inconsistent(๋ถˆ์ผ์น˜)ํ•˜๊ฒŒ ๋˜๋Š” ํ˜„์ƒ์ด ์ƒ๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด Account 1์˜ balance๋Š” ๊ธฐ์กด $1000์—์„œ $100๋ฅผ ์ฐจ๊ฐํ•œ $900๋กœ ๋‚จ์•„์žˆ๊ฒŒ ๋˜๊ณ , Account 2์˜ balance๋Š” $500๋กœ ๋ณ€ํ™”๊ฐ€ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

์ด๋Ÿฐ ๊ฒฝ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋‹ค์‹œ ๋ณต๊ตฌ๋์„ ๋•Œ ๊ผญ ROLLBACK์„ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


โœ”๏ธ Summary

  • ํŠธ๋žœ์žญ์…˜์€ ์•„ํ† ๋ฏน ํ•ด์•ผ ํ•˜๋ฉฐ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ ๋ชจ๋“  ์ฟผ๋ฆฌ๋ฅผ ๋กค๋ฐฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • 100๊ฐœ์˜ ์ฟผ๋ฆฌ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•œ๋‹ค๋ฉด 100๊ฐœ์˜ ์ฟผ๋ฆฌ ๋ชจ๋‘ ๋กค๋ฐฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Comments