Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- array
- 암호화
- html
- select
- Java
- eGov
- TO_DATE
- 배열
- 함수
- 태그
- was
- Database
- 과정평가형
- input
- JVM
- jQuery
- spring
- eGovFramework
- CSS
- Oracle
- sql
- Ajax
- 개념
- 오류
- POI
- controller
- mybatis
- javascript
- json
- web.xml
Archives
- Today
- Total
web developer
[egov] 트랜잭션 처리방식2 - Declarative Transaction Management 본문
Framework/Egovframework [spring]
[egov] 트랜잭션 처리방식2 - Declarative Transaction Management
trueman 2024. 9. 13. 00:22728x90
728x90
Declarative Transaction Management
1-1. 정의
Spring 프레임워크의 트랜잭션 관리 기능을 활용하여 트랜잭션을 선언적으로 관리하는 방법입니다. 이를 통해 개발자는 코드 내에서 직접 트랜잭션 경계를 설정하지 않고, 애노테이션을 사용하여 트랜잭션을 설정할 수 있습니다.
1-2. 애노테이션 기반 트랜잭션 관리의 기본 개념
- 애노테이션 사용:
- @Transactional 애노테이션을 메서드 또는 클래스에 붙여서 트랜잭션을 설정합니다.
- 이 애노테이션은 Spring의 PlatformTransactionManager를 사용하여 트랜잭션을 관리합니다.
- 자동 트랜잭션 처리:
- @Transactional 애노테이션을 사용하면, 트랜잭션의 시작, 커밋, 롤백을 Spring이 자동으로 처리합니다.
- 애노테이션의 속성을 통해 트랜잭션의 격리 수준, 전파 행동, 타임아웃 등을 설정할 수 있습니다.
1-3. 주요 애노테이션 속성
- propagation: 트랜잭션 전파 행동을 정의합니다. 기본값은 Propagation.REQUIRED입니다.
- REQUIRED: 현재 트랜잭션이 존재하면 그 트랜잭션을 사용하고, 없으면 새로운 트랜잭션을 생성합니다.
- REQUIRES_NEW: 항상 새로운 트랜잭션을 생성합니다. 기존 트랜잭션은 중단됩니다.
- SUPPORTS: 현재 트랜잭션이 존재하면 그 트랜잭션을 사용하고, 없으면 트랜잭션 없이 실행됩니다.
- NOT_SUPPORTED: 트랜잭션을 사용하지 않고 실행합니다.
- MANDATORY: 현재 트랜잭션이 반드시 존재해야 하며, 없으면 예외를 발생시킵니다.
- NEVER: 트랜잭션 없이 실행하며, 현재 트랜잭션이 존재하면 예외를 발생시킵니다.
- NESTED: 중첩 트랜잭션을 지원합니다. 내부 트랜잭션이 커밋되면 외부 트랜잭션이 커밋됩니다.
- isolation: 트랜잭션의 격리 수준을 설정합니다. 기본값은 Isolation.DEFAULT입니다.
- DEFAULT: 데이터베이스의 기본 격리 수준을 사용합니다.
- READ_COMMITTED: 커밋된 데이터만 읽을 수 있습니다.
- READ_UNCOMMITTED: 커밋되지 않은 데이터도 읽을 수 있습니다.
- REPEATABLE_READ: 같은 트랜잭션 내에서 동일한 데이터를 여러 번 읽을 때 데이터가 변경되지 않습니다.
- SERIALIZABLE: 가장 높은 격리 수준으로, 트랜잭션 간의 모든 읽기 및 쓰기 작업이 서로 격리됩니다.
- timeout: 트랜잭션의 타임아웃을 설정합니다. 기본값은 -1로, 무제한입니다.
- readOnly: 트랜잭션이 읽기 전용인지 여부를 설정합니다. 기본값은 false입니다.
- rollbackFor: 특정 예외가 발생했을 때 트랜잭션을 롤백합니다.
- noRollbackFor: 특정 예외가 발생해도 트랜잭션을 롤백하지 않습니다.
1-4. 샘플코드
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
@Service
public class SampleService {
@Autowired
private SampleDAO sampleDAO;
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)
public void updateSample(SampleVO vo) throws Exception {
sampleDAO.updateSample(vo);
}
}
- @Transactional 애노테이션:
- Propagation.REQUIRED: 현재 트랜잭션이 존재하면 이를 사용하고, 없으면 새로운 트랜잭션을 시작합니다.
- Isolation.READ_COMMITTED: 커밋된 데이터만 읽을 수 있습니다.
- rollbackFor = Exception.class: 모든 예외가 발생하면 트랜잭션을 롤백합니다. - updateSample 메서드가 호출되면 Spring은 자동으로 트랜잭션을 시작합니다. 메서드가 성공적으로 실행되면 트랜잭션이 커밋되고, 예외가 발생하면 롤백됩니다.
728x90
728x90
'Framework > Egovframework [spring]' 카테고리의 다른 글
[egov] 트랜잭션 처리방식1 - Programmatic Transaction Management (1) | 2024.09.13 |
---|---|
[egov] 트랜잭션 관리 (1) | 2024.09.12 |
[egov] 트랜잭션 서비스 (2) | 2024.09.12 |
[egov] egovFramework 페이지네이션 기능 (5) | 2024.08.13 |
[egov] dispacther-servlet.xml / 로그인 체크 Interceptors 설정 (2) | 2024.05.28 |