inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 핵심 원리 - 고급편

프록시와 내부 호출 - 대안3 구조 변경

회사일중에 딱 이런상황에 마주쳐서 질문드립니다.

381

김은재

작성한 질문수 70

0

이번 강의에서 내부메소드를 사용할 경우 그 메소드를 클래스로 만들어서 실행하게되면 AOP가 적용된다고 알려주셔서 실제 일하는곳에서 한번 적용을 해보았습니다.

[컨트롤러 - consultSave]

컨트롤러에서 insertConsult를 합니다.

[서비스 - ConsultService]

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

[분리된 서비스클래스] 

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

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

혹시 try catch문가 연관이 되어있을까요??

spring 디자인-패턴

답변 1

2

David

안녕하세요. 김은재님, 공식 서포터즈 David입니다.

.
스프링 트랜잭션의 경우 checkedException에서는 예외가 발생하더라도 롤백시키지 않습니다.

발생한 예외가 CheckedException인가요? 그렇다면 RuntimeException을 발생시켜보시겠어요?
.
감사합니다.

0

김은재

RuntimeException으로 변경하면 롤백이 되고 모든로직을 수행한후에

html파일에서 ajax의 error 로 들어가지않고 success로 들어가게 되는데 왜 error로 빠지지않고 success로 들어가게 될까요??

0

David

컨트롤러에서 catch로 예외를 처리해주기 때문인걸로 보입니다.

try-catch문에서 예외가 어떻게 처리되고, 예외가 처리된 이후에 어떤 흐름으로 코드가 진행되는지 학습해보시면 바로 알 수 있으실 거에요.

0

신동훈

조금 늦긴 했지만 rollbackFor이란 옵션을 사용하면 CheckedException도 롤백처리를 하도록 바꿀수 있는걸로 알고있습니다

SpringBoot 4.0.6 버전에서 PackageLogTracePostProcessor exception

0

83

3

어드바이스 순서 디폴트 기준이 궁금합니다.

0

75

1

AspectV1 예제를 @Configuration 수동 등록으로도 가능한가요?

0

102

2

구체 클래스를 상속받아 확장한 형태도 클래스패턴/데코레이터 패턴이라고 칭하나요?

0

73

1

TraceTemplate 을 미리 빈으로 등록해서 사용할때 이렇게 설정하는게 맞는건가요?

0

69

1

Decorator 에서 추상메서드로 뺄때 질문 있습니다.

0

63

1

대상 클래스에 기본 생성자가 없을 때

0

83

1

스프링 부트 버전 4.0 aop 의존성 명칭 변경

1

406

2

final 키워드 사용 관련 질문

0

85

1

안녕하세요

0

75

1

ThradLocal 실무 사례

0

106

2

실무에서의 동시성 문제

0

73

1

로그 등 부가 기능에 대한 테스트코드

0

60

1

ProceedingJoinPoint와 MethodInvocation에 대하여

0

77

1

실무 멀티스레딩에 대한 궁금증

0

81

1

안녕하세요 질문있습니다

0

49

1

AspectV3 aop 실행 순서 문의 드립니다

0

45

1

MDC vs AOP 중에 고민중입니다.

0

85

1

순환참조

0

168

2

this를 단독으로 사용할때랑 파라미터 바인딩 할때 차이

0

83

1

빈 후처리에 등록 질문 있습니다.

0

85

1

AppConfig 설정하는 설명중에 이해가 안되는게 있습니다.

0

98

1

ThreadLocal을 지역변수로 선언하면 remove가 필요할까요?

0

122

2

@Aspect 어노테이션으로 생성된 Advisor의 Bean 저장 여부

0

76

1