ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 10 Transaction, Commit, Rollback
    Spring/02 Spring DI와 AOP 2023. 7. 5. 23:19
    반응형

    Transaction, Commit, Rollback

    1) Transaction이란?

    - 더 이상 나눌 수 없는 작업의 단위

                (Tx 간단히 쓰임, insert,update,select,등 명령 하나하나가 트잰젝션)

    - 계좌 이체의 경우, 출금과 입금이 하나의 Tx로 묶여야 됨 (출금+입금 = Tx)

    - ‘아니면 ’. 출금과 입금이 모두 성공하지 않으면 실패.

                      (둘다 성공, 하나만 실패해도 모두 취소)

     

    2) Transation의 속성 - ACID

    원자성(Atomicity) - 나눌 수 없는 하나의 작업으로 다뤄져야 한다. ex) 출금+입금 = Tx

     

    일관성(Consistency) - Tx 수행 전과 후가 일관된 상태를 유지해야 한다.

                  ex) : A500, B300원을 가지고 있고, : A300원을 B에게 이체 했을 때

                         A(200)B(600)의 총금액은 800원이다 전후가 일관된 상태가 유지되어야 한다

     

    고립성(Isolation) - Tx는 독입적으로 수행되어야 한다.

                  ex) Tx1작업과 Tx2 작업시,

                        Tx2의 작업이 Tx1에 영향을 미쳐서 작업 결과가 달라지면 안된다

    isolation level : 어느 정도 개입을 허용 한다

     

    영속성(Durability) - 성공한 Tx의 결과는 유지되어야 한다.

                     ex) 계좌이체가 되었으면 그 결과가 계속 유지되어야 한다

     

    3) 커밋(commit)과 롤백(rollback)

    커밋(commit) - 작업 내용을 DB에 영구적으로 저장

    롤백(rollback) - 최근 변경사항을 취소(마지막 커밋으로 복귀)

     

    4) 자동 커밋과 수동 커밋

    자동 커밋 - 명령 실행 후, 자동으로 커밋이 수행(rollback불가)

    수동 커밋 - 명령 실행 후, 명시적으로 commit 또는 rollback을 입력

     

    5) Txisolation level

    READ UNCOMMITTED - 커밋되지 않은 데이터도 읽기 가능 (dirty read)

    >> 커밋되지 않았지만 결과값을 가져온다

     

    READ COMMITTED - 커밋된 데이터만 읽기 가능 (phatom read)

    >> 에서는 a:2 b:200 값을 읽어오지 못한다

    >> 번은 커밋이되어야 읽기가 가능해진다

     

    REPEATABLE READ - Tx이 시작된 이후 변경은 무시됨 (default)

     

    SERIALIZABLE - 한번에 하나의 Tx만 독립적으로 수행 (고립 최고 레벨, 직렬화)

    >> 의 작업이 commit(완료)될 때까지 의 작업은 대기해야 한다

    >> commit이 수행되면 의 작업이 실행된다

     

    >> 만약에 번 작업이 INSERT 였다면?

          ③SELECT 작업도 번의 작업이 commit될 때까지 대기해야한다

     

     

     

     

    6) 실습

    - Read Uncommitted

    인텔리제이 - MySQL 에디터(설정)

     

    - Repeatable Read

     

    - Serializable

     

     

     

    6-1) 자바 실습

    DBConnectionTest2Test.java(오토커밋 false 경우)

     

    MySQL 에디터

    >> 아이디의 값이 같아서 rollback( ) 되었다(트랜젝션으로 하나로 묶은 경우)

     

     

    DBConnectionTest2Test.java(오토커밋 true 경우)

     

    MySQL 에디터

    >> 의 값이 저장되고 번의 값은 Id의 값 입력이 Private key로 되어 있어

          “asdf” 값이 중복되어 실패하였다

     

     

     

    반응형

    'Spring > 02 Spring DI와 AOP' 카테고리의 다른 글

    12 서비스 계층의 분리와 @Transactional(1)  (0) 2023.07.08
    11 AOP의 개념과 용어  (0) 2023.07.07
    09 DAO의 작성과 적용(2-2)  (0) 2023.07.04
    09 DAO의 작성과 적용(2-1)  (0) 2023.07.03
    08 DAO의 작성과 적용(1)  (0) 2023.07.02
Designed by Tistory.