6월 12일 - 트랜잭션

Yullgiii·2024년 6월 12일
0
post-thumbnail

트랜잭션

트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위이다. 상태를 변화시킨다는 것은 SQL 질의어를 통해 DB에 접근하는 것을 의미한다. 예를 들어, SELECT, INSERT, DELETE, UPDATE 명령어를 통해 데이터베이스에 변화를 주는 작업들이 트랜잭션에 포함된다.

트랜잭션의 작업 단위

트랜잭션은 많은 SQL 명령문들을 사람이 정하는 기준에 따라 묶은 작업 단위를 의미한다. 예를 들어, 게시판에서 사용자가 글을 작성하고 올리기 버튼을 누른 후 게시판에 다시 돌아오면 게시판에 내가 쓴 글이 업데이트된 상태를 볼 수 있다.

이때 DB 작업:

  1. 올리기 버튼을 누른다: INSERT 문을 사용해 사용자가 입력한 게시글 데이터를 데이터베이스에 삽입한다.
  2. 게시판 새로 구성: SELECT 문을 사용해 최신 정보를 유지한다.

현재 작업 단위는 INSERT문과 SELECT문을 포함한다. 이를 통틀어 하나의 트랜잭션이라고 한다. 즉, 하나의 트랜잭션 설계를 잘 만드는 것이 데이터를 다룰 때 많은 이점을 가져다준다.

트랜잭션의 특징

  1. 원자성 (Atomicity): 트랜잭션이 DB에 모두 반영되거나 혹은 전혀 반영되지 않아야 한다.
  2. 일관성 (Consistency): 트랜잭션의 작업 처리 결과는 항상 일관성 있어야 한다.
  3. 독립성 (Isolation): 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.
  4. 지속성 (Durability): 트랜잭션이 성공적으로 완료되었으면, 결과는 영구적으로 반영되어야 한다.

Commit과 Rollback

Commit

하나의 트랜잭션이 성공적으로 끝났고, DB가 일관성 있는 상태일 때 이를 알려주기 위해 사용하는 연산이다.

Rollback

하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션의 원자성이 깨진 경우, 트랜잭션이 정상적으로 종료되지 않았을 때, 마지막 일관성 있는 상태로 롤백할 수 있다.

예제 코드

트랜잭션 예제 (Java JDBC)

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) {
        Connection conn = null;
        Statement stmt = null;
        try {
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");
            conn.setAutoCommit(false); // 트랜잭션 시작

            stmt = conn.createStatement();
            String sql1 = "INSERT INTO posts (title, content) VALUES ('My Post', 'This is my first post')";
            stmt.executeUpdate(sql1);

            String sql2 = "UPDATE users SET post_count = post_count + 1 WHERE user_id = 1";
            stmt.executeUpdate(sql2);

            conn.commit(); // 트랜잭션 커밋
            System.out.println("Transaction committed successfully.");
        } catch (SQLException se) {
            if (conn != null) {
                try {
                    conn.rollback(); // 트랜잭션 롤백
                    System.out.println("Transaction rolled back.");
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            se.printStackTrace();
        } finally {
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException se) {
                    se.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException se) {
                    se.printStackTrace();
                }
            }
        }
    }
}

So...

트랜잭션은 데이터베이스에서 작업을 수행할 때 원자성, 일관성, 독립성, 지속성을 보장하는 중요한 개념이다. 트랜잭션을 통해 데이터의 무결성을 유지하고, 에러 발생 시 안전하게 롤백할 수 있다. 따라서 데이터베이스 작업 시 트랜잭션의 적절한 사용은 매우 중요하다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글