티스토리 뷰
트랜잭션(Transaction)
- 쪼갤 수 없는 하나의 작업 단위
- 서비스 객체(=비즈니스 로직)는 하나의 트랜잭션으로 동작한다.
트랜잭션의 특징
1. 원자성 : 전체가 성공하거나 전체가 실패하는 것을 의미
2. 일관성 : 트랜잭션이 진행되는 동안 데이터가 변경 되더라도 처음에 트랜잭션을 진행할 때 참조한 데이터로 진행된다.
3. 독립성 : 하나의 특정 트랜잭션이 완료될때까지 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없다.
4. 지속성 : 트랜잭션이 완료되었을 경우 영구적으로 반영되어야 한다.
Spring에서 트랜잭션 사용
1. pom.xml에 라이브러리 추가
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
2. web.xml에 ContextLoaderListener가 실행될 때 ApplicationConfig을 참조하도록 설정한다. (DBConfig은 ApplicationConfig에 Import되어 있음)
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>패키지명.config.ApplicationConfig
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
3. TransactionManagementConfigurer를 상속 받는 DBConfig 파일 생성한 다음 @EnableTransactionManagement 등록
@Configuration
@EnableTransactionManagement
public class DBConfig implements TransactionManagementConfigurer {
// 생략...
@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
return transactionManger();
}
@Bean
public PlatformTransactionManager transactionManger() {
return new DataSourceTransactionManager(dataSource());
}
}
4. 비즈니스 로직에 @Transactional을 등록한다. 기본값이 readOnly=true로 설정되어 있어서 조회를 처리할 때는 그냥 사용하고 다른 처리를 할 때는 @Transactional(readOnly=false)를 사용한다.
@Override
@Transactional
public List<Data> getData() {
...
}
참조
예제 소스 - github.com/seogineer/guestbook
'Framework > Spring' 카테고리의 다른 글
브라우저 net::ERR_CONTENT_LENGTH_MISMATCH 200 (0) | 2021.02.03 |
---|---|
Spring session으로 로그인 기능 구현 (0) | 2021.01.26 |
페이징 처리 (0) | 2021.01.07 |
Spring MVC 실행 과정 및 Controller 작성 (0) | 2021.01.06 |
Spring MVC 설정 (0) | 2021.01.06 |
댓글