1. 트랜잭션 (Transaction)
1) 여러 개의 DML 명령문을 하나의 논리적인 작업 단위로 묶어서 관리하는 것
2) All 또는 Nothing 방식으로 작업을 처리함으로써 작업의 일관성 유지함
3) 웹 애플리케이션에서 Service 클래스의 각 메서드가 애플이케이션의 단위 기능을 수행.
4) 웹 애플리케이션의 트랜잭션은 대부분 서비스 클래스에 적용함.
2. 단위 기능 예
1) 게시글 조회 시 해당 글을 조회하는 기능과 조회 수를 갱신하는 기능
2) 쇼핑몰에서 상품 주문시 주문 상품을 테이블에 등록하는 기능과 주문자의 포인트를 갱신하는 기능
3) 은행에서 이체시 이체자의 잔고를 갱신하는 기능과 수신자의 잔고를 갱신하는 기능
3. 이체를 통한 트랜잭션 기능
1) 트랜잭션 적용 전 은행 계좌 이체
- 이순신 계좌에서 돈 500만원 인출함
=> 이순신 계좌에서 돈 500만원 차감함 (update)
=> 이순신 계좌 잔고 갱신함 (commit)
- 신사임당 계좌에 500 만원을 이체함
=> 신사임당 계좌에 500 만원 증가 시킴 (update)
=> 신사임당 계좌 잔고 갱신함 (commit)
2) 트랜잭션 적용 후 은행 계좌 이체
- 이순신 계좌에서 돈 500만원 인출함
- 이순신 계좌에서 돈 500만원 차감함 (update)
- 신사임당 계좌에 500 만원을 이체함
- 신사임당 계좌에 500 만원 증가 시킴 (update)
- 전체 계좌 잔고를 반영함 (commit)
=> 이순신과 신사임당 계좌 잔고의 갱신이 모두 정상적으로 이루어지면 최종적으로 반영(commit)함
=> 중간에 이상이 발생할 경우 이전의 모든 작업 취소, 즉 롤백(rollback) 시킴.
4. 스프링의 여러가지 트랜잭션 속성들
1) propagation
- 트랜잭션 전파 규칙 설정
- 속성 값
- REQUIRED : 트랜잭션 필요,
진행중인 트랜잭션이 있는 경우 해당 트랜잭션 사용
트랜잭션이 없으면 새로운 트랜잭션 생성
디폴트 값
- MANDATORY : 트랜잭션 필요,
진행중인 트랜잭션이 없는 경우 예외 발생
- REQUIRES_NEW : 항상 새로운 트랜잭션 생성
- SUPPORTS : 트랜잭션 필요 없음
- NOT_SUPPORTED : 트랜잭션 필요 없음
- NEVER : 트랜잭션 필요 없음
진행중인 트랜잭션이 있는 경우 예외 발생
@Transactional(propagation = Propagation.REQUIRED)
'Web > Spring' 카테고리의 다른 글
Spring(10) - Maven & Spring (0) | 2022.01.29 |
---|---|
Spring(9) - Spring Annotation (0) | 2022.01.29 |
Spring(7) - MyBatis Framework (0) | 2022.01.29 |
Spring(6) - Spring MVC (0) | 2022.01.29 |
Spring(4) - IoC와 DI (0) | 2022.01.29 |
댓글