@Transactional

chrkb1569·2022년 7월 13일
0

Spring

목록 보기
1/11

2주차에서 배운 내용을 복습하던 도중, 모르는 어노테이션이 나와서 알아보았습니다.

이제까지 스프링들의 어노테이션을 살펴보면서 느낀건데, 어노테이션들이 단어와 연관된 기능을 수행한다고 느꼈습니다.

그래서 단어의 뜻으로 살짝 유추해보면 거래라는 의미의 Transaction 과 연관되어 있을 것이라고 생각할 수 있습니다.

MySQL에서 활용되는 Transaction과 비슷하다고 생각할 수 있는데, 시작부터 마무리까지 성공적으로 수행되어야 완벽한 거래라고 할 수 있는 것처럼, 시스템의 처리 역시 처음부터 끝까지 오류가 발생하지 않아야 성공적인 시스템의 처리라고 할 수 있습니다.

즉, @Transactional 어노테이션이 선언된 메소드의 경우, 메소드를 수행하던 도중 오류가 발생한다면, 메소드를 수행하기 이전 상태로 다시 되돌리는 기능을 수행한다고 합니다.

@Transactional은 괄호를 통하여 추가적인 기능을 부여할 수 있는데, @Transactional(readOnly = true)를 통하여 데이터의 조회만 가능하게끔 설정해줍니다.

이러한 기능이 왜 필요한가 싶기도 한데, 데이터 베이스에 데이터를 저장해줄 경우, 데이터 베이스는 데이터를 영구적으로 보관하려고 합니다.

데이터를 영구적으로 보관하기 위해서는, 데이터가 변경이 되었다면 데이터의 변경을 빠르게 알아차리고 이러한 변경을 반영해주어야 합니다.

이와 같이, 데이터의 변경을 빠르게 알아차리기 위해서 '스냅샷'을 통하여 중간 중간 데이터의 상태를 확인하는데, 그냥 옛날에 과학 실험하듯이 변화를 관찰하기 위하여 중간 중간 사진 찍는다고 생각하시면 될 것 같습니다.

아무튼, 이러한 스냅샷을 통해 데이터의 변경을 관찰할 수 있는 것은 좋지만, 이게 리소스를 차지하여 데이터 처리 속도가 느려진다는 단점이 존재한다고 합니다.

따라서, 데이터를 조회만 하는 경우에는 어차피 데이터를 변경할 일은 없기 때문에 @Transactional(readOnly = true)로 설정하여 스냅샷을 생성하지 않도록 설정해주어 성능의 향상을 도모할 수 있다고 합니다.

0개의 댓글