Transaction과 ACID

Kim DongKyun·2023년 3월 19일
1
post-thumbnail

이미지 출처

정리

  1. Transaction in Spring
  • @Transactional 어노테이션 붙은 매서드를 호출 시 프록시 객체가 생성되어 이를 감싸고, 트랜잭션을 열고 나서 원래 매서드를 실행, 결과에 따라 커밋 또는 롤백 후 프록시 객체 반환
  1. ACID
  • Atomicity : 모두 수행되거나 모두 수행되지 않는다
  • Consistency : 수행 결과에 일관성이 있어야 한다.
  • Isolation : 여러개 트랜잭션이 동시 실행 시 각 Transaction은 서로 간섭받지 않아야 한다 ( 스프링에서는 트랜잭션에 대한 isolation 직접 설정 가능 )
  • Durability : 성공적으로 완료 된 후 결과가 영구 저장되어야 한다.

Transaction?

Transaction은 데이터베이스의 작업 처리 단위로, 하나 이상의 쿼리가 모여서 하나의 논리적인 작업을 수행하게 됩니다. 이 때, Transaction은 데이터베이스의 일관성을 유지하기 위한 매우 중요한 개념입니다.

트랜잭션은 스프링 AOP를 사용해서 이뤄집니다. @Transacional 어노테이션이 붙은 매서드를 호출하면 프록시 객체가 생성되고, 이를 통해 트랜잭션을 시작합니다. 그 후 원래 객체의 매서드를 호출하고, 매서드 실행 후에 트랜잭션을 커밋 혹은 롤백합니다. 마지막으로 프록시 객체를 반환합니다.


ACID?

ACID는 Transaction의 4가지 특성을 나타내는 약어입니다.

  1. 원자성
    하나의 Transaction이 실행되는 동안 모든 작업이 완료되거나 아무것도 실행되지 않는 것을 의미합니다. 이를 통해 데이터베이스의 일관성을 유지할 수 있으며, 만약 중간에 문제가 발생해 Transaction이 중단될 경우, 모든 작업이 롤백되어 이전 상태로 되돌아갑니다.

  2. 일관성
    Transaction이 수행되기 전과 수행된 후의 데이터의 상태가 일관성 있게 유지되어야 합니다. 즉, 하나의 Transaction이 수행되는 동안 데이터베이스의 상태가 변하더라도, 이전 상태에서 일관성이 유지되어야 합니다.

  3. 고립성
    여러 개의 Transaction이 동시에 실행될 때, 각각의 Transaction이 서로 영향을 주지 않고 독립적으로 실행되어야 함을 의미합니다. 이를 위해 각각의 Transaction은 자신만의 공간에서 작업을 수행하고, 다른 Transaction에서의 변경사항은 자신의 Transaction에 영향을 주지 않아야 합니다.

  4. 지속성
    Transaction이 성공적으로 완료된 후에도, 그 결과가 영구적으로 저장되어야 함을 의미합니다. 즉, Transaction의 결과가 저장되기 전에 시스템이 다운되더라도, 데이터의 무결성이 보장되어야 합니다.

0개의 댓글