728x90
1. 트랜잭션 기능
스프링은 트랜잭션 기능을 마이바티스 기능과 연동해서 사용한다.
트랜잭션 기능은 XML파일에서 설정하는 방법과 애너테이션을 이용하는 방법이 있다.
트랜잭션(Transaction)이란?
여러 개의 DML 명령문을 하나의 논리적인 작업 단위로 묶어서 관리하는 것으로, All 또는 Nothing방식으로 작업 단위가 처리된다.
즉, SQL 명령문들이 모두 정상적으로 처리되면 모든 작업의 결과를 데이터베이스에 Commit하지만, 하나라도 잘못된 것이 있다면 모두 rollback한다
보통 웹 애플리케이션에서 묶어서 처리하는 단위 기능은 다음과 같다
- 게시판 글 조회 시 해당 글을 조회하는 기능과 조회 수를 갱신하는 기능
- 쇼핑몰에서 상품 주문시 주문 상품을 테이블에 등록하는 기능과 주문자의 포인트를 갱신하는 기능
- 은행에서 송금시 송금자의 잔고를 갱신하는 기능과 수신자의 잔고를 갱신하는 기능
2. 스프링의 트랜잭션 속성 알아보기
스프링의 여러가지 트랜잭션 속성들
속성 | 값 |
propagation | 트랜잭션 전파규칙. Propagation Enum의 값으로 설정 |
isolation | 트랜잭션 격리레벨. Isolation Enum의 값으로 설정 |
readOnly | 읽기 전용 여부. boolean(기본 : false) |
rollbackFor | 롤백할 예외타입 설정. Class 배열(rollbackFor={XX.class} |
noRollbackFor | 롤백하지 않을 예외타입 설정. Class 배열 |
timeout | 트랜잭션 타임아웃 시간 설정. 정수 초 |
propagation 속성이 가지는 값
사용값 | 설명 |
REQUIRED | 디폴트 속성. 기존 트랜잭션있으면 참여 없으면 새로 시작 |
SUPPORTS | 기존 트랜잭션있으면 참여 없으면 TX 없이 진행 |
MANDATORY | 기존 트랜잭션있으면 참여 없으면 예외 발생 |
REQUIRES_NEW | 항상 새로운 트랜잭션 시작. 기존 트랜잭션는 잠시 보류 시킨다 |
NOT_SUPPORTED | 트랜잭션을 사용하지 않는다. 기존 트랜잭션는 잠시 보류 시킨다 |
NEVER | 트랜잭션 사용하지 않게 강제. 기존 트랜잭션있으면 예외 발생 |
NESTED | 트랜잭션 필요, 진행 중인 트랜잭션이 있는 경우 중첩된 메서드 실행 |
isolation 속성이 가지는 값
사용값 | 설명 |
DEFAULT | DB의 디폴트 설정을 따른다. 일반적으로 READ_COMMITED가 디폴트인 경우가 많음 |
READ_COMMITED | Commit 되지 않은 Data(Row)는 다른 트랜잭션이 읽을 수 없다 Select 중인 Data들(Row들)를 다른 트랜잭션이 수정할 수 있다. |
READ_UNCOMMITED | 처리중인 Data들(Row들)가 commit 되지 않아도 다른 트랜잭션이 읽을 수있다. |
REPEATABLE_READ | Select 중인 Data(Row)를 다른 트랜잭션이 수정할 수없다. 새로운 ROW를 추가할 수는 있다. |
SERIALIZABLE | 여러 트랜잭션이 동시에 같은 TABLE에 접근하지 못한다. |
참고 : ⌜자바 웹을 다루는 기술⌟ 책을 공부하며 요약・정리한 내용입니다.
728x90
'💻 Web_Back end > Spring' 카테고리의 다른 글
log4j란? (0) | 2023.05.27 |
---|---|
스프링 애너테이션 기능 (0) | 2023.05.22 |
스프링 JDBC 기능 (0) | 2023.05.16 |
스프링 MVC 기능 (0) | 2023.05.07 |
스프링 AOP (Aspect-Oriented Programming) 관점 지향 프로그래밍 기능 (0) | 2023.05.07 |