선언적 트랜잭션
설정 파일 or 어노테이션 방식으로 간편하게 트갠객션에 관한 행위를 정의하는 것임.
트랜잭션이란?
데이터베이스 관리 시스템 or 유사한 시스템에서 상호작용하는 단위.
여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미.
데이터의 정합성을 보장하기 위해 고안된 방법.
A - Atomicity 원자성
C - Consistency 일관성
I - Isolation 독립성
D - Durability 영구
??????
세상의 이치 ) 아이폰을 사면 돈을 지불해야 함.
근데 아이폰을 들고 나르면 transaction을 어긴거임.
즉, transaction으로 묶는다는게 Autocommit을 없앤다는 거임.
!!!!!!!
목적
오류로부터 복구를 허용하고 데이터베이스를 일관성있게 듀지하는 안정적인 작업 단위를 제공한다.
동시에 접근하는 여러 프로그램 간 격리를 제공한다.
트랜잭션 동기화
connection 오브젝트를 특별한 저장소에 보관해둠.
DAO 의 메소드에서 트랜잭션이 필요할 때,
저장된 connection을 가져다가 사용.
트랜잭션 동기화 저장소
작업 스레드 마다 독립적으로 connection 오브젝트를 저장하고 관리
다중 사용자를 처리하는 서버의 멀티스레드 환경에서도 충돌 x
DB 에서
오류가 발생할 때, 파악하기 용이.
예시 코드
@Transactional
public void updateComment(CommentRequestDto requestDto, Long feedId, Long commentId) {
// Feed와 Comment를 각각 조회
feedRepository.findById(feedId);
Comment comment = commentRepository.findById(commentId)
.orElseThrow(() -> new IllegalArgumentException("Feed user id not found"));
// 댓글 내용 수정
comment.updateComment(requestDto.getComment());
commentRepository.save(comment);
}