@Transactional

딩딩당당·2022년 12월 1일
0

트랜잭션이란?

트랜잭션은 네 가지의 특징을 가지고 있다.

  • 원자성
  • 일관성
  • 독립성
  • 지속성
  1. 원자성
    롤백 커밋으로 원자성의 특징을 구현한다.
  2. 일관성
    트랜잭션이 진행되는 동안 데이터가 변경되더라도 업데이트된 데이터로 트랜잭션이 진행되는 것이 아니라, 처음에 트랜잭션을 진행하기 위해 참조한 데이터로 진행된다.
  3. 독립성
    둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 경우에 서로 다른 트랜잭션의 연산이 끼어들 수 없다.
  4. 지속성
    트랜잭션이 성공적으로 완료되었을 경우 결과는 영구적으로 반영되어야 한다.

DB 트랜잭션은 DB 시스템 또는 유사한 시스템에서의 상호작용 단위이다.

인터넷 쇼핑에서 상품을 구매할 때 내가 결제를 하려는 순간 다른 요청이 들어왔을 때 어떻게 될까?

  • 해당 판매자가 상품의 가격을 바꿔서 가격이 잘못 결제됨
  • 같은 상품을 다른 사람이 동시에 구매해서 재고는 1개인데 2명이 결제함
  • 결제완료 직전에 네트워크가 끊겨서 돈은 사라지고 구매는 완료되지 않음

이런 경우를 방지하려면

결제는 다른 사람과 독립적으로 이루어져야하고 과정중에 다른 연산이 끼어들 수 없다. 또한 오류가 생긴 경우 연산을 취소, 롤백하고 성공할 경우 커밋해야한다.

@Transactional 어노테이션을 클래스나 메서드에 붙여줄 경우, 해당 범위 내 메서드가 트랜잭션이 되도록 보장해준다. 이를 선언적 트랜잭션이라고 말한다

@Transactional 어노테이션이 클래스나 메서드에 붙을 때 Sptring은 해당 메서드에 대한 프록시를 만든다. 프록시 패턴은 디자인 패턴 중 하나로, 어떤 코드를 감싸면서 추가적인 연산을 수행하도록 강제하는 방법이다.

트랜잭션의 경우, 트랜잭션과 시작과 연산 종료시의 커밋이 필요하므로 프록시를 생성해 해당 메서드의 앞뒤에 트랜잭션의 시작과 끝을 추가하는 것이다.

profile
자바공부해요흑흑

0개의 댓글