개발_기초 정보

[spring] 트랜잭션 설정하기

메타듀 2023. 2. 21. 11:26
728x90
반응형

Test

2개 이상의 테이블에 insert 작업을 하나의 '트랜잭션'이라고 가정하고 트랜잭션 설정이 없는 경우와 있는 경우를 비교 해보자!

두 작업 중 하나의 작업이 오류가 나게 되는 상황을 만들어 보았다.

text 길이를 50 정도로 짧게 잡은 테이블과 길이를 길게 잡은 테이블 두 곳에에 긴 텍스트를 insert하려고 하는 상황!


오류가 날 수 밖에 없는 경우를 만들었다.

이때,
트랜잭션 설정을 잡지 않은 경우에는

)

오류가 남에도 불구하고 한 테이블에는 정상적으로 들어가는 일이 발생한다.

트랜잭션 설정을 작은 경우에는

)

정상적으로 두 테이블 다 insert 되지 않는다.
혹시나 DB정보의 오류가 생길 수 있으므로 트랜잭션 설정은 반드시 필요하다!

트랜잭션 설정

root-control.xml

    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
  • 다음 3가지 방법 중 하나를 사용한다.
  1. 메서드의 @Transactional
    a. 가장 우선 순위인 설정
    b. 디테일 하게 잡는다.
  2. @Service @RequiredArgsConstructor @Transactional public class TimeServiceImpl implements TimeService{ private final TimeMapper timeMapper; @Override public void insertAll(String text){ timeMapper.insertA(text); timeMapper.insertB(text); } }
  1. 클래스의 @Transactional
@Service
@RequiredArgsConstructor
public class TimeServiceImpl implements TimeService{

    private final TimeMapper timeMapper;

    @Transactional
    @Override
    public void insertAll(String text){
        timeMapper.insertA(text);
        timeMapper.insertB(text);

    }
}
  1. 인터페이스의 @Transactional
    a. 가장 낮은 순위
    b. 가장 느슨하게 잡는다.
@Transactional
public interface BoardService {

    ListResponseDTO<BoardDTO> getList(ListDTO listDTO);
반응형