java

JDBC 트랜잭션 관리와 배치 처리

병호네 2024. 6. 12. 16:07

1. 트랜잭션 관리(commit, rollback)

트랜잭션은 여러 SQL 문을 하나의 작업 단위로 묶어주는 것을 의미합니다. commit은 트랜잭션을 완료하여 변경사항을 저장하고, rollback은 트랜잭션을 취소하여 변경사항을 되돌립니다.

 

트랜잭션의 개념과 중요성

  • 트랜잭션의 개념:
    • 트랜잭션(Transaction)은 데이터베이스에서 하나의 논리적인 작업 단위를 의미합니다. 여러 SQL 문이 하나의 작업으로 묶여서 실행됩니다.
    • 트랜잭션은 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)의 특성을 갖습니다. 이를 ACID 특성이라고 합니다.

 

💡ACID💡

  • 원자성 (Atomicity) : 원자성은 트랜잭션의 모든 작업이 성공적으로 완료되거나, 전혀 실행되지 않은 상태를 보장합니다. 트랜잭션 내의 모든 작업이 성공하면 트랜잭션이 커밋되어 데이터베이스에 적용되고, 트랜잭션 중 하나라도 실패하면 트랜잭션이 롤백되어 모든 변경 사항이 취소됩니다.(마치 은행에서 이체 작업을 할 때, 돈이 출금되었지만 입금되지 않거나, 입금되었지만 출금되지 않는 상황이 없어야 한다는 의미입니다. 둘 다 성공하거나 둘 다 실패해야 합니다.)
  • 일관성 (Consistency):  일관성은 트랜잭션이 실행되기 전과 후에 데이터베이스가 일관된 상태를 유지함을 보장합니다.(은행에서 고객의 잔고가 음수가 되지 않도록 하는 규칙이 항상 지켜지는 것을 보장합니다.)
  • 고립성 (Isolation): 고립성은 동시에 실행되는 트랜잭션들이 서로 간섭하지 않도록 보장합니다. 하나의 트랜잭션이 완료되기 전까지는 다른 트랜잭션이 그 트랜잭션의 중간 결과를 볼 수 없습니다.(여러 사용자가 동시에 은행 계좌를 업데이트할 때, 각 사용자가 자신의 작업이 완료되기 전까지 다른 사용자의 업데이트를 볼 수 없습니다.) 두 개의 트랜잭션이 동시에 같은 데이터를 수정할 때, 각각의 트랜잭션은 고립되어 있어야 하며, 순서에 상관없이 같은 결과를 생성해야 합니다.
  • 지속성 (Durability): 지속성은 트랜잭션이 성공적으로 커밋된 후에는 시스템 장애가 발생하더라도 그 결과가 데이터베이스에 영구적으로 반영됨을 보장합니다.(은행에서 이체가 완료된 후 시스템이 갑자기 중단되더라도, 이체된 금액이 손실되지 않고 그대로 유지되는 것을 보장합니다.)

 

자동 커밋 모드와 수동 커밋 모드

  • 자동 커밋 모드:
    • 기본적으로 JDBC는 자동 커밋 모드입니다. 각 SQL 문이 실행될 때마다 자동으로 커밋됩니다.
    • 설정: connection.setAutoCommit(true);
  • 수동 커밋 모드:
    • 수동 커밋 모드는 여러 SQL 문을 하나의 트랜잭션으로 묶어서 실행할 수 있습니다. 트랜잭션을 명시적으로 커밋하거나 롤백할 수 있습니다.
    • 설정: connection.setAutoCommit(false);
    • 커밋: connection.commit();
    • 롤백: connection.rollback();

 

시나리오 코드