본문 바로가기

DB

[DB] 트랜잭션의 모든 것

트랜잭션(Transaction)이란?

트랜잭션의 특징은 크게 4가지로 구분됩니다.

  1. 원자성 (Atomicity)
  2. 일관성 (Consistency)
  3. 독립성 (Isolation)
  4. 지속성 (Durability)

 

원자성 (Atomicity)

예를 들어 "출금"이라는 기능의 흐름이 다음과 같다고 생각해봅시다.

  1. 잔액이 얼마인지 조회한다.
  2. 출금하려는 금액이 잔액보다 작은지 검사한다.
  3. 출금하려는 금액이 잔액보다 작다면 (잔액 - 출금액)으로 수정한다.
  4. 언제, 어디서 출금했는지 정보를 기록한다.
  5. 사용자에게 출금한다.

위의 작업이 4번에서 오류가 발생했다면 어떻게 될까요?

4번에서 오류가 발생했다면, 앞의 작업을 모두 원래대로 복원을 시켜야 합니다.

이를 [rollback]이라고 합니다.

 

5번까지 모두 성공했을 때만 정보를 모두 반영해야 합니다.

이를 [commit]한다고 합니다.

 

이렇게 rollback 하거나 commit을 하게 되면 하나의 트랜잭션 처리가 완료됩니다.

 

일관성 (Consistency)

일관성은 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것입니다.

트랜잭션이 진행되는 동안에 데이터가 변경되더라도 업데이트된 데이터로 트랜잭션이 진행되는 것이 아니라, 처음에 트랜잭션을 진행하기 위해 참조한 데이터로 진행됩니다.

이렇게 함으로써 각 사용자는 일관성 있는 데이터를 볼 수 있는 것입니다.

 

독립성 (Isolation)

독립성은 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 경우에 어느 하나의 트랜잭션이라도 다른 트랜잭션의 연산을 끼어들 수 없습니다.

하나의 특정 트랜잭션이 완료될 때까지, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없습니다.

 

지속성 (Durability)

지속성은 트랜잭션이 성공적으로 완료됬을 경우, 결과는 영구적으로 반영되어야 한다는 점입니다.

 

 

 

 

JDBC 프로그래밍에서 트랜잭션 처리 방법

DB에 연결된 후 Connection객체의 setAutoCommit메소드에 false를 파라미터로 지정합니다.

입력, 수정, 삭제 SQL이 실행을 한 후 모두 성공했을 경우 Connection이 가지고 있는 commit()메소드를 호출합니다.

 

@EnableTransactionManagement

Spring Java Config파일에서 트랜잭션을 활성화 할 때 사용하는 애노테이션입니다.

Java Config를 사용하게 되면 PlatformTransactionManager 구현체를 모두 찾아서 그 중에 하나를 매핑해 사용합니다.

특정 트랜잭션 메니저를 사용하고자 한다면 TransactionManagementConfigurer를 Java Config파일에서 구현하고 원하는 트랜잭션 메니저를 리턴하도록 합니다.

아니면, 특정 트랜잭션 메니저 객체를 생성시 @Primary 애노테이션을 지정합니다.

'DB' 카테고리의 다른 글

[SQL] sql 작성법  (0) 2022.09.27