스프링의 @Transactional 어노테이션을 사용해보신 적이 있나요?
아시는 분들도 계시겠지만 이 어노테이션은 트랜잭션에 대한 관리를 매우 쉽게 해주지만,
반대로 잘못 쓰게 될 경우 큰 재앙(?)을 불러올 수 있습니다.
그만큼 사용하기 전에 동작방식에 대해 잘 알고 사용해야하는데요,
오늘 소개해드릴 블로그에는 스프링 @Transactional 어노테이션의 동작에 빠질 수 없는 개념인 Propagation 과 Isolation Level 에 대해 자세히 정리되어 있습니다.
블로그 내용을 간략하게 설명 드리면 다음과 같습니다.
📌 Propagation
- 트랜잭션의 영역, 바운더리를 지정하는 개념으로 특정 트랜잭션 동작 도중 또다른 트랜잭션을 호출(실행) 하는 상황에서 트랜잭션을 어떻게 동작시킬 것인지 결정할 수 있습니다. (예: 트랜잭션이 적용된 메서드에서 트랜잭션이 적용된 또다른 메서드를 호출했을 경우 어떻게 처리할 것인가를 결정)
- 어떻게 결정하느냐에 따라 호출 당한 트랜잭션 입장에서 호출한 쪽의 트랜잭션을 그대로 사용할 수도 있고, 새롭게 트랜잭션을 생성할 수도 있습니다.
- @Transactional의 propagation 속성을 통해 지정이 가능합니다.
📌 Isolation Level
- 동시 트랜잭션이 수행될때 다른 트랜잭션이 동일한 데이터에 대해서 어떻게 보일지에 대한 범위를 나타내는 개념입니다.
- 만약 트랜잭션이 동시에 수행되지 못하도록 막고 순차적으로 수행하도록 한다면 데이터의 정합성은 유지할 수 있지만 성능이 떨어질 수 있습니다.
- 따라서 여러 트랜잭션들을 동시에 수행시키면서 데이터의 정합성을 유지시킬 수 있는 적절한 격리 수준을 설정하면 성능적인 이점을 얻을 수 있습니다.
공유드린 링크에 Propagation 의 종류와 동작, Isolation Level 종류와 동작에 대해 자세하게 설명되어 있으니
관심있으신 분들께서는 한번 보시면 좋겠습니다.
🔗 원문 링크: https://devocean.sk.com/blog/techBoardDetail.do?ID=163799