본문 바로가기

Spring

Spring - 트랜잭션 기능

Spring은 트랜잭션 기능을 마이바티스와 연동하여 사용된다.

트랜잭션 기능은 XML 파일에서 설정하는 방법과, 애너테이션을 이용하는 방법이 있다.

트랜잭션(Transaction)은 여러개의 DML 명령문을 하나의 논리적인 작업 단위로 묶어서 관리하는것으로 All 또는 Nothing 방식으로 작업 단위가 처리된다.

  • SQL명령문들이 모두 정상적으로 처리 되었다면 모든 작업의 결과를 데이터베이스에 영구 반영(Commit) 하지만 그 중 하나라도 잘못된것이 있다면 모두 취소(rollback) 한다.
  • 트랜잭션은 각 단위 기능 수행 시 이와 관련된 데이터베이스 연동 작업을 한꺼번에 묶어서 관리한다는 개념이다.

- 스프링 트랜잭션 속성 -

속성 기능
propagation 트랜잭션 전파 규칙 설정
isolation 트랜잭션 격리 레벨 설정
readOnly 읽기 전용 여부 설정
rollbackFor 트랜잭션을 롤백(rollback)할 예외 타입 설정
norollbackFor 트랜잭션을 롤백하지 않을 예외 타입 설정
timeout 트랜잭션 타임아웃 시간 설정

- propagation 속성 값 -

의미
REQUIRED - 트랜잭션 필요, 진행 중인 트랜잭션이 있는 경우 해당 트랜잭션 사용
- 트랜잭션이 없으면 새로운 트랜잭션 생성, 디폴트 값
MANDATORY - 트랜잭션 필요
- 진행 중인 트랜잭션이 없는 경우 예외 발생
REQUIRED_NEW - 항상 새로운 트랜잭션 생성
- 진행 중인 트랜잭션이 있는 경우 기존 트랜잭션을 일시 중지시킨 후 새로운 트랜잭션 시작
- 새로 시작된 트랜잭션이 종료되면 기존 트랜잭션 계속 진행
SUPPORTS - 트랜잭션 필요 없음
- 진행 중인 트랜잭션이 있는 경우 해당 트랜잭션 사용
NOT_SUPPORTED - 트랜잭션 필요 없음
- 진행 중인 트랜잭션이 있는 경우 기존 트랜잭션을 일시 중지 시킨 후 메서드 실행
- 메서드 실행이 종료되면 기존 트랜잭션 계속 진행
NEVER - 트랜잭션 필요 없음
- 진행 중인 트랜잭션이 있는 경우 예외 발생
NESTED - 트랜잭션 필요
- 진행 중인 트랜잭션이 있는 경우 기존 트랜잭션에 중첩된 트랜잭션에서 메서드 실행
- 트랜잭션이 없으면 새로운 트랜잭션 생성

- isolation 속성 값-

속성 기능
DEFAULT - 데이터 베이스에서 제공하는 기본 설정 사용
READ_UNCOMMITED - 다른 트랜잭션에서 커밋하지 않은 데이터 읽기 가능
READ_COMMITED - 커밋한 데이터만 읽기 가능
REPEATABLE_READ - 현재 트랜잭션에서 데이터를 수정하지 않았다면 처음 읽어온 데이터와 두번째 읽어온 데이터가 동일
SERIALIZABLE - 같은 데이터에 대해 한개의 트랜잭션만 수행 가능

 

'Spring' 카테고리의 다른 글

@RequestParam 어노테이션  (0) 2021.12.02
Spring 애너테이션  (0) 2021.12.01
Mybatis - HashMap을 이용한 모든 회원 정보 조회  (0) 2021.11.23
Mybatis 이용한 회원정보 CRUD 실습  (0) 2021.11.22
Spring - Mybatis  (0) 2021.11.22