-
8. 스프링 트랜잭션개발자 수업/Spring 2022. 1. 4. 22:59
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)
'개발자 수업 > Spring' 카테고리의 다른 글
10. 메이븐과 스프링 (0) 2022.01.07 9. 스프링 어노테이션 (0) 2022.01.04 7. MyBatis Framework 사용 (수정중) (0) 2021.12.31 6. Spring MVC (0) 2021.12.30 5. AOP (0) 2021.12.29