공부/Spring

@Transactional

sesam 2024. 6. 1. 16:02
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 이해하기

ACID : 원자성, 일관성, 독립성, 지속성