카테고리 보관물: SPRING

Spring Transactional

PROPAGATION Behavior

Propagation Behavior(전달 행위)는 Transaction 전파 규칙을 정의 하기 위해 사용된다.

Attribute Name Description
PROPAGATION_MADATORY 반드시 Transaction 내에서 메소드가 실행되어야 하고, Transaction이 없는 경우에는 예외를 발생시킨다.
PROPAGATION_NESTED Transaction에 있는 경우, 기존 Transaction 내의 nested transaction 형태로 메소드를 실행하고, nested transaction 자체적으로 commit, rollback이 가능하다.
Transaction이 없는 경우, PROPAGATION_REQUIRED 속성으로 행동한다.
PROPAGATION_NEVER Transaction 컨텍스트 없이 실행되어야 하며 Transaction이 있으면 예외를 발생시킨다.
PROPAGATION_NOT_SUPPORTED Transaction 없이 메소드를 실행하며, 기존의 Transaction이 있는 경우에는 이 Transaction을 호출된 메소드가 끝날 때까지 잠시 보류한다.
PROPAGATION_REQUIRED Transaction 컨텍스트 내에서 메소드가 실행되어야 한다.
기존 Transaction이 있는 경우에는 기존 Transaction 내에서 실행하고, 기존 Transaction이 없는 경우에는 새로운 Transaction을 생성한다.
PROPAGATION_REQUIRED_NEW 호출되는 메소드는 자신 만의 Transaction을 가지고 실행하고, 기존의 Transaction들은 보류된다.
PROPAGATION_SUPPORTS 새로운 Transaction을 필요로 하지는 않지만, 기존의 Transaction이 있는 경우에는 Transaction 내에서 메소드를 실행한다.

ISOLATION Level

Isolation Level(격리수준)은 각 Transaction의 상태에 따른 데이타 접속에 대한 수준을 지정해준다.
예를 들어, 한 사용자가 어떠한 데이터를 수정하고 있는 경우 다른 사용자들이 그 데이터에 접근하는 것을 차단함으로써 완전한 데이터만을 사용자들에게 제공한게 된다.
또한, 많은 사용자들의 수정 작업으로 인하여 통계 자료를 작성할 수 없는 사용자를 위하여 읽기 작업을 수행할 수 있도록 Isolation Level을 변경할 수 있다.

Attribute Name Description
ISOLATION_DEFAULT 개별적인 PlatformTransactionManager를 위한 디폴트 격리 레벨
ISOLATION_READ_COMMITED 이 격리수준을 사용하는 메소드는 commit 되지 않은 데이터를 읽을 수 없다. 쓰기 락은 다른 Transaction에 의해 이미 변경된 데이터는 얻을 수 없다.
따라서 조회 중인 commit 되지 않은 데이터는 불가능하다. 대개의 데이터베이스에서의 디폴트로 지원하는 격리수준이다.
ISOLATION_READ_UNCOMMITED 가장 낮은 Transaction 수준이다. 이 격리수준을 사용하는 메소드는 commit 되지 않은 데이터를 읽을 수 있다. 그러나 이 격리수준은 새로운 레코드가 추가되었는지 알 수 없다.
ISOLATION_REPEATABLE_READ ISOLATION_READ_COMMITED 보다는 다소 조금 더 엄격한 격리 수준이다. 이 격리 수준은 다른 Transaction이 새로운 데이터를 입력했다면, 새롭게 입력된 데이터를 조회할 수 있다는 것을 의미한다.
ISOLATION_SERIALIZABLE 가장 높은 격리수준이다. 모든 Transaction(조회를 포함하여)은 각 라인이 실행될 때마다 기다려야 하기 때문에 매우 느리다.
이 격리수준을 사용하는 메소드는 데이터 상에 베타적 쓰기를 락을 얻음으로써 Transaction이 종료될 때까지 조회, 수정, 입력 데이터로부터 다른 Transaction의 처리를 막는다. 가장 많은 비용이 들지만 신뢰할만한 격리 수준을 제공하는 것이 가능하다.

SpringQuartz 스케쥴링 시간지정 방법

SpringQuartzSpring Framework안에서 @Scheduled 어노테이션을 통해서 Quartz에서 제공하는 cron schedule 기능을 활용하게 해주는 라이브러리.

시간지정 구조

초 분 시 일 월 요일 년도(옵션)

예제

  • 매일 오전 9시에 수행 : 0 0 9 * * ?
  • 매월 10일 오전 9시에 수행 : 0 0 9 10 * ?
  • 매주 일요일 오전 9시에 수행 : 0 0 9 ? * 1
  • 매월 두번째 일요일 오전 9시에 수행 : 0 0 9 ? * 1#2
    • [실행할 요일] # [N번째]
  • 매시간 10분 간격으로 수행 : 0 10 * * * ?
  • 매분 0초, 30초에 수행 : 0/30 * * * * ?
필드명 허용값 허용 특수키 비고
0-59 , - * /
0-59 , - * /
0-23 , - * /
1-31 , - * ? / LW L : 월 중 마지막 일자
W : 작업요일(월-금)
1-12 또는 JAN-DEC , - * /
요일 1-7 또는 SUN-SAT , - * ? / L# # : “6#3” = 월 중 3번째 금요일
년도 빈칸 또는 1970-2099 , - * /