๐Ÿงฑ ACID ํŠธ๋žœ์žญ์…˜ ์ดํ•ดํ•˜๊ธฐ

์—…๋ฐ์ดํŠธ:
2 ๋ถ„ ์†Œ์š”

โœ… ACID๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

ACID๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜์ด ์ •ํ™•ํ•˜๊ณ  ์‹ ๋ขฐ์„ฑ ์žˆ๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋„๋ก ๋ณด์žฅํ•˜๋Š” 4๊ฐ€์ง€ ํ•ต์‹ฌ ์†์„ฑ์ž…๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ ์„ค๋ช…
A - Atomicity ํŠธ๋žœ์žญ์…˜์€ ๋ชจ๋‘ ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜ ๋ชจ๋‘ ์‹คํŒจํ•ด์•ผ ํ•จ
C - Consistency ํŠธ๋žœ์žญ์…˜ ํ›„ DB๋Š” ํ•ญ์ƒ ์œ ํšจํ•œ ์ƒํƒœ์—ฌ์•ผ ํ•จ
I - Isolation ํŠธ๋žœ์žญ์…˜์€ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•จ
D - Durability ํŠธ๋žœ์žญ์…˜ ๊ฒฐ๊ณผ๋Š” ์˜๊ตฌ์ ์œผ๋กœ ๋ณด์กด๋˜์–ด์•ผ ํ•จ

๐Ÿงฉ 1. ์›์ž์„ฑ (Atomicity)

ํŠธ๋žœ์žญ์…˜์€ ๋” ์ด์ƒ ๋‚˜๋ˆŒ ์ˆ˜ ์—†๋Š” ์ตœ์†Œ ๋‹จ์œ„
์ „๋ถ€ ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜, ์ „๋ถ€ ์‹คํŒจํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ์˜ˆ์‹œ: ๊ณ„์ขŒ ์ด์ฒด

  1. A ๊ณ„์ขŒ์—์„œ 3000์› ์ถœ๊ธˆ
  2. B ๊ณ„์ขŒ์— 3000์› ์ž…๊ธˆ

โ†’ 2๋ฒˆ์—์„œ ์‹คํŒจํ•˜๋ฉด 1๋ฒˆ๋„ ์ž๋™ ๋กค๋ฐฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์‹ค์ œ ๊ตฌํ˜„: Undo ๋กœ๊ทธ

  • RDBMS๋Š” ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘ ์ „ ๊ฐ’์„ Undo ๋กœ๊ทธ๋กœ ์ €์žฅ
  • ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ, ๋กœ๊ทธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด์ „ ์ƒํƒœ๋กœ ๋กค๋ฐฑ

๐Ÿงฉ 2. ์ผ๊ด€์„ฑ (Consistency)

ํŠธ๋žœ์žญ์…˜ ์ „ํ›„๋กœ DB ์ œ์•ฝ ์กฐ๊ฑด์ด ํ•ญ์ƒ ์œ ์ง€๋˜์–ด์•ผ ํ•จ

๐Ÿ“Œ ์˜ˆ์‹œ: ์ œ์•ฝ ์กฐ๊ฑด ์œ„๋ฐ˜

  • User ํ…Œ์ด๋ธ”์— NOT NULL ์ปฌ๋Ÿผ์ด ์žˆ๋Š”๋ฐ,
    ํŠธ๋žœ์žญ์…˜ ์ค‘๊ฐ„์— NULL์ด ์‚ฝ์ž…๋˜๋ฉด โ†’ ์ „์ฒด ํŠธ๋žœ์žญ์…˜ ๋กค๋ฐฑ

๐Ÿ’ก ์‹ค์ œ ๊ตฌํ˜„

  • ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ: FK, ์ œ์•ฝ์กฐ๊ฑด, ํŠธ๋ฆฌ๊ฑฐ ๋“ฑ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ โ†’ DB๋กœ ์œ„์ž„

๐Ÿงฉ 3. ๊ฒฉ๋ฆฌ์„ฑ (Isolation)

๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ํŠธ๋žœ์žญ์…˜์ด ์„œ๋กœ ๊ฐ„์„ญํ•˜์ง€ ์•Š๋„๋ก ๋ณด์žฅ

๐Ÿ“Œ ์˜ˆ์‹œ: ์ค‘๊ฐ„ ๊ฒฐ๊ณผ ๋…ธ์ถœ ๋ฐฉ์ง€

  • A ๊ณ„์ขŒ โ†’ B ๊ณ„์ขŒ ์ด์ฒด ์ค‘์—
    ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ A์˜ ์ž”๊ณ ๋ฅผ ์กฐํšŒํ•˜๋ฉด ์•ˆ ๋จ (์ค‘๊ฐ„ ์ƒํƒœ ๋…ธ์ถœ ๋ฐฉ์ง€)

๐Ÿ’ก ํŠธ๋žœ์žญ์…˜ ๊ฐ„์„ญ ๋ฌธ์ œ (Isolation Level)

๋ฌธ์ œ ์œ ํ˜• ์„ค๋ช…
Dirty Read ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๊ฐ’ ์ฝ๊ธฐ
Non-repeatable Read ํ•œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๊ฐ’์ด ๋ฐ”๋€œ
Phantom Read ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰์ด ์ƒ๊ธฐ๊ฑฐ๋‚˜ ์‚ฌ๋ผ์ง

๐Ÿ’ก ์‹ค์ œ ์ œ์–ด ๋ฐฉ๋ฒ•

  • ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ์„ค์ • (Isolation Level)
Level ์„ค๋ช…
READ UNCOMMITTED ์ตœ์†Œ ๋ณด์žฅ, Dirty Read ๊ฐ€๋Šฅ
READ COMMITTED Oracle ๊ธฐ๋ณธ๊ฐ’
REPEATABLE READ MySQL InnoDB ๊ธฐ๋ณธ๊ฐ’
SERIALIZABLE ๊ฐ€์žฅ ์—„๊ฒฉ, ์„ฑ๋Šฅ ๋ถ€๋‹ด โ†‘

๐Ÿงฉ 4. ์ง€์†์„ฑ (Durability)

์„ฑ๊ณตํ•œ ํŠธ๋žœ์žญ์…˜์€ ์‹œ์Šคํ…œ์ด ๊บผ์ ธ๋„ ๋ฐ˜๋“œ์‹œ ์ €์žฅ๋˜์–ด์•ผ ํ•จ

๐Ÿ“Œ ์˜ˆ์‹œ

  • ์ฃผ๋ฌธ ์„ฑ๊ณต ๋ฉ”์‹œ์ง€ โ†’ DB ๋ฐ˜์˜๋˜์—ˆ๋Š”๋ฐ
    ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜์–ด๋„ โ†’ ์žฌ์‹œ์ž‘ ํ›„ ๋ฐ์ดํ„ฐ๋Š” ๊ทธ๋Œ€๋กœ ์žˆ์–ด์•ผ ํ•จ

๐Ÿ’ก ์‹ค์ œ ๊ตฌํ˜„: WAL (Write-Ahead Logging)

  • ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋˜๋ฉด ๋จผ์ € ๋กœ๊ทธ ํŒŒ์ผ(WAL)์— ๊ธฐ๋ก
  • ๋””์Šคํฌ์— ์“ฐ๊ธฐ ์™„๋ฃŒ๋œ ํ›„์—์•ผ ํŠธ๋žœ์žญ์…˜์„ ์„ฑ๊ณต์œผ๋กœ ์ฒ˜๋ฆฌ
  • ์‹œ์Šคํ…œ ์žฅ์•  ์‹œ โ†’ WAL์„ ์ฝ์–ด ์ƒํƒœ ๋ณต๊ตฌ ๊ฐ€๋Šฅ

๐Ÿ’ฌ ์ถ”๊ฐ€๋กœ ์•Œ์•„๋‘๋ฉด ์ข‹์€ ๊ฐœ๋…๋“ค

๊ฐœ๋… ์„ค๋ช…
WAL (Write-Ahead Logging) ๋กœ๊ทธ ์šฐ์„  ๊ธฐ๋ก โ†’ ๋ณต๊ตฌ๋ฅผ ์œ„ํ•œ ํ•ต์‹ฌ
CAP ์ด๋ก ๊ณผ์˜ ๊ด€๊ณ„ ACID๋Š” Consistency์— ์ง‘์ค‘, CAP์€ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„
ํŠธ๋žœ์žญ์…˜ Savepoint ํŠธ๋žœ์žญ์…˜ ๋‚ด๋ถ€์—์„œ ํŠน์ • ์ง€์ ๊นŒ์ง€ ๋กค๋ฐฑ ๊ฐ€๋Šฅ
Auto Commit ํŠธ๋žœ์žญ์…˜์„ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™ ์ปค๋ฐ‹๋จ (์ฃผ์˜!)

๐ŸŽฏ ์‹ค๋ฌด์—์„œ๋Š” ์–ธ์ œ ACID๋ฅผ ํ™œ์šฉํ•˜๋‚˜์š”?

  • ๊ณ„์ขŒ ์ด์ฒด, ์ฃผ๋ฌธ, ์žฌ๊ณ  ๊ฐ์†Œ ๋“ฑ ์ ˆ๋Œ€ ์‹คํŒจํ•˜๋ฉด ์•ˆ ๋˜๋Š” ์ž‘์—…
  • ๊ธˆ์œต/๊ฒฐ์ œ/์ธ์ฆ ๋“ฑ์—์„œ ์ผ๊ด€์„ฑ๊ณผ ์ •ํ™•์„ฑ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ
  • ๋Œ€์ฒด๋กœ RDBMS (MySQL, PostgreSQL ๋“ฑ)๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ACID ๋ณด์žฅ

๐Ÿ“š ์ •๋ฆฌ ์š”์•ฝ

์†์„ฑ ์˜๋ฏธ ์‹ค๋ฌด ํฌ์ธํŠธ
A - ์›์ž์„ฑ All or Nothing ์ค‘๊ฐ„ ์‹คํŒจ โ†’ ์ „์ฒด ๋กค๋ฐฑ
C - ์ผ๊ด€์„ฑ ๊ทœ์น™ ์œ ์ง€ FK, ์ œ์•ฝ์กฐ๊ฑด ์œ ์ง€
I - ๊ฒฉ๋ฆฌ์„ฑ ๋…๋ฆฝ์  ์‹คํ–‰ ์ค‘๊ฐ„ ๊ฐ’ ๋ณด์ง€ ์•Š๊ฒŒ
D - ์ง€์†์„ฑ ์‹คํŒจํ•ด๋„ ๊ฒฐ๊ณผ ์œ ์ง€ WAL๋กœ ๋ณต๊ตฌ ๊ฐ€๋Šฅ

ํƒœ๊ทธ: , , , , , , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ