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 |