데이터베이스 관리 시스템에서의 Rollback과 Commit은 트랜잭션을 관리하기 위한 핵심 개념입니다. 이번 포스팅을 통해 어떻게 Commit과 Rollback으로 트랜잭션을 관리하는지에 대해 알아보도록 하겠습니다.
트랜잭션(Transaction)이란?
기본적으로 트랜잭션은 데이터베이스에서 한 번에 실행되어야 할 여러 작업들이 묶인 논리적인 작업 단위로, 데이터의 일관성과 무결성을 보장하는 데 매우 중요한 역할을 합니다.
2023.07.02 - [분류 전체 보기] - [MySQL] 트랜잭션(Trasaction) 예제로 간단하게 이해하기
Commit을 통한 안정적인 데이터 관리
Commit은 트랜잭션의 작업을 최종적으로 데이터베이스에 반영하는 과정을 의미합니다. 트랜잭션에 포함된 논리 작업 단위를 성공적으로 수행되었고, 데이터가 무결성을 준수한다면 Commit을 통해 데이터베이스에 반영합니다. 그 이후에 반영된 데이터는 다른 트랜잭션에서 참조할 수 있습니다. 이러한 Commit 과정을 통해 트랜잭션의 원자성을 보장하며, 안정적인 데이터 관리를 가능하게 해 줍니다.
Rollback을 통한 데이터의 일관성 유지
Rollback 또한 Commit과 마찬가지로 트랜잭션을 관리하기 위해 반드시 필요한 개념입니다. 쉽게 이해하기 위해 간단한 코드를 보도록 하겠습니다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TransactionExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "myuser";
String password = "mypassword";
try (Connection connection = DriverManager.getConnection(url, username, password)) {
// Auto-commit 기능을 비활성화하여 수동으로 트랜잭션을 관리합니다.
connection.setAutoCommit(false);
// SQL 쿼리들을 실행합니다.
try (Statement statement = connection.createStatement()) {
// 첫 번째 SQL 쿼리
String sqlQuery1 = "INSERT INTO users (id, name, age) VALUES (1, 'John', 30)";
statement.executeUpdate(sqlQuery1);
// 두 번째 SQL 쿼리
String sqlQuery2 = "INSERT INTO orders (order_id, user_id, product, quantity) VALUES (101, 1, 'Laptop', 2)";
statement.executeUpdate(sqlQuery2);
// 세 번째 SQL 쿼리 (강제로 예외 발생시키기 위한 코드)
String sqlQuery3 = "INSERT INTO invalid_table (column1, column2) VALUES (1, 2)";
statement.executeUpdate(sqlQuery3);
// 모든 쿼리가 성공적으로 실행되었으므로 트랜잭션을 커밋합니다.
connection.commit();
System.out.println("트랜잭션이 커밋되었습니다.");
} catch (SQLException ex) {
// SQL 쿼리 중 하나라도 실패하면 예외가 발생하고, 트랜잭션을 롤백합니다.
connection.rollback();
System.out.println("트랜잭션이 롤백되었습니다.");
ex.printStackTrace();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
위의 코드는 여러 개의 작업 단위가 하나의 트랜잭션으로 관리되는 코드입니다. 하지만 코드가 동작하는 과정에서 문제가 발생하여 데이터베이스에 반영되지 않고, 다음 작업으로 넘어가게 된다면 다음 작업에서 확인할 수 있는 데이터와 일관되지 않다는 것을 알 수 있습니다.
이러한 상황에서 중간에 에러가 발생했을 경우에 트랜잭션의 작업을 취소하고 이전 최초의 상태로 되돌리는 과정이 필요할 때 Rollback을 사용합니다.
Commit과 Rollback의 중요성
Commit과 Rollback은 데이터베이스에서 안정성과 무결성을 보장하는 중요한 기능으로써, 적절하게 사용하여 데이터 조작에 대한 성공과 실패에 대응할 수 있습니다.