Transaction
- 데이터베이스의 상태를 변경 하는 작업 또는 한번에 수행되어야 하는 연산들 을 의미한다.
- begin, commit 을 자동으로 수행해준다.
- 예외 발생 시 ROLLBACK 처리를 자동으로 수행해준다.
1. 원자성(Atomicity)
- 한 트랜잭션 내에서 실행한 작업들은 하나의 단위로 처리한다. 즉, 모두 성공 또는 모두 실패
2. 일관성(Consistency)
- 트랜잭션은 일관성있는 데이터베이스 상태를 유지한다.(data integrity 만족 등)
3. 격리성(Isolation)
- 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리해야 한다.
4. 영속성(Durability)
- 트랜잭션을 성공적으로 마치면 결과가 항상 저장되어야 한다.
Transaction 처리 방법
Spring 에서는 간단하게 @Transactional
어노테이션을 붙여 사용한다. 이 어노테이션은 메서드, 클래스, 인터페이스 위에 붙여서 사용할 수 있다. 이 방식을 선언적 트랜잭션
이라 부르며, 적용된 범위에서는 트랜잭션 기능이 포함된 프록시 객체가 생성 되어 자동으로 commit 혹은 rollback 을 진행해준다.
@Transactional
- 다수의 쿼리문이 있는 메서드에서 사용한다.
- 데이터의 변화가 있는 쿼리문에서 사용한다. (단순 조회 쿼리문에서는 사용하지 않는다.)
- 메서드 내에 있는 모든 쿼리문 중 하나라도 실패하면 데이터를 ROLLBACK 한다.
@Transactional 미적용 시