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가지 방법 중 하나를 사용한다.
- 메서드의 @Transactional
a. 가장 우선 순위인 설정
b. 디테일 하게 잡는다. @Service @RequiredArgsConstructor @Transactional public class TimeServiceImpl implements TimeService{ private final TimeMapper timeMapper; @Override public void insertAll(String text){ timeMapper.insertA(text); timeMapper.insertB(text); } }
- 클래스의 @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);
}
}
- 인터페이스의 @Transactional
a. 가장 낮은 순위
b. 가장 느슨하게 잡는다.
@Transactional
public interface BoardService {
ListResponseDTO<BoardDTO> getList(ListDTO listDTO);
반응형
'개발_기초 정보' 카테고리의 다른 글
마크 다운 사용법 (1) | 2023.02.24 |
---|---|
[Servlet] 파일 업로드 (0) | 2023.02.21 |
[Nginx] Nginx로 서버 설정하기 (0) | 2023.02.21 |
[spring] 스프링 빈 조회 할 때 빈이 2개 여러 개 일 경우 (0) | 2023.02.21 |
[mybatis-spring] mapper 세팅하기 (0) | 2023.02.21 |