[Java] JDBC Transaction

이지현·2023년 2월 7일
0

Java

목록 보기
22/46
post-thumbnail

✔️ Transaction

  • 단위 작업 여러 개를 묶어 하나의 작업 단위로 만드는 것
  • DBMS로부터 ACID를 제공받기 위해 사용

ACID

  • Atomicity(원자성) : All or nothing(모든 작업 성공 or 실패)
  • Consistency(일치성) : 동일하게 적용되는 조건
  • Isolation(독립성) : 한 작업이 수행될 때 다른 작업은 수행되지 않도록 함
  • Durability(영구보존성) : 작업이 끝난 데이터를 안전하게 DB에 저장하는 것을 보장

✔️ Isolation Level

  • Isolation Level이 낮을수록 성능이 높음
    Read Uncommited : 한 트랜잭션에서 처리한 작업(Commit)이 완료되지 않았음에도 다른 트랜잭션에서 읽을 수 있음
    Read Commited : Commit된 데이터만 읽을 수 있음
    Repeatable Read : 트랜잭션에서 최초로 읽은 데이터(Snapshot)를 다음에도 사용
    Serializable Read : 한 트랜잭션에서 읽고 쓰는 데이터를 다른 트랜잭션에서는 절대 접근할 수 없음

✔️ Isolation Level에 따른 문제점

  • DIRTY READ : 어떠한 트랜잭션에서 처리한 작업이 완료되지 않았음에도 다른 트랜잭션에서 읽을 수 있게 되는 현상
  • NON-REPEATABLE READ : 동일한 SELECT 쿼리를 실행했을 때 항상 같은 결과를 보장해야 한다는 REPEATABLE READ 정합성에 어긋나는 현상
  • PHANTOM READ : 한 트랜잭션 내에서 동일한 쿼리를 두 번 수행했을 때, 첫 번째 쿼리에서 존재하지 않던 유령(Phantom) 레코드가 두 번째 쿼리에서 나타나는 현상
격리 수준/문제점Dirty ReadNon-Repeatable ReadPhantom Read
Read Uncommited(Level 0)OOO
Read Commited(Level 1)XOO
Repeatable Read(Level 2)XXO
Serializable Read(Level 3)XXX

💡 setAutoCommit 메소드

  • java.sql.Connection 인터페이스의 setAutoCommit 메소드
  • 연결이 자동 커밋 모드이면 해당 연결의 모든 SQL 문이 개별 트랜잭션으로 실행되고 커밋. 즉, 여러 SQL 실행을 하나의 트랜잭션으로 묶기 위해서는 자동 커밋 모드를 해제해야 함
  • 기본적으로 새 연결은 자동 커밋 모드로 설정
profile
2023.09 ~ 티스토리 이전 / 2024.04 ~ 깃허브 블로그 이전

0개의 댓글