05. Transaction

xoqja055·2021년 8월 19일
0

테코톡

목록 보기
6/10

1. 트랜잭션 이란?

  • 더이상 쪼갤수 없는 업무의 최소 단위.
  • 하나의 트랜잭션은 커밋되거나 롤백된다.
    (트랜잭션이 성공하면 실행, 실패하면 실행취소 된다.)
  • DB에서의 데이터 부정합을 방지하기 위해 사용한다.

2.트랜잭션의 성질

ACID

Atomicity(원자성)

  • 트랜잭션은 DB에 모두 반영되거나, 반영되지 않아야 한다.
  • 'all or nothing'

Consistency(일관성)

  • 트랜잭션의 작업처리 결과는 항상 일관성 있어야한다. 작업처리후, 데이터 베이스는 일관된 상태로 유지되어야 한다.
  • 트랜잭션 수행 전후의 데이터베이스 상태는 각각 일관성이 보장되는 서로 다른 상태가 된다.
  • 은행계좌에서 송금시 송금한 계좌와 송금받은 계좌의 총액은 일정해야 한다.

Isolation(고립성)

  • 둘이상의 트랜잭션이 동시에 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션의 연산에 끼어들 수 없다.
  • 모든 트랜잭션을 순차적으로 수행하는 식으로 구현된다.

Durality(지속성)

  • 트랜잭션이 성공하면 결과는 영구히 반영되어야 한다.

  • 해당 트랜잭션에 의한 모든 변경은 향후에 어떤 소프트웨어나 하드웨어 장애가 발생되더라도 보존되어야 한다.

    3. 트랜잭션 격리 수준

  • 동시에 여러 트랜잭션이 DB에 접근할 때 접근을 어떻게 제어할 것인가?

  • 각 트랜잭션에 알맞는 격리수준을 선택하는 것이 중요하다.

Read-Uncommitted

  • 커밋전의 트랜잭션의 변경내용을 읽을 수 있다.
  • 정합성 문제 : Dirty Read, Non-Repeatable Read, Phantom Read

Read-Committed

  • 커밋이후의 트랜잭션 변경내용을 읽을 수 있다.
  • 정합성 문제 : Non-Repeatable Read, Phantom Read

Repeatable-Read

  • 트랜잭션이 시작되고 종료되기 전까지 한 번 조회한 값은 계속 같은 값이 조회된다. 트랜잭션 시작전의 내용까지만 조회한다.
  • 정합성 문제 : Phantom Read

Serializable

  • 한 트랜잭션에서 사용하는 데이터를 다른 트랜잭션에서는 사용할 수 없다.

  • 정합성 문제 없음.

    4. 트랜잭션 전파타입

  • 현재 트랜잭션에서 다른 트랜잭션으로 이동할때, 트랜잭션 내부에서 또다른 트랜잭션을 호출할 때 어떻게 처리할 것 인가?

진행중인 트랜잭션 O진행중인 트랜잭션 X
Required트랜잭션 생성트랜잭션 생성
Mandatory트랜잭션 생성예외발생
Required_new현재 트랜잭션 보류, 새로 생성트랜잭션 생성
Supports현재 트랜잭션 사용트랜잭션 생성안함
Not_Supported현재 트랜잭션 보류트랜잭션 생성안함
Never예외발생트랜잭션 생성안함
Nested중첩 트랜잭션 생성트랜잭션 생성

5. Spring @Transactional

Transactional을 이용하지 않은 코드.

/**
* tx는 transaction을 의미.
*/
public void saveAuctionInfo(Auction auction) {
    try {
      tx.begin();
      auctionRepository.save(auction);
      tx.commit();
    } catch (Exception e) {
      tx.rollback();
    }
}

Transactional을 이용한 코드

@Transactional
public void register(Auction auction) {
    auctionRepository.save(auction);
}
  • @Transactional없는 코드의 단점

    1. it's repetitive and error prone(반복적이며 에러에 취약)
    2. any error can have a very high impact(모든 에러가 치명적)
    3. errors are hard to debug and reproduce(디버깅하기 어려움)
    4. this decreases the readability of the code base(코드가독성 저하)
  • @Transactional을 통해 얻을 수 있는 것.

    1. transaction propagation are handled automatically.(자동적으로 트랜잭션 전파가 다루어짐)
    2. 상기의 단점들을 보완.

0개의 댓글