jacketList

[DataBase] ํŠธ๋žœ์žญ์…˜(transaction) ๋ณธ๋ฌธ

Cs/DataBase

[DataBase] ํŠธ๋žœ์žญ์…˜(transaction)

ukkkk7 2024. 2. 6. 10:42
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ‘€ ํŠธ๋žœ์žญ์…˜(Transaction)์ด๋ž€?

ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์˜ ๋‹จ์œ„ - > ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฟผ๋ฆฌ๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ๋Š” ๋‹จ์œ„

ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์ด๋‹ค.

 

Commit

  • ์ง€๊ธˆ๊นŒ์ง€ ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ DB์— ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ
  • transaction์„ ์ข…๋ฃŒ

RollBack

  • ์ง€๊ธˆ๊นŒ์ง€ ์ž‘์—…ํ•œ ๋‚ด์šฉ๋“ค์„ ์ „๋ถ€ ์ทจ์†Œํ•˜๊ณ  transaction ์ด์ „ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค.
  • transaction ์ข…๋ฃŒ

AutoCommit

  • ๊ฐ๊ฐ์˜ ์ฟผ๋ฆฌ์— ์ž๋™์œผ๋กœ transaction ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฐœ๋…
  • ์ฟผ๋ฆฌ๊ฐ€ ์„ฑ๊ณตํ•˜๋ฉด ์ž๋™์œผ๋กœ commitํ•œ๋‹ค.
  • ์‹คํ–‰ ์ค‘์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด rollbackํ•œ๋‹ค.
  • MySQL์€ default๋กœ autocommit์ด ํ™œ์„ฑํ™” ๋˜์–ด์žˆ๋‹ค.
  • MySQL์—์„œ Start Transaction์„ ์‹คํ–‰ํ•˜๋ฉด ํ™œ์„ฑํ™” ๋˜์–ด์žˆ๋˜ autocommit ์€ off๋œ๋‹ค.
  • commit/rollback๊ณผ ํ•จ๊ป˜ transaction์ด ์ข…๋ฃŒ๋˜๋ฉด autocommit์€ ํ™œ์„ฑํ™” ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

 

MySQL๋กœ ๋ณด๋Š” ์˜ˆ์‹œ

START TRANSACTION;
UPDATE account SET balance = balance -100000 WHERE id = "a";
UPDATE account SET balance = balance +100000 WHERE id = "b";
COMMIT;

 

"a"์™€ "b"๋Š” ๊ฑฐ๋ž˜๋ฅผ ํ•˜๊ณ ์žˆ๋Š” ์ƒํ™ฉ์ด๋‹ค. "a"๋Š” "b"์—๊ฒŒ 10๋งŒ์›์„ ๊ณ„์ขŒ์ด์ฒด ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ 

์œ„์™€๊ฐ™์€ ๋‘๊ฐ€์ง€ ๋™์ž‘์ด ์‹คํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค.

"a"์˜ ๊ณ„์ขŒ์—์„  10๋งŒ์›์ด ๋น ์ ธ๋‚˜๊ฐ€๊ณ  "b"์˜ ๊ณ„์ขŒ์—์„  10๋งŒ์›์ด ๋“ค์–ด์˜ค๋„๋ก update์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ "a"์˜ ๊ณ„์ขŒ์—์„œ 10๋งŒ์›์ด ๋น ์ ธ๋‚˜๊ฐ€๋Š” update์ฟผ๋ฆฌ๋Š” ์‹คํ–‰๋˜์—ˆ์ง€๋งŒ "b"์—๊ฒŒ 10๋งŒ์›์ด ๋“ค์–ด์˜ค๋Š” update์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์ด ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

์œ„์™€๊ฐ™์€ ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด '๊ฑฐ๋ž˜'๋ผ๋Š” ํ•˜๋‚˜์˜ ์ž‘์—… ๋‹จ์œ„์—์„œ ์–ด๋А ํ•œ์ชฝ์˜ update๋ฌธ๋งŒ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ Rollback๊ธฐ๋Šฅ์œผ๋กœ Transaction ์ด์ „์˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค.

 

a์™€ b์˜ ๊ฑฐ๋ž˜ 

Transaction ์‹œ์ž‘  

(a๊ฐ€ b์—๊ฒŒ ๋ˆ ์ด์ฒด - b๊ฐ€ a์—๊ฒŒ ๋ˆ ๋ฐ›์Œ) - ์–ด๋А ์ž‘์—…์ด๋ผ๋„ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด Rollback

commit - transaction์ข…๋ฃŒ

 

๐ŸŸก ACID ์†์„ฑ

์›์ž์„ฑ(Atomictiy)

  • ํŠธ๋žœ์žญ์…˜๊ณผ ๊ด€๋ จ๋œ ์ž‘์—…์ด ๋ชจ๋‘ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜ ์ˆ˜ํ–‰๋˜์ง€ ์•Š๊ฑฐ๋‚˜๋ฅผ ๋ณด์žฅํ•˜๋Š” ํŠน์ง•
  • Commit ์ด์ „์—๋Š” ๋””์Šคํฌ์— ์“ฐ์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ์—๋งŒ ์ €์žฅํ•ด ๋‘์—ˆ๋‹ค๊ฐ€ ์ค‘๊ฐ„์— ์‹คํŒจํ•˜๋ฉด ๋””์Šคํฌ์— ๋ฐ˜์˜ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹ 

์ผ๊ด€์„ฑ(Consistency)

  • ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋œ ๋‹ค์Œ์˜ ์ƒํƒœ์—์„œ๋„ ํŠธ๋žœ์žญ์…˜์ด ์ผ์–ด๋‚˜๊ธฐ ์ „์˜ ์ƒํ™ฉ๊ฐ€ ๋™์ผํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅ
  • constraints, trigger ๋“ฑ์„ ํ†ตํ•ด DB์— ์ •์˜๋œ ๊ทœ์น™์„ transaction์ด ์œ„๋ฐ˜ํ–ˆ๋‹ค๋ฉด Rollbackํ•ด์•ผ ํ•œ๋‹ค.

Ex) a - > b ์ด์ฒด

a๊ณ„์ขŒ : 100๋งŒ์› 

b๊ณ„์ขŒ : 10๋งŒ์›

a -> b  110๋งŒ์› ์ด์ฒด

a๊ณ„์ขŒ : -10๋งŒ์›

CREATE TABLE account (
    ...,
    balance INT,
    check (balance >= 0)
)

 

account ํ…Œ์ด๋ธ”์€ ์Œ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค๋Š” ์ œ์•ฝ์‚ฌํ•ญ์ด ์žˆ๋‹ค. -> Rollback

 

๊ฒฉ๋ฆฌ์„ฑ(Isolation)

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

Ex)

a -> b ๊ณ„์ขŒ ์ด์ฒด (Transaction)

a ๊ณ„์ขŒ ์กฐํšŒ (read) - 100๋งŒ์›

a ๊ณ„์ขŒ ์ด์ฒด (write) - 90 ๋งŒ์›

 

b๊ณ„์ขŒ (Transaction)

b ๊ณ„์ขŒ ์กฐํšŒ (read) - 10๋งŒ์›

 

b๋ณธ์ธ ๊ณ„์ขŒ์— ๊ณ„์ขŒ์ด์ฒด(Transaction)

b ๊ณ„์ขŒ ์กฐํšŒ (read) - 10๋งŒ์›

b ๊ณ„์ขŒ ์ด์ฒด (write) - 40๋งŒ์›

 

b ๊ณ„์ขŒ ๊ฐฑ์‹  (write) - 20๋งŒ์›

 

์ง€์†์„ฑ(Durability)

  • ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ(commit) ํŠธ๋žœ์žญ์…˜์€ ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ €์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

 

 

 

references

https://hello-judy-world.tistory.com/196

https://www.youtube.com/watch?v=sLJ8ypeHGlM

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•