[Spring] 트랜잭션이란?

LDB·2024년 11월 13일
post-thumbnail

트랜잭션(Transaction) 이란?

트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적인 기능이다, 예를 들면 update를 한 후 delete를 하는 행위를 하나의 트랜잭션이라고 표현한다.

트랜잭션 기술적 접근

기술적으로 접근하면 트랜잭션은 데이터베이스의 connection을 가져와 DB connection을 시작한 시점부터 트랜잭션의 시작이다. 그리고 DB작업을 마치고 commit혹은 rollback을 호출할 때 까지가 하나의 트랜잭션으로 묶인다.

spring에서 제공하는 @Transactional 이라는 어노테이션이 있는데 원래라면 트랜잭션을 사용하도록 JDBC 커넥션 객체를 생성하거나 transactionManager를 선언하여 트랜잭션 범위를 지정해주는 것이 일반적이다.

TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());

하지만 @Transactional 어노테이션을 사용하면 직접 객체를 만들 필요 없이 선언만 해주면 해당 범위 내 메서드가 트랜젝션이 되도록 보장해준다.

트랜잭션 특징

1. 원자성(Atomicity)

  • 트랜잭션의 연산은 데이터베이스에 전부 반영이 되어야하거나 전부 반영이 되지 않아야한다.
  • 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.

2. 일관성(Consistency)

  • 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.
  • 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.

3. 독립성(Isolation)

  • 하나의 트랜잭션이 실행하고 있는 도중에 다른 트랜잭션이 하이재킹할 수 없다.
  • 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.

4. 영속성(Durability)

  • 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.

참고 사이트

https://mangkyu.tistory.com/269

https://jindevelopetravel0919.tistory.com/48

https://kafcamus.tistory.com/30

profile
가끔은 정신줄 놓고 멍 때리는 것도 필요하다.

0개의 댓글