한국의 메타몽 2021. 9. 26. 16:53

 

Transaction이란?

 

데이터베이스에서 상태를 변화시키기 위해 수행하는 작업의 단위를 말한다.

transaction은 일반적으로 사람의 정의하는 것에 따라 그 내용이 달라진다.

 

예시를 하나 살펴보자. 웹쇼핑몰에서는 사용자가 사용자가 결제하는 행위와 물건이 구입되는 행위가 동시에 이루어져야한다.

소비자의 결제가 진행되는 payment table에 insert가 이루어지고, 물건이 구입되는 order table에도 insert가 이루어져야한다.

만약 여기서 order table에 insert가 정상적으로 이루어지지 않으면 소비자의 돈만 빠져나가고 물건은 정상적으로 구매되지 않은다.

 

여기서는 payment table과 order table에 동시적으로 이루어지는 insert가 하나의 transaction이 된다.

 

 

  ACID

 

Transaction의 특징은 크게 4가지로 구분된다.

 

  • 원자성 (Atomicity)
    : Transaction이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다. 

  • 일관성 (Consistency)
    : Transaction의 작업 처리 결과가 항상 일관성이 있어야한다.
    예를들어 Transaction이 진행되는 동안 데이터베이스가 변경되더라도 업데이트된 데이터베이스로 Transaction이 진행되는 것이 아니라, 처음에 Transaction을 진행 하기 위해 참조한 데이터베이스로 진행된다.

  • 독립성 (Isolation)
    : 어떤 하나의 Transaction이라도, 다른 Transaction의 연산에 끼어들 수 없다.
    즉, 하나의 Transaction이 완료될때까지 다른 Transaction이 특정 Transaction의 결과를 참조할 수 없다.

  • 지속성 (Durability)
    : Transaction이 성공적으로 완료됐을 경우, 결과는 영구적으로 반영되어야 한다.

 

Commit과 Rollback

 

일반적으로 transaction이 성공적으로 완료되어 Commit되면 주문과 결제가 모두 성공하고, 반대로 실패해서 Rollback되면 주문과 결제 모두 사라지도록 관리한다. 

 

 

예시 코드

 

@Service
@RequiredArgsConstructor
public class BookService {
    private final BookRepository bookRepository;
    private final AuthorRepository authorRepository;

    @Transactional
    public void putBookAndAuthor(){
        Book book = new Book(); // 1
        book.setName("JPA 시작하기");
        bookRepository.save(book);

        Author author = new Author(); // 2
        author.setName("martin");
        authorRepository.save(author);
    } // 3
}

 

위의 코드에서 1번과 2번, 3번에 break point가 있고 디버깅 모드로 테스트 코드를 구동한다고 가정하다.

흐름대로 따라간다면 1번 break point에서 2번 break point로 넘어갔을때, book의 table을 조회하면 "JPA 시작하기"라는 데이터가 조회되어야 할 것 같다. 하지만 조회를 해도 텅 빈 테이블만 조회된다.

 

이유는 Transaction은 putBookAndAuthor()이 하나의 Transaction이기 때문에, 1번과 2번의 book, author 로직들이 모두 구현된 뒤, 3번 break point에 도달해야 데이터가 옳바르게 저장된다.

 

 

참고 사이트

 

개발자로 홀로 서기 : https://mommoo.tistory.com/62

 

트랜잭션(Transaction)이란?

트랜잭션이란? 트랜잭션(Transaction 이하 트랜잭션)이란, 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다. 데이터베이스의 상태를 변화시킨다는 것은 무얼 의미하는 것일

mommoo.tistory.com

 

 

@Transaction을 붙이게되면

각각의 항목을 commit을 하지 않고 있다가 Transaction이 완료되는 시점에 commit을 하고 DB에 반영한다.