kim's cafe에이어 kim's shop을 만드는 도중 치명적인 오류가 있었다
무려 Transactional어노테이션이 먹히지 않았다..
아예 작동하지 않았다 UPDATE문도 던지지 않고..
근데 업데이트야 뭐 sql문을 던지면 되지만
제일 두려운 게 rollback이었다
어노테이션 덕에 rollback을 쉽게 알아서 해주는데
그걸 사용할 수 없게 된 거 같았다..
결론 일단 해결했다
어노테이션 위치가 잘못되어있었다
흐름은 이렇다
프런트(3030)에서 요청->(8080)으로 전달 -> controller->confrimService->senPhone함수-> sendSms함수-> updateconfrim함수
이전에 난 updateconfrim에 어노테이션을 붙여 놓았다
즉 마지막에 SET이 이뤄지는 곳에만 붙여 논 것이다
그런데 senPhone함수에
붙이니 작동되었다
이유는 솔직히 잘 모르겠다
트랜잭션 그 자체에 대해
조금 더 공부를 해야 할 거 같다
service
트랜잭션이 시작되는 제일 위에 함수에만
어노테이션을 붙여놓았다
테스트를 해보자
드디어 update문이 날아간다
숫자도 2로 바뀌었다!
롤백 테스트를 해보자
예를 들어
여기 오기 전 다른 수정이 필요한 데를
들렀다가 온다고 치자
게시판 글 수정 같은 경우 글+제목+사진 등이 바뀌는데
하나라도 오류가 나면 롤백이 되고 알려줘야 한다
그걸 여기서 테스트해보자
테스트로 그냥 이메일을 바꿔주는
로직을 넣어놔 주자 중간에
인증번호 전송과 함께
kim@kim.com4로 바꿔보자
둘 다 제대로 update 됐다
여기서 재밌는 건
코드에서는 userEmail을 먼저 바꾸게 되어있다
하지만 vscode는 제일 마지막 update부터
update문을 던지는 모습을 보여준다
rollbacktest
user->confrim으로 가는 도중
마지막 confrim에서 예외를 발생시켰을 때
rollback이 되는지 확인해보자
모든 저장이 끝난 후
예외를 고의로 일으켜줘 보자!
전역 컨트로러에 설정해주고
메시지가 잘 날아왔다
그렇다면 db는 바뀌었을까??
select 문외에 작동하지 않았다!
이메일 부분을 통과했지만
updatecofrim 함수에서 에러가 나서
update문이 가지 않았다!
후아 겨우 다시 사용할 수 있게 되었다 ㅠㅠㅠ
근데 고민이 생겼다
근데 이게 롤백 처리 맞겠지..?
혹시 update문이 날아가고
다시 취소돼야 하는 게 vscode에 올라와야 하는 건가..?
라는 고민이다...
'Springboot > 예외처리' 카테고리의 다른 글
Springboot 예외처리하기 (0) | 2022.03.17 |
---|---|
Springboot 예외처리! with IllegalArgumentException (0) | 2021.08.16 |
Springboot 예외처리및응답하기!(2) with @Transactional And @Transactional(rollbackFor = {Exception.class}) (0) | 2021.06.27 |