λͺ©μ°¨
Transaction Processing
  - λ°μ΄ν°μ 곡μ μ λ€μ μ¬μ©μ νΈλμμ
 μ²λ¦¬
    
      - μ¬λ¬ μ¬μ©μκ° (λμμ) λμΌν λ°μ΄ν°λ² μ΄μ€ κ³΅μ  κ°λ₯νλλ‘ μ§μ
 
      - λμμ μ¬μ©νλλΌλ μΌκ΄μ±(consistency)μ 보μ₯νκΈ° μν λμμ± μ μ΄ (concurrency control) κΈ°λ₯ μ κ³΅
 
    
   
νΈλμμ
μ μ μ
  - λ°μ΄ν°λ² μ΄μ€μ μνλ₯Ό λ³νμν€λ νλμ λ
Όλ¦¬μ  κΈ°λ₯μ μννκΈ° μν μμ
μ λ¨μ νλ‘μΈμ€ (μ: κ³μ’μ΄μ²΄, μ’μμμ½)
    
      - μ₯μ κ° μΌμ΄λ  λ λ°μ΄ν°λ₯Ό 볡ꡬνλ μμ
μ λ¨μκ° λ¨
 
      - λμμ κ°μ λ°μ΄ν°λ₯Ό λ€λ£° λκ° μ΄ μμ
μ μλ‘ λΆλ¦¬νλ λ¨μκ° λ¨
 
    
   
  - νλμ μμ
μ μννλ λ° νμν λ°μ΄ν°λ² μ΄μ€μ μ°μ°λ€μ λͺ¨μλμ κ² (νκΊΌλ²μ λͺ¨λ μνλμ΄μΌ ν  μΌλ ¨μ μ°μ°λ€)
 
νΈλμμ
μ μ£Όμ μ±μ§: ACID
  - Atomicity (μμμ±)
    
      - νΈλμμ
κ³Ό κ΄λ ¨λ μμ
λ€μ μ λΆ μ μμ μΌλ‘ μ€νλκ±°λ, μμ νλλ μ€νλμ§ μμμΌ νλ€. (all or nothing)
 
    
   
  - Consistency (μΌκ΄μ±)
    
      - νΈλμμ
μ΄ μ±κ³΅μ μΌλ‘ μνλ νμλ, λ°μ΄ν°λ² μ΄μ€λ νμ μΌκ΄λ μνλ₯Ό μ μ§ν΄μΌ νλ€.
 
    
   
  - Isolation (격리μ±, 고립μ±)
    
      - νμ¬ μν μ€μΈ νΈλμμ
μ΄ μλ£λ  λκΉμ§ νΈλμμ
μ΄ μμ±ν μ€κ° μ°μ° κ²°κ³Όμ, λ€λ₯Έ νΈλμμ
λ€μ΄ μ κ·Όν  μ μμ΄μΌ νλ€.
 
    
   
  - Durability (μ§μμ±, μμμ±)
    
      - μ±κ³΅μ μΌλ‘ μνλ νΈλμμ
μ μμ€λμ§ μκ³ , μꡬμ μΌλ‘ λ°μλμ΄μΌ νλ€.
 
    
   
μμμ±μ μν μ°μ°
  - Commit (μλ£)
    
      - νΈλμμ
μ μ±κ³΅μ μΈ μ€ν
        
          - μΌκ΄μ± μλ λ°μ΄ν°λ² μ΄μ€ μν (Consistency)
 
        
       
      - μꡬμ μΈ κ°±μ 
 
      - κ°±μ λ λ°μ΄ν°μ μμμ±μ 보μ₯ (Durability)
 
    
   
  - Rollback (μ·¨μ, 볡κ·)
    
      - νΈλμμ
 μ€νμ μ€ν¨
        
          - λͺ¨μλ λ°μ΄ν°λ² μ΄μ€ μν
 
        
       
      - μνν λͺ¨λ  μ°μ° κ²°κ³Όμ UNDO
 
    
   
MySQLμ autocommit, commit, rollback
mysql> SHOW VARIABLES LIKE "%commit%";
+-----------------------------------------+-------------------+
| Variable_name                           | Value             |
+-----------------------------------------+-------------------+
| autocommit                              | ON                |
| binlog_group_commit_sync_delay          | 0                 |
| binlog_group_commit_sync_no_delay_count | 0                 |
| binlog_order_commits                    | ON                |
| innodb_api_bk_commiTinterval           | 5                 |
| innodb_commit_concurrency               | 0                 |
| innodb_flush_log_at_trx_commit          | 1                 |
| original_commit_timestamp               | 36028797018963968 |
| replica_preserve_commit_order           | ON                |
| replication_sender_observe_commit_only  | OFF               |
| slave_preserve_commit_order             | ON                |
+-----------------------------------------+-------------------+
11 rows in set (0.06 sec)
mysql> SET autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE "%commit%";
+-----------------------------------------+-------------------+
| Variable_name                           | Value             |
+-----------------------------------------+-------------------+
| autocommit                              | OFF               |
| binlog_group_commit_sync_delay          | 0                 |
| binlog_group_commit_sync_no_delay_count | 0                 |
| binlog_order_commits                    | ON                |
| innodb_api_bk_commiTinterval           | 5                 |
| innodb_commit_concurrency               | 0                 |
| innodb_flush_log_at_trx_commit          | 1                 |
| original_commit_timestamp               | 36028797018963968 |
| replica_preserve_commit_order           | ON                |
| replication_sender_observe_commit_only  | OFF               |
| slave_preserve_commit_order             | ON                |
+-----------------------------------------+-------------------+
11 rows in set (0.00 sec)
 
mysql> CREATE TABLE customer (a INT, b CHAR (20), INDEX (a));
Query OK, 0 rows affected (0.00 sec)
mysql> -- Do a transaction with autocommit turned on.
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO customer VALUES (10, 'Heikki');
Query OK, 1 row affected (0.00 sec)
mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)
mysql> -- Do another transaction with autocommit turned off.
mysql> SET autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysq1> INSERT INTO customer VALUES (15, 'John');
Query OK, 1 row affected (0.00 sec)
mysq1> INSERT INTO customer VALUES (20, 'Paul');
Query OK, 1 row affected (0.00 sec)
mysql> DELETE FROM customer WHERE b = 'Heikki';
Query OK, 1 row affected (0.00 sec)
mysql> -- Now we undo those last 2 inserts and the delete.
mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM customer;
+------+---------+
| a    | b       |
+------+---------+
|   10 | Heikki  |
+------+---------+
1 row in set (0.00 sec)
 
νΈλμμ
 μν
  - νΈλμμ
μ μνλ λ€μ―κ°μ§ μν μ€ νλμ μνκ² λλ€.
    
      - νλ μν
        
          - νΈλμμ
μ΄ μνλκΈ° μμνμ¬ νμ¬ μν μ€μΈ μν
 
        
       
      - λΆλΆ μλ£ μν
        
          - νΈλμμ
μ λ§μ§λ§ μ°μ°μ΄ μ€νλ μ§νμ μν.
 
          - λͺ¨λ  μ°μ°μ μ²λ¦¬κ° λλ¬μ§λ§ νΈλμμ
μ΄ μνλ μ΅μ’
 κ²°κ³Όλ₯Ό λ°μ΄ν°λ² μ΄μ€μ μμ§ λ°μνμ§ μμ μν
 
        
       
      - μλ£ μν
        
          - μ±κ³΅μ μΌλ‘ μλ£λμ΄ μ»€λ° μ°μ°μ μ€νν μν
 
        
       
      - μ€ν¨ μν
        
          - μ₯μ κ° λ°μνμ¬ νΈλμμ
μ μνμ΄ μ€λ¨λ μν
 
        
       
      - μ² ν μν
        
          - νΈλμμ
μ μννλλ° μ€ν¨νμ¬ λ‘€λ°±μ°μ°μ μ€νν μν
 
        
       
    
   

  - νλ‘κ·Έλ¨ : νλ μ΄μμ νΈλμμ
μ ν¬ν¨
    
      - νλ‘κ·Έλ¨μ μ±κ³΅μ μΈ μν = λͺ¨λ  νΈλμμ
μ μ±κ³΅μ μΈ μλ£
 
    
   
νΈλμμ
μ μ
  - κ³μ’ Aμμ κ³μ’ Bλ‘ 100μμ μ΄μ²΄
 
  - 
    
BEGIN_TRANS;
    UPDATE ACCOUNT SET Balance = Balance - 100 WHERE Accnt = 'A';
    IF ERROR GO TO UNDO;
    UPDATE ACCOUNT SET Balance = Balance + 100 WHERE Accnt = 'B';
    IF ERROR GO TO UNDO;
    COMMIT TRANS;
    GO TO FINISH
    UNDO:
        ROLLBACK TRANS;
    FINISH:
        RETURN;
END_TRANS;
      
   
μ€ν¨ μνμ μλ νΈλμμ
  - λ°μ΄ν°λ² μ΄μ€ μνλ₯Ό νΈλμμ
 μ€νμ΄ μμλκΈ° μ§μ μ μνλ‘ νμ μν€κΈ° μν΄ Rollback μ°μ° μ€ν
 
  - κ·Έ λ€μμ μ² ν μνμ νΈλμμ
μΌλ‘ λμ΄ μ’
λ£
 
  - μ΄λ μ·¨ν  μ μλ μ‘°μΉ
    
      - νΈλμμ
μ μ¬μμ : νλμ¨μ΄λ μμ€ν
 μννΈμ¨μ΄ μ€λ₯λ‘ μΈν΄ μ² νλ νΈλμμ
μ λ€μ μλ‘μ΄ νΈλμμ
μΌλ‘ μ·¨κΈλμ΄ μ¬μμ
 
      - νΈλμμ
μ νκΈ° : νΈλμμ
μ λ΄λΆμ  μ€λ₯λ‘ μ¬μμ±μ ν΄μΌ νλ μ§ μνλ λ°μ΄ν°κ° λ°μ΄ν°λ² μ΄μ€μ μλ κ²½μ°μ μ·¨νλ μ‘°μΉ
 
    
   
μ₯μ 
  - μμ€ν
μ΄ μ ν΄μ§ λͺ
μΈλλ‘ μλνμ§ μλ μν
 
  - μμΈ : νλμ¨μ΄ κ²°ν¨, μννΈμ¨μ΄μ λ
Όλ¦¬μ€λ₯, μ¬λμ μ€μ
 
  - μ₯μ μ μ ν
    
      - νΈλμμ
 μ₯μ  : λ
Όλ¦¬μ  μ€λ₯, μ
λ ₯ λ°μ΄ν°μ λΆλ
 
      - μμ€ν
 μ₯μ  : νλμ¨μ΄μ μ€λμ
 
      - λ―Έλμ΄ μ₯μ  : λμ€ν¬ ν€λ λΆκ΄΄ λλ κ³ μ₯
 
    
   
μ μ₯μ₯μΉμ μ₯μ 
  - νλ°μ± μ μ₯ μ₯μΉ
    
      - μ₯μ κ° λ°μνλ©΄ μ μ₯λ λ°μ΄ν°κ° μμ€λ¨ (λ©μΈ λ©λͺ¨λ¦¬)
 
    
   
  - λΉνλ°μ± μ μ₯ μ₯μΉ
    
      - μ₯μ κ° λ°μν΄λ μ μ₯λ λ°μ΄ν°κ° μμ€λμ§ μμ.
 
      - λ¨, λμ€ν¬ ν€λ μμ κ°μ μ μ₯ μ₯μΉ μ체μ μ΄μμ΄ λ°μνλ©΄ λ°μ΄ν°κ° μμ€λ  μλ μμ
 
    
   
  - μμ  μ μ₯ μ₯μΉ
    
      - λΉνλ°μ± μ μ₯ μ₯μΉλ₯Ό μ΄μ©ν΄ λ°μ΄ν° 볡μ¬λ³Έ μ¬λ¬ κ°λ₯Ό λ§λλ λ°©λ²μΌλ‘, μ΄λ€ μ₯μ κ° λ°μν΄λ λ°μ΄ν°κ° μμ€λμ§ μκ³  λ°μ΄ν°λ₯Ό μꡬμ μΌλ‘ μ μ₯ν  μ μμ
 
    
   
ν볡 (recovery)
  - λ°μ΄ν°λ² μ΄μ€λ₯Ό μ₯μ  λ°μ μ΄μ μ μΌκ΄λ μν (consistent state)λ‘ λ³΅μμν€λ κ²
    
      - μΌκ΄λ μν : λ°μ΄ν°λ² μ΄μ€μ μ€λ₯κ° μλ μν, λ°μ΄ν°λ² μ΄μ€μ λ΄μ©μ λͺ¨μμ΄ μλ μν
 
    
   
  - κΈ°λ³Έμ리 : μ€λ³΅(redundancy)
 
ν볡μ μν μ°μ°
  - λ€ν (dump)
    
      - full backup, λ°μ΄ν°λ² μ΄μ€ μ μ²΄λ₯Ό λ€λ₯Έ μ μ₯ μ₯μΉμ μ£ΌκΈ°μ μΌλ‘ 볡μ¬νλ λ°©λ² (archive)
 
    
   
  - λ‘κ·Έ (log, journal)
    
      - λ°μ΄ν°λ² μ΄μ€μμ λ³κ²½ μ°μ°μ΄ μ€νλ  λλ§λ€, λ°μ΄ν°λ₯Ό λ³κ²½νκΈ° μ΄μ  κ°κ³Ό λ³κ²½ν μ΄νμ κ°μ λ³λμ νμΌμ κΈ°λ‘νλ λ°©λ²
 
    
   
  - REDO (μ¬μ€ν) : κ°μ₯ μ΅κ·Ό 볡μ λ³Έ + λ‘κ·Έ
    
      - κ°μ₯ μ΅κ·Όμ μ μ₯ν λ°μ΄ν°λ² μ΄μ€ 볡μ¬λ³Έμ κ°μ Έμ¨ ν λ‘κ·Έλ₯Ό μ΄μ©ν΄ 볡μ¬λ³Έμ΄ λ§λ€μ΄μ§ μ΄νμ μ€νλ λͺ¨λ  λ³κ²½ μ°μ°μ μ¬μ€ννμ¬ μ₯μ κ° λ°μνκΈ° μ§μ μ λ°μ΄ν°λ² μ΄μ€ μνλ‘ λ³΅κ΅¬
 
      - μ λ°μ μΌλ‘ μμλ κ²½μ°μ μ£Όλ‘ μ¬μ©
 
    
   
  - UNDO (μ·¨μ) : λ‘κ·Έ + λͺ¨λ  λ³κ²½λ€μ μ·¨μ
    
      - λ‘κ·Έλ₯Ό μ΄μ©ν΄ μ§κΈκΉμ§ μ€νλ λͺ¨λ  λ³κ²½ μ°μ°μ μ·¨μνμ¬ νλ κ²μ μλ κ²μ²λΌ μλμ λ°μ΄ν°λ² μ΄μ€λ₯Ό 볡μνλ κ²
 
      - λ³κ²½ μ€μ΄μκ±°λ μ΄λ―Έ λ³κ²½λ λ΄μ©λ§ μ λ’°μ±μ μμ κ²½μ°μ μ£Όλ‘ μ¬μ©
 
    
   
λ°μ΄ν°λ² μ΄μ€ λ‘κ·Έ : λ‘κ·Έ μμΆ
  - λͺ©μ  : μ μ₯μ₯μΉμ ν¨μ¨μ±, μ μν ν볡
 
  - μ΄μ 
    
      - 
        
          - μ€ν¨ν νΈλμμ
μ λ‘κ·Έ λΆνμ
            
              - νΈλμμ
μ΄ μ΄λ―Έ rollback λμμ
 
            
           
        
       
      - 
        
          - μ±κ³΅ν νΈλμμ
μ κ°±μ  μ  λ°μ΄ν°λ λΆνμ
            
              - REDOλ₯Ό μν΄ μλ‘μ΄ κ°λ§ νμ
 
            
           
        
       
      - 
        
          - νλμ λ°μ΄ν° μμ΄ν
μ΄ μ¬λ¬ νΈλμμ
μ μν΄ μ¬λ¬ λ² κ°±μ λμλ€λ©΄ κ°μ₯ λ§μ§λ§ λ°μ΄ν° κ°λ§ νμ
            
              - REDO μ μ€κ° κ³Όμ μ λ°μ΄ν° κ°μ λΆνμ
 
            
           
        
       
    
   
λ€μν ν볡 κΈ°λ²
(1-1) μ¦μ κ°±μ  ν볡 κΈ°λ²
  νΈλμμ
 μν λμ€ λ°μ΄ν°λ₯Ό λ³κ²½νλ©΄ λ³κ²½ μ λ³΄λ₯Ό λ‘κ·Έ νμΌμ μ μ₯νκ³ , νΈλμμ
μ΄ λΆλΆ μλ£λκΈ° μ μ΄λΌλ λͺ¨λ  λ³κ²½ λ΄μ©μ μ¦μ λ°μ΄ν°λ² μ΄μ€μ λ°μνλ κΈ°λ²
  - νΉμ§
    
      - ν볡 μ λ‘κ·Έ νμΌμ μ°Έμ‘°νμ¬ Redoμ Undo μ°μ°μ λͺ¨λ μ€νν΄μΌ νλ€.
 
      - νΈλμμ
μ΄ μλ£λκΈ° μ  μ₯μ κ° λ°μν κ²½μ° : Undo
        
          - λ§μΌ λ‘κ·Έμ 
<Ti, Start> λ μ½λλ§ μκ³  <Ti, Commit> λ μ½λκ° μμΌλ©΄ Undo(Ti)λ₯Ό μν 
        
       
      - νΈλμμ
μ΄ μλ£λ ν μ₯μ κ° λ°μν κ²½μ°: Redo
        
          - λ§μΌ λ‘κ·Έμ 
<Ti, Start> λ μ½λμ <Ti, Commit> λ μ½λκ° λͺ¨λ λ€ μμΌλ©΄ Redo(Ti)λ₯Ό μν 
        
       
    
   
  - ꡬν
    
      - νΈλμμ
 νμ± μνμμ λ°μ΄ν° λ³κ²½ κ²°κ³Όλ₯Ό λ‘κ·Έμ λ°μ΄ν°λ² μ΄μ€μ λ°μ
 
      - ν볡 μ νΈλμμ
 μ€ν μ΄μ μ μνλ‘ λ³΅κ΅¬
 
      - λ‘κ·Έ νμΌμ μ°Έμ‘°νμ¬ λ―Έμλ£λ λ³κ²½μ λν΄ Undoλ₯Ό μ°μ  μ€νν ν, μλ£λ λ³κ²½μ λν΄ Redo μ€ν
 
    
   
  - μ μ©μ μ (<T1, T2> μμΌλ‘ μ€ν)
    
      - T1μ΄ CommitνκΈ° μ§μ μ μμ€ν
 λΆκ΄΄
        
      
 
      - T2κ° CommitνκΈ° μ§μ μ μμ€ν
 λΆκ΄΄
        
          Undo(T2)λ₯Ό λ¨Όμ  μ€ν, λ€μ Redo(T1) μ€ν
            
              - μΌλ°μ μΌλ‘ λͺ¨λ  Undo νμ Redoλ₯Ό ν΄μΌ ν¨
 
            
           
        
       
      - T2κ° 
<T2, Commit>λ‘κ·Έ λ μ½λ μΆλ ₯ μ§ν μμ€ν
 λΆκ΄΄
        
          Redo(T1), Redo(T2) μ€ν
            
              - Undoλ μμ, Redoλ κΈ°λ‘λ μμλλ‘ μ€ν
 
            
           
        
       
    
   
(1-2) μ§μ° κ°±μ  ν볡 κΈ°λ²
  νΈλμμ
μ΄ μνλλ λμμλ λ°μ΄ν° λ³κ²½ μ°μ°μ κ²°κ³Όλ₯Ό λ°μ΄ν°λ² μ΄μ€μ μ¦μλ°μνμ§ μκ³  λ‘κ·Έ νμΌμλ§ κΈ°λ‘ν΄λμλ€κ°, νΈλμμ
μ΄ μλ£λ νμ λ‘κ·Έμ κΈ°λ‘λ λ΄μ©μ μ΄μ©ν΄ λ°μ΄ν°λ² μ΄μ€μ ν λ²μ λ°μ
  - νΉμ§
    
      - νΈλμμ
μ΄ μνλλ λμ μ₯μ κ° λ°μν  κ²½μ° λ‘κ·Έμ κΈ°λ‘λ λ΄μ©μ λ²λ¦¬κΈ°λ§ νλ©΄ λ°μ΄ν°λ² μ΄μ€κ° μλ μνλ₯Ό κ·Έλλ‘ μ μ§νκ² λλ€.
        
          - μ§μ° κ°±μ  ν볡 κΈ°λ²μμλ REDI μ°μ°λ§ μ΄μ©ν¨
            
              - λ°μ΄ν°λ² μ΄μ€ ν볡 κ³Όμ μμ UNDOλ νμ μμ. νΈλμμ
 볡ꡬ μ λ‘κ·Έ νμΌ λ΄μ©λ§ νκΈ°
 
            
           
        
       
      - νΈλμμ
μ΄ μλ£λκΈ° μ  μ₯μ κ° λ°μν κ²½μ°: λ‘κ·Έ λ΄μ©μ 무μνκ³  λ²λ¦Ό
 
      - νΈλμμ
μ΄ μλ£λ ν μ₯μ κ° λ°μν κ²½μ°: Redo
 
      - λΆλΆ μλ£λ  λκΉμ§ λͺ¨λ  Output μ°μ°μ μ§μ°
        
          - λͺ¨λ  λ°μ΄ν°λ² μ΄μ€μ λ³κ²½μ λ‘κ·Έμ λ¨Όμ  κΈ°λ‘
 
          - μμ ν μ μ₯μμ 
<Ti, Commit>λ₯Ό ν¬ν¨νλ λ‘κ·Έ λ μ½λλ₯Ό κΈ°λ‘ν νμ λ°μ΄ν°λ² μ΄μ€ κ°±μ 
            
              - μλ£ μνλ‘ κ°
 
              <Ti, Commit>λ λΆλΆμ μΌλ‘ κΈ°λ‘ 
            
           
          - λ‘κ·Έ λ μ½λ : REDO μ°μ°μ λλΉ. μμ κ°λ νμμμ
            
              <νΈλμμ
 id, λ°μ΄ν° μμ΄ν
, λ³κ²½λ κ°> 
            
           
        
       
      - Redo μ°μ°μ idempotent μ±μ§μ κ°μ§κ³  μμ΄μΌ ν¨
        
          - κ°μ Redoλ₯Ό μ¬λ¬λ² μ€νν κ²μ΄λ ν λ² μ€νν κ²μ΄λ κ·Έ κ²°κ³Όλ λλ±
 
          - Redo μμ
 μ€ λ€μ μ₯μ κ° μΌμ΄λ Redo μ°μ°μ λ λ€μ μ€ννλλΌλ μ²μ ν λ² μνν κ²°κ³Όμ λμΌ
 
          Redo(Redo(Redo...(x))) = Redo(x) 
        
       
    
   
  - ꡬν
    
      - νΈλμμ
 λ¨μκ° μ’
λ£λ  λκΉμ§ λμ€ν¬μ κΈ°λ‘νλ μΆλ ₯ μ°μ°μ μ§μ°μν€κ³ , λ°μ΄ν°λ² μ΄μ€ λ³κ²½ λ΄μμ λ‘κ·Έμ 보κ΄
 
      - νΈλμμ
 μλ£(Commit) μ λ‘κ·Έλ₯Ό μ΄μ©ν΄ μ§μ°λ μΆλ ₯ μ°μ°(Redo) μν
 
      - νΈλμμ
μ΄ μ€ν¨ν  κ²½μ° Undo μμ΄ λ‘κ·Έ λ¨μ νκΈ°
 
    
   
μ΄λ€ νΈλμμ
μ΄ Redo λμ΄μΌ νλκ°?
  - λ‘κ·Έμ <Ti, Start> λ μ½λμ <Ti, Commit> λ μ½λκ° λͺ¨λ μλ νΈλμμ
 Tiμ λν΄μλ§ μ¬μ€ν
 
  - ν볡μ μ°¨ : μΈ κ°μ μμ΄ν μμ μ λ‘κ·Έ
    
      - λ‘κ·Έμ Commit λ μ½λκ° μλ νΈλμμ
μ λν΄μ Redo λ€μ μ€ν
 
    
   

(2) κ²μ¬μμ  ν볡
  λ°μ΄ν°λ² μ΄μ€ νΈλμμ
 λμ κ³Όμ μ μ£ΌκΈ°μ μΌλ‘ κ²μ¬μ μ κΈ°λ‘νμ¬ λ°μ΄ν°λ² μ΄μ€ μ₯μ μ λ‘κ·Έλ₯Ό κΈ°λ°μΌλ‘ ν볡νλ κΈ°λ²
  - νΉμ§
    
      - κ²μ¬μμ μ λμ
νλ©΄μ, Undoλ₯Ό λ€μ λμ
ν¨
 
      - ν볡μμ
μ΄ μλ£λ  λκΉμ§ μμ€ν
μ μλ‘μ΄ νΈλμμ
μ λ°μλ€μΌ μ μμ
 
    
   
  - λμ
    
      - μ₯μ  λ°μ μ κ²μ¬μ  μ΄μ μ μ²λ¦¬λ νΈλμμ
μ ν볡μμ μ μΈνκ³ 
 
      - κ²μ¬μ  μ΄νμ μ²λ¦¬λ νΈλμμ
μ ν볡 μμ
 μν
        
          - κ²μ¬μ  μ΄ν, μ₯μ  λ°μ μ΄μ μ commitμ΄ μλ£λ κ²½μ° Redo μν
 
          - μ₯μ  λ°μ μμ κΉμ§ commitλμ§ λͺ»ν κ²½μ° Undo μν
 
          - Undo/Redoμ μν
            
              - Step 1. Undo-listμ μλ λͺ¨λ  νΈλμμ
λ€μ λν΄ λ‘κ·Έμ κΈ°λ‘λ μμμΌλ‘ Undo μ°μ° μν
 
              - Step 2. κ·Έλ° λ€μ Redo-listμ μλ νΈλμμ
μ λν΄ λ‘κ·Έμ κΈ°λ‘λ μμλ‘ Redoλ₯Ό μν
 
            
           
        
       
    
   
  - κ²μ¬μμ  (Checkpoint) λ°©λ²
    
      - λ‘κ·Έ κΈ°λ‘ μ μ§, μΌμ μκ° κ°κ²©μΌλ‘ κ²μ¬μμ  (Checkpoint) μ€μ 
        
          - λ©μΈ λ©λͺ¨λ¦¬(λ‘κ·Έ λ²νΌ)μ μλ λͺ¨λ  λ‘κ·Έ λ μ½λλ₯Ό μμ  μ μ₯μλ‘ μΆλ ₯
 
          - λ³κ²½λ λ°μ΄ν° λ²νΌ λΈλ‘μ μ λΆ λμ€ν¬λ‘ μΆλ ₯
 
          - κ²μ¬ μμ  νμλ‘μ¨  λ‘κ·Έ λ μ½λλ₯Ό μμ  μ μ₯μμ μΆλ ₯
            
              - μ΄ λ, Lμ νμ¬ μ€ν μ€μ μλ νΈλμμ
λ€μ 리μ€νΈ
 
            
           
        
       
    
   
κ²μ¬μμ (checkpoint) νλ³΅μ΄ νμν μ΄μ 
μΌμ ν κ°κ²©μΌλ‘ μμ±λ κ²μ¬μμ μ μ₯μ κ° λ°μνμ λ, λΆνμν λΆνλ₯Ό μ€μ΄κ² λ¨μΌλ‘μ¨ ν볡 μ²λ¦¬ μ μ°¨μ μκ°μ μ μ½ν΄ μ€λ€.
μμ€ν
 μλ¬κ° λ¬μ λ ν볡κ΄λ¦¬μκ° μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ λ‘κ·Έ μ μ²΄λ₯Ό λΆμν΄μΌ λλλ° μκ°μ΄ λ§μ΄ μμλκ³  λΆνμν REDO μ°μ°μ λ°λ³΅νλ λ¬Έμ κ° λ°μνλ―λ‘ κ²μ¬μμ  νλ³΅μ΄ νμνλ€.
(3) λ―Έλμ΄ ν볡 κΈ°λ²
  - ꡬν
    
      - λ‘κ·Έ μ°μ  κΈ°λ‘ κ·μ½ (write-ahead log protocol)
        
          - λ‘κ·Έλ₯Ό λμ€ν¬μ μ¨μΌμ§λ§ 컀λ°ν  μ μλ€.
 
        
       
    
   
References
  - Fundamentals of Database Systems 7th Edition by Ramez Elmasri, Shamkant B. Navathe.
 
  - https://overcome-the-limits.tistory.com/528
 
  - https://itwiki.kr/w/%EB%A1%9C%EA%B7%B8%EA%B8%B0%EB%B0%98%ED%9A%8C%EB%B3%B5_%EA%B8%B0%EB%B2%95
 
  - https://m.blog.naver.com/wook2124/222108776229
 
  - https://itwiki.kr/w/%EA%B2%80%EC%82%AC%EC%A0%90%ED%9A%8C%EB%B3%B5%EA%B8%B0%EB%B2%95
 
  - https://www.studocu.com/ko/document/dankook-university/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B4%80%EB%A6%AC/%EA%B2%BD%EC%98%81%ED%95%99%EA%B3%BC-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B0%9C%EB%A1%A0-%EA%B8%B0%EB%A7%90%EA%B3%A0%EC%82%AC-%EB%8C%80%EB%B9%84-%EC%9E%90%EB%A3%8C-%EA%B5%90%EC%9E%AC-%EB%B0%8F-%EC%88%98%EC%97%85-%EB%82%B4%EC%9A%A9-%ED%95%84%EA%B8%B0-%EB%85%B8%ED%8A%B8/17316211
 
  - https://m.blog.naver.com/paradice29/50184565199