728x90
//게시판의 게시글을 삭제하는 메서드
@Transactional
public void removeBoard(Long id)throws Exception{
replyDAO.removeAll(id); //삭제할 게시글의 답글 삭제
boardDAO.deleteBoard(id); //게시글 삭제
}
💡 @Transactional 애너테이션
메서드 또는 클래스가 트랜잭션 내에서 실행되어야 함을 나타내는 데 사용된다.
💡 트랙잭션?
데이터베이스 작업의 원자성을 보장하며, 작업이 성공하면 커밋되고 실패하면 롤백된다.
이렇게 함으로써 데이터 일관성을 유지할 수 있다.동시 접근하는 여러 프로그램 간 격리를 제공한다
이론적으로 데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability)을 보장한다. 이 성질을 첫글자를 따 ACID라 부른다.
ACID
- 원자성(Atomicity)
한 트랜잭션 내에서 실행한 작업들은 하나의 단위로 처리
모두 성공하거나 모두 실패
- 일관성(Consistency)
트랜잭션은 일관성 있는 데이터베이스 상태를 유지
- 격리성(Isolation)
동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리
- 영속성(Durability)
트랜잭션을 성공적으로 마치면 결과가 항상 저장
💡 일관성?
은행 계좌 이체 예시:
상황: 사용자 A가 사용자 B에게 100달러를 이체하려고 합니다. 이 작업은 두 단계로 이루어집니다:
● 사용자 A의 계좌에서 100달러를 출금합니다.
● 사용자 B의 계좌에 100달러를 입금합니다.
트랜잭션 내에서: 이 두 작업은 하나의 트랜잭션으로 묶입니다. 트랜잭션이 시작되면 두 작업이 모두 성공적으로 완료되거나, 둘 중 하나라도 실패하면 전체 트랜잭션이 롤백(취소)됩니다.
일관성 유지:
성공적인 트랜잭션: 사용자 A의 계좌에서 100달러가 출금되고, 사용자 B의 계좌에 100달러가 입금됩니다. 트랜잭션이 커밋되면 데이터베이스는 일관성 있는 상태로 유지됩니다.
실패한 트랜잭션: 만약 두 번째 단계(입금)에서 오류가 발생하면, 첫 번째 단계(출금)도 롤백됩니다.
참고링크
[Spring] @Transactional 잘 사용해보기
[Spring] 📚 @Transactional 이해하기
'공부 > Spring' 카테고리의 다른 글
@NotFound (0) | 2024.11.20 |
---|---|
JPA 연관관계 정리 (0) | 2024.07.26 |
@Slf4j - Log Level (0) | 2024.01.20 |
@JsonInclude(JsonInclude.Include.NON_NULL) (0) | 2024.01.19 |
[Spring] 빈 스코프 - 웹 스코프 (2) | 2024.01.09 |