인프런 커뮤니티 질문&답변
회사일중에 딱 이런상황에 마주쳐서 질문드립니다.
작성
·
376
0
이번 강의에서 내부메소드를 사용할 경우 그 메소드를 클래스로 만들어서 실행하게되면 AOP가 적용된다고 알려주셔서 실제 일하는곳에서 한번 적용을 해보았습니다.
[컨트롤러 - consultSave]
컨트롤러에서 insertConsult를 합니다.

[서비스 - ConsultService]
원래 서비스클래스안에 4개의 로직이 있었으나 Transactional이 적용되지 않아서 각각의 로직을 클래스로 만들어서 적용하였습니다.


[분리된 서비스클래스]
총4개의 분리된 서비스가 있지만, 너무길어질것 같아서 1개의 로직만 업로드하였습니다!! 물론 분리된 서비스는 스프링빈에 등록될 수 있도록 @Service를 붙여놓은 상태입니다.

간략히 정리하여 저의 생각을 말씀드리면 tranSave.insertConsult()메서드를 통하여 저장을 한 후에 그 다음 로직에서 고의적으로 Exception이 발생시키면 @Transactional이 동작하여 rollback이 되어야한다고 생각하는데 rollback이 동작하지 않아 DB에 1개의 로우가 insert되어있는 현상입니다. 클래스를 나누어서 구조변경하였음에도 불구하고 @Transactional이 동작하지 않는 이유가 궁금합니다.
혹시 try catch문가 연관이 되어있을까요??
답변 1
2






RuntimeException으로 변경하면 롤백이 되고 모든로직을 수행한후에
html파일에서 ajax의 error 로 들어가지않고 success로 들어가게 되는데 왜 error로 빠지지않고 success로 들어가게 될까요??