티스토리 뷰

Framework/Spring

트랜잭션(Transaction)

Seogineer 2021. 1. 10. 00:50

트랜잭션(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

www.boostcourse.org/web316/lecture/16767

'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
댓글
Total
Today
Yesterday
링크
Apple 2023 맥북 프로 14 M3, 스페이스 그레이, M3 8코어, 10코어 GPU, 512GB, 8GB, 한글