DB에 접근하기 위해서 트랜잭션은 필수적이다.

그 이유는 예를 들어 한 행을 삽입하는데 그에 대한 각각의 테이블에 각각의 행들이 삽입이 되어 지는 경우를 생각해보자.

만약 한 행이 삽입되는 중 error를 뱉어 낸다면, 처음부터 그 중간점부터 행을 삽입 할 수 없으므로 처음부터 다시 실행해야한다.

하지만 이미 어느 테이블에는 데이터가 들어가 있을 것이고,

어느 테이블에는 데이터가 들어가있지 않게 되므로 데이터 관계의 오류가 생기게된다.

따라서 이 쿼리문들은 하나의 쿼리문 처럼 실행이 되어야한다.

성공하면 전체가 성공(commit)해야하고 실패하면 전체가 실패(rollback) 해야한다.


이를 위해서 트랜잭션이 필요하다.


트랜잭션을 이용한 방법은 aop를 이용한 방법과 @Transactional을 이용한 방법 2가지가 존재한다.

여기서는 @Transactional을 이용한 방법에 대해 알아보도록 하자.


사용방법은 아래와 같다


1. context에

xmlns:tx="http://www.springframework.org/schema/tx" 추가한다.


2. context에

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     <property name="dataSource" ref="dataSource"/>
</bean>

을 추가하여 transaction을 관리하기 위한 bean을 선언을 한다.


그 후 <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
 를 추가 하여 @Transactioal annotaion 한 곳을 찾는다.


3. 원하는 메소드, 클래스에 @Transactional 어노테이션 추가한다.


예를 들어보자

게시판에서 하나의 글이 삭제된다면, 관련 댓글, 첨부파일이 함께 삭제되어야 한다.

따라서 아래와 같이 작성해 주었다.


@Transactional
@Override
public void DeleteBoard(int cd_post) throws Exception {
    // TODO Auto-generated method stub
    sampleDao.DeleteBoard(cd_post);
    sampleDao.DeleteFile(cd_post);
    commentDao.DeleteCommentAll(cd_post);
}


'Programming > Spring' 카테고리의 다른 글

스프링 컨테이너?  (0) 2018.05.14
POJO  (0) 2018.05.14
AspectJ Aop설정방법  (0) 2018.05.14
spring 사용이유?  (0) 2018.05.14
event.preventDefault() / event.stopPropagation()  (0) 2018.05.13

+ Recent posts