@Transactional

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

트랜잭션이란?

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

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

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

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

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

이런 경우를 방지하려면

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

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

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

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

profile
자바공부해요흑흑

0개의 댓글

관련 채용 정보