์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ์๋ฐ ๋์์ฑ
- ํธ๋์ญ์
- JPA ์ฅ์
- ArrayList ๊ธธ์ด ํ์ฅ
- ์ปจํ ์ด๋
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- thread safety
- ArrayList ์์ค์ฝ๋
- ๋์ปค
- ๋ฉํฐ์ค๋ ๋ ์ฑ๊ธํค
- index
- load balancer
- transaction
- docker
- JPA
- ArrayList ๊ฐ๋ณ
- PostgreSQL
- create-drop
- github
- ๊ถ์ฅ PK ์ ๋ต
- heap
- Database
- postgres
- JPA๋
- Container
- acid
- ์ฑ๊ธํค ๋์์ฑ
- java
- ๋ก๋๋ฐธ๋ฐ์
- ์คํค๋ง ์๋ ์์ฑ
- Today
- Total
JS
[ACID #2] Atomicity๋? ์ํ ๋ฏนํ ํธ๋์ญ์ ์ด๋? ๋ณธ๋ฌธ
โ๏ธ 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๊ฐ์ ์ฟผ๋ฆฌ ๋ชจ๋ ๋กค๋ฐฑ๋์ด์ผ ํฉ๋๋ค.
'Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Postgres๋ ๋ฐ์ดํฐ๋ฅผ ์ด๋์ ์ด๋ค ํํ๋ก ์ ์ฅํ ๊น? (0) | 2022.02.02 |
---|---|
INTERVAL์ ์ด์ฉํ ์๊ฐ ๊ณ์ฐํ๊ธฐ (0) | 2022.02.01 |
[ACID #3] Isolation์ด๋? ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค(isolation level)์ด๋? (0) | 2022.01.18 |
[ACID #1] Transaction์ด๋? (0) | 2022.01.10 |
PostgreSQL ์ค์นํ๊ธฐ (MacOS) (0) | 2022.01.03 |