Transaction
서론
데이터베이스에서 상태를 변화시키는 작업을 할때 SQL을 이용해 데이터베이스에 접근하고 작업한다.
오늘은 이 작업의 단위인 트랜잭션에 대해서 알아보자
Transation
트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 의미한다.
데이터베이스의 상태를 변화시키기 위해서는 SQL문을 이용해 데이터베이스에 접근해야한다.
우리가 흔히들 아는 SELECT, INSERT, DELETE 등을 여러 문장으로 모아 작업하는데 이 작업의 단위를 트랜잭션이라고 한다.
특징
트랜잭션에서는 크게 4가지 특징이 있다.
원자성
- 트랜잭션 연산은 데이터베이스에 모두 반영되든지 혹은 전혀 반영되지 말아야한다
일관성
- 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다
독립성
- 둘 이상의 트랜잭션이 동시에 병행되는경우 어느 하나의 트랜잭션이 실행중인 다른 트랜잭션 연산에 끼어들 수 없다
영속성
- 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다
@TRANSACTION
Springboot에는 트랜잭션 어노테이션이 존재하는데 이는 데이터베이스 트랜잭션 관리를 간편하게 해준다.
이 어노테이션은 메서드 레벨이나 클래스 레벨에서 사용할 수 있다.
트랜잭션 어노테이션이 붙은 클래스나 메서드는 모든 데이터베이스 작업이 하나의 트랜잭션으로 처리되며 데이터베이스 간의 일관성을 유지하고, 안전한 업데이트 혹은 롤백을 보장할 수 있다.
이 어노테이션이 붙은 메서드나 클래스에서 실행되는 모든 쿼리는 성공해야하고, 하나라도 실패하면 롤백된다.
트랜잭션 어노테이션에는 readOnly 옵션이 있는데 이 옵션이 true일때 데이터베이스의 상태를 변경하는 작업이 허용되지 않는다.
혹시라도 발생할 데이터 변경 시도를 감지하면 실패하게 된다.
읽기전용모드에서는 변경감지와 같은 일부작업을 수행하지 않으므로 성능에도 유리하다.
또한 해당 옵션이 붙은 메소드는 데이터를 변경하지 않고 오로지 조회만 한다는 것을 명확하게 표현할 수 있다.