λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

DEVELOP/Database

[Database] νŠΈλžœμž­μ…˜μ˜ κ°œλ… 및 단계

λ°˜μ‘ν˜•

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

 νŠΈλžœμž­μ…˜μ€ 더 이상 μͺΌκ°€ 수 μ—†λŠ” μ—…λ¬΄μ²˜λ¦¬μ˜ λ‹¨μœ„ λ˜λŠ” 논리적 μž‘μ—… λ‹¨μœ„λ₯Ό μ΄μ•ΌκΈ°ν•œλ‹€. μ›Ή κ°œλ°œμ—μ„œ νŠΈλžœμž­μ…˜μ΄λΌ ν•˜λ©΄ 일반적으둜 λ°μ΄ν„°λ² μ΄μŠ€ νŠΈλžœμž­μ…˜μ— ν•΄λ‹Ήν•˜λ©°, μ΄λŠ” 단일 μ‚¬μš©μžκ°€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ λ‚΄μš©μ— μ•‘μ„ΈμŠ€ν•˜κΈ°μœ„ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 것이닀.

 

νŠΈλžœμž­μ…˜μ˜ κ°œλ…κ³Ό 단계에 λŒ€ν•œ 이해λ₯Ό μœ„ν•΄ μ–΄λ–€ μ€ν–‰μ—μ„œ 직원이 고객 X의 κ³„μ’Œμ—μ„œ Y의 κ³„μ’Œλ‘œ 800λ§Œμ›μ„ μ΄μ²΄ν•΄μ•Όν•˜λŠ” 상황이 μžˆλ‹€κ³  ν•œ 번 κ°€μ •ν•΄λ³΄μž. μš°λ¦¬κ°€ λ³΄κΈ°μ—λŠ” λ‹¨μˆœνžˆ μž…κΈˆκ³Ό μΆœκΈˆμ΄λΌλŠ” κ°„λ‹¨ν•œ μž‘μ—…κ°™μ§€λ§Œ, μ•„λž˜μ™€ 같이 생각보닀 λ§Žμ€ ν•˜μœ„ μž‘μ—…λ“€μ΄ ν¬ν•¨λ˜μ–΄μžˆλ‹€. μ΄λŸ¬ν•œ 일련의 μž‘μ—… λ‹¨μœ„λ₯Ό 그룹으둜 λ¬Άμ–΄ 놓은 것을 νŠΈλžœμž­μ…˜μ΄λΌ ν•œλ‹€.

 

  • X의 κ³„μ’Œ
Open_Account (X)  
Old_Balance = X. μž”μ•‘  
New_Balance = Old_Balance-800  
X.balance = New_Balance  
Close_Account (X)  

 

  • Y의 κ³„μ’Œ
Open_Account (Y)  
Old_Balance = Y. μž”μ•‘  
New_Balance = Old_Balance+800  
Y.balance = New_Balance  
Close_Account (Y)  

 

 μ€ν–‰μ—μ„œ μ •μƒμ μœΌλ‘œ μž‘μ—…μ΄ 이루어진닀면, X의 κ³„μ’Œμ—μ„œ 800λ§Œμ›μ΄ λΉ μ Έλ‚˜κ°€κ³  Y의 κ³„μ’Œμ—λŠ” 800λ§Œμ›μ΄ 좔가될 것이닀. ν•˜μ§€λ§Œ λ§Œμ•½ 일련의 κ³Όμ • 쀑 ν•˜λ“œμ›¨μ–΄ λ˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ λ“± μ—¬λŸ¬ λ³€μˆ˜λ‘œ 인해 λͺ¨λ“  μž‘μ—…μ΄ μ™„λ£Œλ˜μ§€ μ•ŠλŠ”λ‹€λ©΄ 큰 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ X의 κ³„μ’Œμ—μ„œλŠ” 800λ§Œμ›μ΄ λΉ μ Έλ‚˜κ°”μ§€λ§Œ, Y의 κ³„μ’Œμ—μ„œλŠ” 800λ§Œμ›μ΄ μΆ”κ°€λ˜μ§€ μ•ŠλŠ” κ²½μš°κ°€ 생길 μˆ˜λ„ μžˆλ‹€λŠ” 것이닀. λ”°λΌμ„œ λͺ¨λ“  κ±°λž˜κ°€ ν™•μ‹€ν•˜κ²Œ λλ‚˜μ•Όλ§Œ μ™„μ „ν•˜κ²Œ κ±°λž˜κ°€ μ΄λ£¨μ–΄μ‘Œλ‹€κ³  μŠΉμΈν•˜κ³ , 였λ₯˜κ°€ λ°œμƒν•˜λŠ” 경우 거래 자체λ₯Ό μ•„μ˜ˆ μ—†λŠ” 거래둜 λ§Œλ“œλŠ” 방법을 μ‚¬μš©ν•  수 μžˆλŠ”λ° μ΄λ ‡κ²Œ μ•ˆμ •μ„±μ— λŒ€ν•΄ ν™•λ³΄ν•˜λŠ” 것이 λ°”λ‘œ νŠΈλžœμž­μ…˜μ΄λ‹€.


✍️   λ°μ΄ν„°λ² μ΄μŠ€ νŠΈλžœμž­μ…˜

 λ°μ΄ν„°λ² μ΄μŠ€ νŠΈλžœμž­μ…˜ μ—­μ‹œ 일반적으둜 DBMSμ—μ„œμ˜ μƒν˜Έμž‘μš© λ‹¨μœ„μ— ν•΄λ‹Ήν•œλ‹€. λ°μ΄ν„°λ² μ΄μŠ€μ— νŠΈλžœμž­μ…˜μ„ μ μš©μ‹œν‚¨ μ΄μœ λŠ”, λ°μ΄ν„°μ˜ 일관성을 μœ μ§€ν•˜κ³  μ‰½κ²Œ 볡ꡬ할 수 μžˆλ„λ‘ μ•ˆμ •μ„±μ„ μΆ”κ°€ν•˜κΈ° μœ„ν•΄μ„œλ‹€. μš°λ¦¬κ°€ 데이터λ₯Ό μ—…λ°μ΄νŠΈ ν•˜κΈ° μœ„ν•΄ INSERT, UPDATE, DELETE 등을 μˆ˜ν–‰ν•˜λŠ” 것도 νŠΈλžœμž­μ…˜μ— ν•΄λ‹Ήν•œλ‹€. λ§Œμ•½ νŠΈλžœμž­μ…˜μ΄ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ—…λ°μ΄νŠΈν•˜μ§€ μ•Šκ³  데이터λ₯Ό κ²€μƒ‰λ§Œ ν•˜λŠ” κ²½μš°μ—λŠ” 읽기 μ „μš© νŠΈλžœμž­μ…˜μ΄λΌκ³  ν•œλ‹€.

 

 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” μ΄λ ‡κ²Œ ν•˜μœ„ λ‹¨μœ„μ˜ μž‘μ—…μ΄ λͺ¨μ—¬ 이루어진 νŠΈλžœμž­μ…˜μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄μ„œ 두 κ°€μ§€μ˜ λͺ…령을 ν™œμš©ν•œλ‹€. λ°”λ‘œ 컀밋과 둀백이닀. (사싀 컀밋과 λ‘€λ°± 외에 μ„Έμ΄λΈŒν¬μΈνŠΈλ„ μ‘΄μž¬ν•˜λŠ”λ°, μ„Έμ΄λΈŒν¬μΈνŠΈλ₯Ό μ΄μš©ν•˜λ©΄ 전체 μž‘μ—…μ΄ μ•„λ‹Œ ν˜„μž¬ μ‹œμ μ—μ„œ μ„Έμ΄λΈŒν¬μΈνŠΈκΉŒμ§€λ§Œμ„ λ‘€λ°±ν•  수 μžˆλ‹€. λ‹€λ§Œ μ„Έμ΄λΈŒν¬μΈνŠΈλŠ” 지원이 μ•ˆλ˜λŠ” DBMS νˆ΄λ„ μžˆλ‹€λŠ” λ“― ν•˜λ‹€..) ν•΄λ‹Ή μž‘μ—…μ€ μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ μ‹€ν–‰ν•˜κ±°λ‚˜ λ˜λŠ” SQLκ³Ό 같은 쿼리 μ–Έμ–΄λ₯Ό 톡해 지정될 수 μžˆλ‹€. 

 

컀밋 (Commit)
λͺ¨λ“  μž‘μ—…μ„ μ •μƒμ μœΌλ‘œ μ²˜λ¦¬ν•˜κ² λ‹€κ³  ν™•μ •ν•˜λŠ” λͺ…령어이며, νŠΈλžœμž­μ…˜μ˜ μž‘μ—… κ²°κ³Όλ₯Ό λ°μ΄ν„°λ² μ΄μŠ€λ‘œ λ°˜μ˜ν•˜κΈ° μœ„ν•΄μ„œ λ³€κ²½ν•œ λ‚΄μš© μ „λΆ€λ₯Ό μ‹€μ œ λ°μ΄ν„°λ² μ΄μŠ€μ— 영ꡬ적으둜  μ €μž₯ν•œλ‹€. 컀밋을 μˆ˜ν–‰ν•˜λ©΄, ν•˜λ‚˜μ˜ νŠΈλžœμ μ…˜ 과정을 μ’…λ£Œν•˜κ²Œ λ˜λŠ” 것에 ν•΄λ‹Ήν•œλ‹€. μ΄μ „μ˜ 데이터가 λͺ¨λ‘ μ—…λ°μ΄νŠΈκ°€ 되며, λͺ¨λ“  μ‚¬μš©μžλŠ” λ³€κ²½λœ λ°μ΄ν„°μ˜ κ²°κ³Όλ₯Ό λ³Ό 수 μžˆλ‹€.
λ‘€λ°± (Rollback)
μž‘μ—… 쀑 λ¬Έμ œκ°€ λ°œμƒν•΄ν–ˆλ‹€λ©΄ νŠΈλž™μž­μ…˜ 처리λ₯Ό ν•˜λŠ” 과정에 λ°œμƒν–ˆλ˜ λͺ¨λ“  λ³€κ²½ 사항듀을 μ „λΆ€ μ·¨μ†Œν•˜κ³  νŠΈλžœμž­μ…˜ 과정을 μ’…λ£Œμ‹œμΌœλ²„λ¦°λ‹€. 이전 컀밋을 ν•œ λΆ€λΆ„κΉŒμ§€λ§Œ 볡ꡬ가 λœλ‹€. μ΄λ ‡κ²Œ ν•œκΊΌλ²ˆμ— μ‚­μ œκ°€ κ°€λŠ₯ν•œ 것은 μœ„μ—μ„œ μ–ΈκΈ‰ν•œ 것과 같이 ν•˜λ‚˜μ˜ 묢음으둜 처리되기 λ•Œλ¬Έμ΄λ‹€.

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

 

νŠΈλžœμž­μ…˜μ˜ 단계별 μƒνƒœλŠ” μœ„ κ·Έλ¦Όκ³Ό 같이 λ‚˜λˆ„μ–΄μ§€λ©°, 각 μƒνƒœμ— λŒ€ν•œ λ‚΄μš©μ€ λ‹€μŒκ³Ό κ°™λ‹€. 

ν™œλ™(Active) 
νŠΈλžœμž­μ…˜μ΄ ν˜„μž¬ μ‹€ν–‰ 쀑인 μƒνƒœμ΄λ‹€.
λΆ€λΆ„ μ™„λ£Œ(Partially Committed)
νŠΈλžœμž­μ…˜μ΄ μ΅œμ’… μž‘μ—…μ„ μ‹€ν–‰ν•˜μ˜€μœΌλ‚˜, 아직 commit이 되기 μ „μ˜ μƒνƒœ
μ‹€νŒ¨(Failed)
νŠΈλžœμž­μ…˜μ„ μˆ˜ν–‰ν•˜λ˜ 도쀑 였λ₯˜κ°€ λ°œμƒν•˜μ—¬ 쀑단이 된 μƒνƒœμ΄λ©°, 더 이상 νŠΈλžœμž­μ…˜ 진행이 λΆˆκ°€λŠ₯ν•˜λ‹€.
철회(Aborted)
νŠΈλžœμž­μ…˜ 처리 κ³Όμ • 쀑 λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ–΄ rollback을 μˆ˜ν–‰ν•œ μƒνƒœμ΄λ©°, νŠΈλžœμž­μ…˜μ΄ μ€‘λ‹¨λœ ν›„ λ°μ΄ν„°λ² μ΄μŠ€ 볡ꡬ λͺ¨λ“ˆμ—μ„œ νŠΈλžœμž­μ…˜μ„ λ‹€μ‹œ μ‹œμž‘ν•˜κ±°λ‚˜ μ•„μ˜ˆ μˆ˜ν–‰ 자체λ₯Ό μ’…λ£Œ ν•΄λ²„λ¦¬λŠ” 두 가지 κ²½μš°κ°€ μ‘΄μž¬ν•˜κ²Œ λœλ‹€.
μ™„λ£Œ(Commited)
νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œλ˜κ³  commit κΉŒμ§€ μˆ˜ν–‰ν•œ ν›„μ˜ μƒνƒœμ΄λ©°, μˆ˜ν–‰λœ κ²°κ³Όκ°€ λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ— μ—…λ°μ΄νŠΈλœλ‹€.

✨  νŠΈλžœμž­μ…˜μ˜ νŠΉμ§•

 λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ—μ„œλŠ” νŠΈλžœμž­μ…˜μ— λŒ€ν•΄μ„œ μ •ν™•μ„±, μ™„λ£Œμ„±, 데이터 무결성(λ°μ΄ν„°μ˜ μ •ν™•μ„± 및 일관성)을 보μž₯ν•˜κΈ° μœ„ν•΄μ„œ λ‹€μŒκ³Ό 같은 νŠΉμ§•λ“€ μ—­μ‹œ 가진닀. 각 νŠΉμ§•μ˜ μ²«κΈ€μžλ₯Ό λ”° ACID라고도 ν•œλ‹€. 

μ›μžμ„± (Atomicity) 
νŠΈλžœμž­μ…˜μ΄ μ›μž λ‹¨μœ„λ‘œ μ²˜λ¦¬λ˜μ–΄μ•Ό ν•œλ‹€λŠ” λœ»μ΄λ‹€. μ›μž λ‹¨μœ„λ‘œ μ²˜λ¦¬ν•œλ‹€λŠ” 말이 μ• λ§€ν•˜κ²Œ λŠκ»΄μ§„λ‹€λ©΄, 였λ₯˜κ°€ λ°œμƒν•΄μ„œ λͺ¨λ“  μž‘μ—…μ΄ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ” 경우 νŠΈλžœμž­μ…˜μ΄ μ „λΆ€ μ·¨μ†Œλœλ‹€κ³  μƒκ°ν•˜λ©΄ μ’€ 더 κ°„λ‹¨ν•˜λ‹€. λ°μ΄ν„°λ² μ΄μŠ€μ—λŠ” λΆ€λΆ„μ μœΌλ‘œ μ™„λ£Œλ˜μ–΄ 남겨진 νŠΈλžœμž­μ…˜μ΄ μ‘΄μž¬ν•˜λŠ” μƒνƒœκ°€ μžˆμ–΄μ„œλŠ” μ•ˆλœλ‹€.
일관성 (Consistency)
λ°μ΄ν„°λ² μ΄μŠ€λŠ” νŠΈλžœμž­μ…˜ 후에 μΌκ΄€μ„±μžˆλŠ” μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Ό ν•œλ‹€λŠ” 의미인데, μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Όν•œλ‹€λŠ” 말을 μ’€ 더 μ •ν™•νžˆ μ΄μ•ΌκΈ°ν•˜λ©΄ νŠΈλžœμž­μ…˜μ— μ˜ν•œ μž‘μ—… 처리 κ²°κ³Όκ°€ 일관성이 μžˆμ–΄μ•Ό ν•œλ‹€λŠ” λœ»μ΄λ‹€.
독립성 (Isolation)
λ§Œμ•½ λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ—μ„œ ν•˜λ‚˜ μ΄μƒμ˜ νŠΈλžœμž­μ…˜μ΄ λ™μ‹œμ— λ³‘λ ¬λ‘œ μ‹€ν–‰λ˜κ³  μžˆλ‹€λ©΄, μ–΄λ–€ νŠΈλžœμž­μ…˜μ˜ 처리 κ³Όμ •μ—μ„œ μ΄λ£¨μ–΄μ§€λŠ” μ—°μ‚°μ—λŠ” λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ κ°œμž…ν•  수 μ—†λ‹€. λ˜ν•œ 처리 쀑인 νŠΈλžœμž­μ…˜μ΄ μ™„μ „νžˆ μ™„λ£Œλ˜κΈ° μ•Šμ•˜λ‹€λ©΄, λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ ν•΄λ‹Ή νŠΈλžœμž­μ…˜μ˜ 처리 결과에 λŒ€ν•΄ μ°Έμ‘°ν•  수 μ—†λ‹€.
μ˜κ΅¬μ„± (Durality)
νŠΈλžœμž­μ…˜μ΄ λ§Œμ•½ 데이터λ₯Ό μ—…λ°μ΄νŠΈν•˜κ³  μ»€λ°‹ν•œ ν›„ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆμŒμ΄ ν™•μΈλœλ‹€λ©΄ λ°μ΄ν„°λ² μ΄μŠ€λŠ” μˆ˜μ •λœ 데이터 κ²°κ³Όλ₯Ό λ°˜μ˜ν•΄μ•Όν•œλ‹€. ν•˜μ§€λ§Œ νŠΈλžœμž­μ…˜μ΄ 컀밋이 λ˜μ—ˆλ”λΌλ„ 데이터가 λ””μŠ€ν¬μ— 기둝되기 전에 μ‹œμŠ€ν…œμ΄ μ‹€νŒ¨ν•˜κ²Œ λœλ‹€λ©΄, μ‹œμŠ€ν…œμ΄ λ‹€μ‹œ μž‘λ™ν•  λ•Œ 데이터가 μ—…λ°μ΄νŠΈκ°€ λœλ‹€. μ΄λŠ” μ‹œμŠ€ν…œμ— λ¬Έμ œκ°€ 생기더라도 νŠΈλžœμž­μ…˜ κ²°κ³ΌλŠ” 반영이 λ˜μ–΄μ•Όν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

Reference

 

DBMS - Transaction - Tutorialspoint

DBMS - Transaction A transaction can be defined as a group of tasks. A single task is the minimum processing unit which cannot be divided further. Let’s take an example of a simple transaction. Suppose a bank employee transfers Rs 500 from A's account to

www.tutorialspoint.com

 

μœ„ν‚€λ…μŠ€

온라인 책을 μ œμž‘ κ³΅μœ ν•˜λŠ” ν”Œλž«νΌ μ„œλΉ„μŠ€

wikidocs.net

 

 

λ°˜μ‘ν˜•

'DEVELOP > Database' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Database] λ°μ΄ν„°λ² μ΄μŠ€ μΈλ±μ‹±μ΄λž€?  (0) 2021.07.11