1. Transaction
: 여러 operation들로 이루어 지는 하나의 작업 단위
- database의 상태를 변경(insert, update, delete)
- all or nothing (operation이 하나라도 실패할 경우, 모든 실행 결과를 취소시킴으로써 데이터 무결성 보장)
- ACID 특성을 만족 : Atomicity / Consistency / Isolation / Durability
예시 )
2. Transaction 처리의 중요성
무결성 제약조건(check)
alter table inventory add constraint c1 check(qty >= 0);
-> 트랜잭션으로 구현하지 않았을 경우, check 제약조건 위배로 오류 발생했을 때 이미 삽입 및 변경된 행은 그대로 남아 데이터베이스의 무결성이 훼손된다.
-> 트랜잭션으로 구현될 경우, 변경된 사항이 취소(rollback)된다.
3. Transaction Manager
: 다양한 영속성 기술들을 위한 구현 클래스 제공
- JDBC 기반
: DataSourceTransactionManager 이용
: commit(), rollback() 등 호출
4. 스프링의 Transaction 지원
- 선언적 트랜잭션 관리
: 트랜잭션 처리를 코드에서 직접 구현하지 않고 xml 설정 파일이나 annotation을 통해 트랜잭션의 범위와 규칙을 정의
: XML, annotation 이용
1) TransactionProxyFactoryBean
2) <tx:advice>
3) @Transactional
5. transaction 속성
1) Propagation Behavior
2) Isolation level
: 한 트랜잭션이 동시에 실행중인 다른 트랜잭션의 영향을 얼마나 받았는가를 의미
- dirty reads : 다른 트랜잭션에 의해 변경되었지만, 아직 commit 되지 않은 데이터를 읽는 현상
- non-repeatable reads : 같은 질의를 두 번 이상 할 때 서로 다른 데이터를 얻는 현상
- phantom reads : 여러 데이터 행을 읽은 후 다시 질의를 수행할 때 이전에 없던 데이터를 얻는 현상
6. @Transactional annotation 이용
: @Transactional 어노테이션이 붙은 모든 class/bean들에 대해 transaction advice를 자동 생성 및 적용
적용 예 )
* 메소드가 먼저 적용됨
'Programming > Spring' 카테고리의 다른 글
Restful하게 API를 구성하자 ! (0) | 2021.11.25 |
---|---|
12. Spring & JPA (0) | 2021.06.08 |
10. Spring 기반 RESTful service (0) | 2021.06.07 |
09. Spring JDBC (0) | 2021.06.01 |
08. MyBatis (0) | 2021.06.01 |