1 λΆ„ μ†Œμš”

νŠΈλžœμž­μ…˜μ΄λž€?

νŠΈλžœμž­μ…˜μ΄λž€, DB의 μƒνƒœλ₯Ό λ³€κ²½μ‹œν‚€λŠ” μž‘μ—…μ˜ λ‹¨μœ„λΌκ³  μƒκ°ν•˜λ©΄ λœλ‹€.

즉, ν•œκΊΌλ²ˆμ— μˆ˜ν–‰λ˜μ–΄μ•Ό ν•  연산을 λͺ¨μ•„놓은 κ²ƒμž„.

이 μ—°μ‚° 묢음이 μ²˜λ¦¬λ˜μ§€ λͺ»ν•˜λ©΄ μ›μƒνƒœλ‘œ λ³΅κ΅¬λœλ‹€λŠ” 것이 νŠΉμ§•μ΄λ‹€. (μž‘μ—…μ˜ μΌλΆ€λ§Œ μ μš©λ˜λŠ” ν˜„μƒ λ°©μ§€)

이런 νŠΉμ§• λ•Œλ¬Έμ— νŠΈλžœμž­μ…˜μ€ μž‘μ—…μ˜ 완전성을 보μž₯ν•΄μ€€λ‹€.

νŠΈλžœμž­μ…˜μ€ 크게 4κ°€μ§€ νŠΉμ§•μ„ κ°–κ³ μžˆλŠ”λ°, ACID둜 잘 μ•Œλ €μ ΈμžˆμŒ.

Atomicity (μ›μžμ„±)

νŠΈλžœμž­μ…˜μ΄ DB에 λͺ¨λ‘ λ°˜μ˜λ˜κ±°λ‚˜, ν˜Ήμ€ μ „ν˜€ λ°˜μ˜λ˜μ§€ μ•Šμ•„μ•Ό 함.

Consistenty (일관성)

νŠΈλžœμž­μ…˜μ˜ μž‘μ—… 처리 κ²°κ³ΌλŠ” 항상 일관성 μžˆμ–΄μ•Ό 함.

μ‹œμŠ€ν…œμ΄ κ°–κ³ μžˆλŠ” κ³ μ • μš”μ†ŒλŠ” νŠΈλžœμž­μ…˜ μˆ˜ν–‰ μ „κ³Ό μˆ˜ν–‰ ν›„μ˜ μƒνƒœκ°€ κ°™μ•„μ•Όν•œλ‹€λŠ” 의미둜, DB의 μ œμ•½μ‘°κ±΄μ„ μœ„λ°°ν•˜λŠ” μž‘μ—…μ„ νŠΈλžœμž­μ…˜ κ³Όμ •μ—μ„œ μˆ˜ν–‰ν•  수 μ—†μŒμ„ λ‚˜νƒ€λƒ„.

Isolation (독립성)

λ‘˜ μ΄μƒμ˜ νŠΈλžœμž­μ…˜μ΄ λ™μ‹œμ— 병행 μ‹€ν–‰λ˜κ³  μžˆμ„ λ•Œ, μ–΄λ–€ νŠΈλžœμž­μ…˜λ„ λ‹€λ₯Έ νŠΈλžœμž­μ…˜ 연산에 끼어듀 수 μ—†μŒ.

Durability (지속성)

νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆλ‹€λ©΄, κ²°κ³ΌλŠ” 영ꡬ적으둜 λ°˜μ˜λ˜μ–΄μ•Ό 함.

νŠΈλžœμž­μ…˜μ˜ μ—°μ‚°?

νŠΈλžœμž­μ…˜μ€ μ—°μ‚°μ˜ 묢음이라고 ν–ˆλ‹€.

μ—°μ‚°μ—λŠ” μ–΄λ–€ 것듀이 μžˆμ„κΉŒ?

COMMIT μ—°μ‚°

νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μˆ˜ν–‰λ˜μ—ˆμŒμ„ μ„ μ–Έν•˜λŠ” μ—°μ‚°

COMMIT μ—°μ‚°μ˜ 싀행을 톡해 νŠΈλžœμž­μ…˜μ˜ μˆ˜ν–‰μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆμŒμ„ μ„ μ–Έν•˜κ³ , κ·Έ κ²°κ³Όλ₯Ό μ΅œμ’…μ μœΌλ‘œ DB에 λ°˜μ˜ν•¨.

ROLLBACK μ—°μ‚°

νŠΈλžœμž­μ…˜ μˆ˜ν–‰μ΄ μ‹€νŒ¨ν–ˆμŒμ„ μ„ μ–Έν•˜κ³ , μž‘μ—…μ„ μ·¨μ†Œν•˜λŠ” μ—°μ‚°

νŠΈλžœμž­μ…˜μ΄ μˆ˜ν–‰λ˜λŠ” 도쀑 일뢀 연산이 μ²˜λ¦¬λ˜μ§€ λͺ»ν•œ 상황이라면, ROLLBACK 연산을 μ‹€ν–‰ν•˜μ—¬ νŠΈλžœμž­μ…˜ μˆ˜ν–‰μ΄ μ‹€νŒ¨ν–ˆμŒμ„ μ„ μ–Έν•˜κ³ , DBλ₯Ό νŠΈλžœμž­μ…˜ μˆ˜ν–‰ μ „κ³Ό μΌκ΄€λœ μƒνƒœλ‘œ λ˜λŒλ €μ•Ό 함.

νŠΈλžœμž­μ…˜μ˜ μƒνƒœ?

νŠΈλžœμž­μ…˜μ€ μž‘μ—…μ˜ 성곡 여뢀에 따라 ꡬ뢄할 수 있음.

Image

Active

νŠΈλžœμž­μ…˜ ν™œλ™ μƒνƒœλ₯Ό 말함.

νŠΈλžœμž­μ…˜μ΄ μ‹€ν–‰ 쀑인 μƒνƒœ.

Partially Committed

νŠΈλžœμž­μ…˜μ˜ COMMIT λͺ…령이 λ„μ°©ν•œ μƒνƒœ.

νŠΈλžœμž­μ…˜μ˜ COMMIT 이전 SQL문이 μ‹€ν–‰λ˜κ³ , COMMIT 만 남은 μƒνƒœλ₯Ό 말함.

즉, νŠΈλžœμž­μ…˜μ˜ λ§ˆμ§€λ§‰ μ—°μ‚°κΉŒμ§€ μ‹€ν–‰ν•˜κ³ , COMMIT 연산을 μ‹€ν–‰ν•˜κΈ° μ§μ „μ˜ μƒνƒœμž„.

Failed

νŠΈλžœμž­μ…˜ μ‹€νŒ¨ μƒνƒœλ₯Ό 말함.

더이상 νŠΈλžœμž­μ…˜μ΄ μ •μƒμ μœΌλ‘œ 진행될 수 μ—†λŠ” μƒνƒœμž„.

Committed

νŠΈλžœμž­μ…˜ μ™„λ£Œ μƒνƒœλ₯Ό 말함.

νŠΈλžœμž­μ…˜μ΄ μ •μƒμ μœΌλ‘œ μ™„λ£Œλ¨.

Partially Committed와 뭐가 λ‹€λ₯΄μ§€? COMMIT μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄, Partially Committed μƒνƒœκ°€ 됨. 이후 COMMIT을 λ¬Έμ œμ—†μ΄ μˆ˜ν–‰ν•  수 있으면 Committed μƒνƒœλ‘œ μ „μ΄λ˜κ³ , 였λ₯˜κ°€ λ°œμƒν•œλ‹€λ©΄ Failed μƒνƒœλ‘œ 됨. 즉, Partially CommittedλŠ” COMMIT μš”μ²­μ΄ 듀어왔을 λ•Œλ₯Ό λ§ν•˜λŠ”κ±°κ³ , CommittedλŠ” COMMIT을 μ •μƒμ μœΌλ‘œ μ™„λ£Œν•œ μƒνƒœλ₯Ό λ§ν•˜λŠ”κ±°μž„!

Aborted

νŠΈλžœμž­μ…˜ μ·¨μ†Œ μƒνƒœλ₯Ό 말함.

νŠΈλžœμž­μ…˜μ΄ μ·¨μ†Œλ˜κ³ , νŠΈλžœμž­μ…˜ μ‹€ν–‰ 이전 λ°μ΄ν„°λ‘œ λŒμ•„κ°„ μƒνƒœμž„.

즉, νŠΈλžœμž­μ…˜ μˆ˜ν–‰μ΄ μ‹€νŒ¨ν•˜κ³  ROLLBACK 연산이 μ‹€ν–‰λœ μƒνƒœμΈκ±°μž„.

νŠΈλžœμž­μ…˜μ€ 항상 μ¨μ•Όλ˜λ‚˜? μ£Όμ˜ν•  점

νŠΈλžœμž­μ…˜μ€ κΌ­ ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ μ½”λ“œμ—λ§Œ μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŒ. (μ μž¬μ μ†Œμ— μ‚¬μš©ν•˜μž)

즉, νŠΈλžœμž­μ…˜μ˜ λ²”μœ„λ₯Ό μ΅œμ†Œν™”ν•˜λΌλŠ” λ§μž„!

일반적으둜 DB 컀λ„₯μ…˜μ€ κ°œμˆ˜κ°€ μ œν•œμ μž„.

그런데 각 λ‹¨μœ„ ν”„λ‘œκ·Έλž¨μ΄ 컀λ„₯μ…˜μ„ μ†Œμœ ν•˜λŠ” μ‹œκ°„μ΄ κΈΈμ–΄μ§€λ©΄, μ‚¬μš© κ°€λŠ₯ν•œ μ—¬μœ  컀λ„₯μ…˜μ˜ κ°œμˆ˜λŠ” μ€„μ–΄λ“€κ²Œλ˜κ³ , κ·ΈλŸ¬λ‹€λ©΄ 였느 μˆœκ°„μ— 각 λ‹¨μœ„ ν”„λ‘œκ·Έλž¨μ—μ„œ 컀λ„₯μ…˜μ„ κ°€μ Έκ°€κΈ° μœ„ν•΄ κΈ°λ‹€λ €μ•Όν•˜λŠ” 상황이 λ°œμƒν•  수 있기 λ•Œλ¬Έμž„.

πŸ‘‰Β [DB] transaction을 μ μš©ν•΄μ•Όλ  λ•Œμ™€ ν•˜μ§€ μ•Šμ•„μ•Όν•  λ•Œ?

참고 자료

https://velog.io/@shasha/Database-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%A0%95%EB%A6%AC#5-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%82%AC%EC%9A%A9-%EC%8B%9C-%EC%A3%BC%EC%9D%98%ED%95%A0-%EC%A0%90

νƒœκ·Έ:

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°