티스토리 뷰

반응형

CHAPTER19. 스프링에서 트랜잭션 관리

트랜잭션 : 비즈니스에서 쪼개질 수 없는 하나의 작업 단위를 말함. '한 번에 이루어지는 작업의 단위'를 트랜잭션으로 간주함

트랜잭션의 성격 : ACID 원칙

 

ex) 트랜잭션의 예제 : 계좌이체는 '출금'과 '입금'이라는 각각의 거래가 하나의 단위를 이루게 됨

'트랜잭션으로 관리한다' 혹은 '트랜잭션으로 묶는다'는 것은 &&(AND)와 같은 상황이라고 보면 됨

=> 스프링은 트랜잭션 처리를 간단하게 XML이나 어노테이션으로 처리함

 

19.1 데이터베이스 설계와 트랜잭션 처리

 

정규화 : 테이블 간에 중복된 데이터를 허용하지 않는다는 것

- 정규화가 잘 되었거나, 규칙이 잘 반영된 데이터베이스의 설계에서는 '트랜잭션'이 많이 일어나지 않음. 정규화가 진행될수록 테이블은 순수한 형태가 되어감.

-순수한 형태일 수록 '트랜잭션의 처리'의 대상에서 멀어짐

- 정규화가 진행될수록 테이블은 간결해지지만 쿼리 등을 이용해서 필요한 데이터를 가져오는 입장에서는 불편해짐 

- 현재 상황을 알기 위해서 단순 조회가 아닌 직접 조인이나 서브쿼리를 이용해서 처리해야 하기 때문

- 조인이나 서브쿼리를 이용하게 되면 다시 성능 이슈가 발생할 수 있음. 매번 계산해야 하는 쿼리의 경우 성능이 저하되기 때문에 많은 양의 데이터를 처리해야 하는 상황에서는 바람직하지 않을 수 있음  => 이러한 경우 '반정규화'를 하게 됨.

- 정규화의 반대이므로 중복이나 계산되는 값을 데이터베이스 상에 보관하고, 대신에 조인이나 서브쿼리의 사용을 줄이는 방식.

 

19.2.5 @Transactional 어노테이션 속성들

 

19.2.6 @Transactional 적용 순서

어노테이션의 우선순위

메서드의 @Transactional 설정  > 클래스의 @Transactional 설정 > 인터페이스 @Transactional 설정

인터페이스에는 가장 기준이 되는 @Transactional과 같은 설정을 지정하고, 클래스나 메서드에 필요한 어노테이션을 처리하는 것이 좋음!!

 

반응형
댓글