반응형
[Spring] 트랜잭션
service의 메소드가 하나의 mapper메소드(쿼리)만 사용한다면 예외 발생 후에 DB에는 변화가 없다.
하지만 하나의 트랜잭션이 여러 개의 mapper메소드(쿼리)를 순차적으로 실행 후 문제 발생 시 성공한 쿼리문만 반영되어 다시 직접 복구해야하는 문제가 발생한다.
이러한 문제를 막기 위해 스프링에서는 @Transactional 어노테이션을 사용하여 한개의 트랜잭션에 문제가 발생하였을 때 rollback을 통해 전체 트랜잭션이 모두 DB에 반영되지 못하도록 막아준다.
@Transactional
@Override
public int remove(Long rno) {
log.info("remove........."+rno);
board_mapper.updateReplyCnt(mapper.read(rno).getBno(), -1);
return mapper.delete(rno);
}
위 코드의 경우 updateReplyCnt, read, delete 세가지 메소드를 이용한다.
각각의 메소드가 모두 DB데이터를 update, delete하기 때문에 중간에 하나의 쿼리가 실패한다면 그 뒤의 쿼리는 실행되지않아 문제가 생긴다.
이 때 @Transactional 어노테이션 하나만으로 중간의 쿼리가 실패하였을 때 다시 해당 service 메소드를 실행하기 이전 상태로 rollback해준다.
반응형
'Java & Kotlin > Spring' 카테고리의 다른 글
[Spring] Validation을 이용해 검증하기 (0) | 2022.05.29 |
---|---|
[Spring] IDE에서 잘 접근되던 페이지가 서버에서는 접속되지 않을 때 (0) | 2022.04.30 |
[Spring] 파일첨부 (0) | 2021.05.28 |
[Spring] AOP (0) | 2021.05.26 |
[Spring] REST Controller 댓글 기능 Rest방식 구현 (0) | 2021.05.23 |
[Spring] 게시판 프로젝트 (2) (0) | 2021.05.23 |