Transactional을 공부했던 기억이 나지만 까먹었으므로 다시 공부해보기로 했다.
스프링 프레임워크에서 제공하는 어노테이션으로, 특정 메서드나 클래스에
트랜잭션 관리를 적용하고자 할 때 사용된다.
트랜잭션이란 여러 개의 연산이 모두 성공하거나 모두 실패하는 방식으로
데이터의 일관성을 유지하는 방법이다.
트랜잭션 내의 모든 연산이 성공적으로 완료되거나, 아니면 모두 롤백되어 데이터의 일관성을 유지
데이터베이스를 하나의 일관된 상태에서 다른 일관된 상태로 전환
동시에 실행되는 여러 트랜잭션들이 서로 영향을 미치지 않도록 함
성공적으로 완료된 트랜잭션의 결과는 시스템 장애가 발생하더라도 유지된다.
트랜잭션 관리는 데이터베이스 리소스를 사용하며, 모든 메서드에 트랜잭션을 적용하면 성능 저하가 발생된다.
간단한 작업에 트랜잭션을 적용하면, 코드가 불필요하게 복잡해질 수 있다.
트랜잭션 관리는 커밋, 롤백 등 추가적인 연산을 필요로 하기 때문에 시스템의 오버헤드를 증가시킨다.
시스템이 특정 작업을 수행하는데 필요한 추가적인 자원이나 시간을 나타낸다.
전파 옵션을 잘못 설정하면 예기치 않은 동작이나 데이터 불일치 문제가 발생할 수 있다.
Transactional를 배울 때에는 장점에만 초점을 맞췄는데,
왜 모든 상황에서 쓰이지 않는건지가 궁금해서 단점도 살펴보았다.
장, 단점을 알게 되었으니 적절한 상황에서 사용할 수 있을 것 같다.