Skip to main content

Command Palette

Search for a command to run...

Transaction

Updated
2 min read
Transaction
  1. 트랜잭션이란?


    데이터베이스의 상태를 변환시키는 작업을 하나로 묶은 작업의 단위를 뜻한다.

    예를 들어 돈을 이체하는 작업을 할 때 하나의 트랜잭션은

    1. 내 계좌 금액에서 50,000원이 빠져나감.

    2. 이체 할 계좌 금액에 50,000원이 더해짐.

위 두 개의 연산이 하나의 작업으로 묶여 실행되게 한다.

만약 1번 연산 이후 오류가 발생하여 2번 연산이 실행되지 않는다면, 내 계좌에서 50,000원은 빠져나가지만 이체 되어야 할 계좌에는 50,000원이 입금되지 않는다. 이러한 오류를 방지하기 위해 작업을 하나의 단위로 묶는 트랜잭션이 필요하다.

  1. ACID


    원자성(Atomicity)

    • 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 한다.

    • 어느 하나라도 오류가 발생한다면 모두 취소된다.

일관성(Consistency)

  • 트랜잭션의 작업 처리 결과는 항상 일관성 있는 데이터베이스 상태가 되어야 한다.

독립성(Isolation)

  • 트랜잭션 수행 시 다른 트랜잭션 연산에 끼어들지 못하도록 보장한다.

영속성(Durability)

  • 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.
  1. 트랜잭션의 상태


활성(Active): 트랜잭션이 실행중인 상태

실패(Failed): 트랜잭션 실행에 오류가 생겨 중단된 상태

철회(Aborted): 트랜잭션이 비정상적으로 종료되어 롤백 연산을 수행한 상태

부분 완료(Pratially Commited): 트랜잭션의 마지막 연산까지 실행했지만, Commit연산 이 실행되기 직전의 상태

완료(Committed): 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태

  1. 트랜잭션 격리 수준(Isolation level)


    동시성을 제어하는 방법중 하나로, 동시에 여러 트랜잭션이 처리되는 경우, 트랜잭션 끼리 얼마나 고립되어 있는지를 나타내는 것이다.

    READ UNCOMMITTED

    어떤 트랜잭션의 변경내용이 커밋되지 않았어도 데이터를 읽을 수 있다.

    Dirty Read 문제 발생

    READ COMMITTED

    커밋된 변경 내용만 읽을 수 있다.

    Non Repeatable Read 문제 발생

    Non Repeatable Read: 같은 트랜잭션내에서 똑 같은 데이터를 조회했음에도 다른 결과가 조회되는 경우

    REPEATABLE READ

    특정 데이터를 반복하여 조회해도 똑 같은 결과가 조회된다.

    Phantom read 문제 발생

    Phantom read: 새로운 데이터가 생기거나 없어질 경우 row개수가 다르게 조회

    SERIALIZABLE

    트랜잭션이 순차적으로 수행된다. 모든 문제 해결

    * 레벨이 높을수록 동시성 처리 성능은 낮아지나 데이터의 일관성을 보장한다.

  1. Spring @Transactional, Jpa @Lock

스프링에서 트랜잭션 처리를 위해 선언적 트랜잭션인 @Transaction 어노테이션을 주 로 사용한다.

@Transactional의 Isolation을 지정해 줄 수 있는 옵션이 있는데 이를 통해 해당 트랜잭 션의 고립 레벨을 설정할 수 있다. 이는 해당 트랜잭션이 얼마나 고립되어 있을 것이냐를 나타내는 것이다.

Jpa의 @Lock은 엔티티 혹은 조회하는 데이터에 Lock을 걸어 동시성을 제어하는 역할 을 한다.

@Transactional은 해당 트랜잭션 전체의 일관성을 보장하고, Lock은 개별적인 요소에 일관성을 보장한다. 따라서 @Lock이 성능 저하가 일어날 확률이 적지만 전체적인 일관 성을 보장하기 어려워 오류를 일으킬 수 있다는 차이점이 있다.

Techtalk

Part 14 of 15

주간 테크 영상을 보고 논의 후 정리하여 포스팅하는 공간

Up next

Lock & JPA Lock

Lock과 JPA Lock에 대해 알아보자.