트랜잭션 - 개념 이해

존스노우·2023년 11월 12일
0

  • 트랜잭션? 거래라는 뜻
  • 하나의 거래를 안전하게 처리해 준다는 뜻
  • 정상 반영하는것? 커밋(commit) 실패? Rollback

  • 이미 알고 있는 내용이지만 복습하는 의미로

데이터베이스 연결 구조와 DB 세션

트랜잭션 -DB 예제1 개념이해

  • 이런 기본동작 이 있고

  • 커밋은 아직 안했으면? 임시로 저장
  • 여기 자료는 예시이다.
  • 해당세션은 임시 저장된 걸 볼 수 있지만
  • 다른세션은 볼 수 없다

  • 커밋을 하게되면 다른 세션에서도 볼 수 있다.
  • 임시 -> 완료로 되기 때문
  • Rollback 은 처음 상태로 되기 때문에 복구가 된다 처음상태로
  • 그래서 아무것도 볼수 없다.
  • 그냥 아는 내용인데 흐음 스킵

트랜잭션 - DB예제 2 자동 커밋 수동 커밋

  • 트랜잭션 기능 제대로 수행하려면? 수동 커밋 사용해야 함

  • 마지막에 commit; 수동으로 꼭 날려 줘 야 됨.

  • set Autocommit = false 트랜잭션을 시작한다라 표현 한다.

  • 자동 커밋모드는 한줄 할때 마다 커밋이 된다.

  • 디비를 2개 준비하자

  • 당연히 오토커밋이니 두개 세션은 같은 값을 볼 수 있다

  • 수동 커밋으로 해보자
  • 세션 2에는 보이지 않는다.
  • Commit; 을 한뒤 정상 데이터를 볼 수 있따
  • Rollback도 마찬가지

  • 정리 계좌 문제도 비슷해서 스킵한다.

DB 락 - 개념 이해

  • 다른사람이 작업하는 동안 또 다른사람이 작업을 하면 안돼!
  • 기본적으로 아는상식이라 스킵

DB 락 - 조회

  • 기본적으로 조회는 락을 걸지 않음
  • 데이터를 조회하는데 락을 걸고 싶을때가 있다. (select for update)
  • 그러면 변경 X
  • 근데 왜 락이 필요하지?
  • 다른곳에서 다른 곳에서 변경하지 못하도록 강제로 막아야 할때
  • 돈 관련 로직 중요한 로직일 경우 그런경우가 있나보다


  • 이런식으로 락을 걸어버리면
  • 조회는 되지만 변경이 안됨
  • 락이 없기 때문에!

트랜잭션 적용 1

  • 돈을 이체하는 로직
  • 이 부분에서 예외가 터짐 근데 트랜잭션이 없다? 기본적으로 autoCommit이다.

  • 위에 내용으로 아래테스트를 작성

트랜잭션 적용 2

  • 후아 어느정도 아는내용인대 복습겸

  • 옛날 방식이라 이렇게 고쳐준다.
  • 커넥션을 종료하지않고 기존 커넥션을 받는 작업

  • 트랜잭션 어노테이션 사용하기전에 이렇게 사용한다.
  • 잘 기억해 둬야겠다 트랜잭션 어노테이션은 이런 코드를 내재하고 있구나

  • 테스트는 똑같이 진행 이번엔 제대로 롤백이 된다.
profile
어제의 나보다 한걸음 더

0개의 댓글