[ Spring Boot ] 트랜잭션
[ 트랜잭션 ]
트랜잭션(Transaction)이란, DB의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다.
DB의 상태를 변화시킨다는 것은 무얼 의미하는 것일까?
간단하게 말해 SQL문을 이용하여 DB에 접근 하는 것을 의미한다.
ex) CRUD ( insert, select ,update, delete )
기능구현을 위해 DB의 상태를 변화시키는 메서드
즉, 수행되는 하나의 작업 단위가 트랜잭션 인 것이다
트랜잭션의 사용위치는 Service 클래스이다
Service 클래스에서 boardDAO와 memberDAO를 사용할 것인데
boardDAO.insert
+ memberDAO.update ( 작성한 글 갯수 +1 )
두가지 로직을 사용한다고 가정해 보자
ex)
트랜잭션 {
BoardDAO.insert()
memberDAO.update()
}
여러개의 dao.메서드()가 하나의 트랜잭션으로 처리한다
트랜잭션을 위한 객체를 생성한다
PlatformTransactionManager txManager
TransactionDefinition txdefinition
첫번째 insert가 글작성
두번째 insert가 글작성횟수 +1
로직이라고 가정해보자
트랜잭션 없이 사용했을 경우
첫번째 insert가 실행은 됐으나 이후 오류가 발생하여
두번째 insert를 실행하지 않고 catch() 로 들어가고 return 0을 해준다
이렇게 된다면 첫번째 insert를 실행이 완료된 상태가 된다
결제로직이라고 생각했을경우, 결제는 됐으나 아이템을 못받은 상황인 것
41번라인 TransactionStatus 트랜잭션 객체를 생성한 위치부터
52번라인 commit() 전까지 의 범위를 알아서 체크해줌
이와 같이 트랜잭션을 이용했을 경우
첫번째 insert이후 에러가 발생하더라도 catch()에서 rollback()을 이용하여
첫번째 insert 로직을 실행전으로 rollback 시켜준다
글쓰기 로직이였다면 글쓴것이 DB에 저장되지않고 다시 롤백 된다
트랜잭션 객체를 이용하여 에러없이 진행해야 commit하여 로직을 완료하고
에러가 발생했을경우 rollback을 사용하여 문제해결을 할 수 있게 된다!