포도가게의 개발일지

[Spring]Transaction? 본문

Spring boot

[Spring]Transaction?

grape.store 2022. 1. 20. 17:56
반응형

Transaction

- 컴퓨터 과학분야에 트랜잭션은 "쪼개질 수 없는 업무처리의 단위"를 의미합니다. 

 

why?

보다 복잡한 프로그램을 개발하다 보면 쿼리 한 줄로 해결할 수 없는 로직을 처리해야하는 경우가 많습니다. 여러 개의 쿼리가 처리되는 상황에서 문제가 생겨버린다면 시스템에 큰 결함을 남기게 됩니다. 

* 모든 과정이 완료될 때까지 db에 업데이트를 안해준다!. 

 

예를 들어)

ATM으로 계좌이체를 한다고 생각해보면,

1. A 은행에서 출금하여 B은행으로 송금하려고 합니다.

2. 송금 중, 알 수 없는 오류가 발생하여 A은행 계좌에서 돈은 빠져 나갔지만 B은행의 계좌에 입금되지 않았습니다.

3. 이와 같은 상황을 막기위해 거래가 성공적으로 모두 끝나야 이를 완전한 거래로 승인하고, 거래 도중 뭔가 오류가 발생했을 때는 이 거래를 처음부터 없었던 거래로 완전히 되돌리는 것입니다.

 

How?

- 커밋(Commit): 모든 부분작업이 정상적으로 완료하면 이 변경사항을 한꺼번에 DB에 반영합니다.

- 롤백(Rollback): 부분 작업이 실패하면 트랜잭션 실행 전으로 되돌립니다.

      하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스 일관성을 깨뜨렸을 때 트랜잭션의 일부가 정상적으로

      처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소하는 연산입니다.

@Transactional
//@Transactional(rollbackFor = {RuntimeException.class, Error.class}) 기본 속성
//@Transactional(rollbackFor = {Exception.class}) 모든 예외 롤백
public void save(User user) {
	userRepository.save(user);
}

 

// 수동 롤백

@Transactional(rollbackFor = {RuntimeException.class, Error.class})
public void save(User user) {
    try {
        userRepository.save(user);
    } catch(Exception e) {
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    }
}

트랜잭션(Transaction)의 특징 

ACID(Atomicity, Consistency, Isolation, Durability)는 데이터베이스 트랜젝션이 안전하게 수행된다는 것을 보장하기 위한 트랜잭션의 특징을 말합니다. (줄여서 ACID라고도 합니다.)

  • 원자성(Atomicity) : 트랜잭션이 DB에 모두 반영되거나, 혹은 전혀 반영되지 않아야 한다.
  • 일관성(Consistency) : 트랜잭션의 작업 처리 결과는 항상 일관성이 있어야 한다.
  • 독립성(Isolation) : 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.
  • 영속성(Durability) : 트랜잭션이 성공적으로 완료 되었으면 결과는 영구적으로 반영되어야 한다.

 

'Spring boot' 카테고리의 다른 글

[Spring] java.lang.IllegalStateException: Failed to load ApplicationContext  (0) 2022.01.21
[JAVA] Generic  (0) 2022.01.21
[JAVA] Annotation?  (0) 2022.01.20
[JAVA] 빌드 과정  (0) 2022.01.13
[JAVA] LOMBOK이란?  (0) 2022.01.12
Comments