트랜잭션 처리과정과 @Transactional의 기능

yeon·2021년 3월 28일
0

@Transactional 기능

트랜잭션 begin, commit을 자동 수행한다.

예외발생시, 자동으로 rollback 시켜준다.

@Transactional 속성(isolation, propagation, readOnly 등등)에 대해서는 아직 이해가 안가는 부분이라 나중에 다시 학습하기로하자.

트랜잭션의 종류

  1. 자동 커밋 트랜잭션

    각 쿼리마다 BEGIN TRAN ... COMMIT TRAN 이 붙여진다.

    (TRAN : TRANSACTION을 줄인것)

    SQL Server는 자동 커밋 트랜잭션을 디폴트로 사용한다.

    따라서, UPDATE문을 세번 호출하면 트랜잭션은 세번 발생한다.

  2. 명시적 트랜잭션

    BEGIN TRAN 문과 COMMIT TRAN 혹은 ROLLBACK TRAN 문을 명시적으로 써준다.

    만약 UPDATE 문 세개를 하나의 트랜잭션으로 묶으려면 세개의 쿼리문 앞에 명시적으로 BEGIN TRAN을 써주고, 마지막에는 COMMIT TRAN을 적어주면 된다.

트랜잭션 처리 과정 (참고한 블로그에 그림으로 잘 나와있음)

  1. BEGIN TRAN

    이 문장을 실행하면 지금부터 트랜잭션을 시작하는것

    해당 문장이 로그 일련번호, 트랜잭션 아이디와 함께 로그 파일에 기록된다.

  2. UPDATE 과정

    만약 1을 11로 바꾸는 과정을 진행하는 경우,

    데이터 파일에 존재하는 데이터 '1'이 데이터 캐쉬로 로딩된다.

    데이터 캐쉬에서 이 값을 '11'로 변경하고, 해당 쿼리문과 로그 일련번호, 트랜잭션 아이디를 같이 로그파일에 기록한다.

    여기선 아직 COMMIT TRAN이 실행되지 않아서, 로그 파일에만 기록되었을 뿐, 데이터 파일에는 적용되지 않은 상태이다.

  3. COMMIT TRAN

    해당 문장이 로그 일련번호, 트랜잭션 아이디와 로그 파일에 기록되고,

    데이터 캐쉬의 변경된 데이터를 데이터 파일에 적용시킨다.

    이 일련의 과정은 트랜잭션의 원자성을 보장한다.

참고자료 : https://mommoo.tistory.com/92

http://egloos.zum.com/sweeper/v/3003805

0개의 댓글