inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 핵심 원리 - 고급편

애노테이션 @Transactional의 위치 질문입니다.(AOP 관련)

해결된 질문

622

Sunny

작성한 질문수 8

0

안녕하세요 김영한님!

강의를 다 듣고나서 트랜잭션 AOP의 동작원리를 알 수있게 되어 정말 감사합니다.

다만 제가 궁금한건 애노테이션 @Transactional입니다. 주로 서비스의 메소드에 적용하는데 클래스에도 붙일 수 있더군요.

@Service
@Transactional(readOnly = true)
public class ProductService {

강의에서는 AOP 적용위치는 생성자, 필드 값 접근, static 메서드 접근, 메서드 실행 이라고 말씀하셨는데

저 애노테이션은 AOP와 관련이 없는건가요? 아님 내부적으로 클래스 단위에 붙일 때는 클래스 하위 메소드에도 전부 적용하도록 내부 코드에 설정이 되어있는건가요? (흑흑 강의를 다시 들어야하는 걸까요?)

질문 읽어주셔서 감사합니다!

@Trasactional spring aop 디자인-패턴

답변 1

0

나무늘보

안녕하세요, Sunny 님. 공식 서포터즈 codesweaver 입니다.
.
AOP의 경우 각 서비스들의(컨트롤러, 서비스, 레포지터리 등등의 빈 객체들) 공통적인 관심사를 해결하기 위한 프로그래밍 방법을 말합니다. 강의의 예제처럼 모든 메서드가 호출될 때마다 로그를 남긴다던가 하는 작업이 AOP에서 다루고자 하는 관심사 입니다.

 

트랜잭션은 어떤 일을 하나로 묶은 단위라고 이해하시면 됩니다. 그리고 이렇게 묶인 일이 처리되고 있을때는 다른 프작업으로 방해를 받지 않습니다. 가령 은행에서 돈을 뽑는다고 하면, '잔고조회->출금가능여부 확인->잔고감소->인출' 을 하나의 단위로 묶어서 다루는 것이 트랜잭션의 관심사 입니다. 만약 위의 과정에서 잔고는 감소하였으나 그 다음 인출과정 중 오류가 발생해 고객이 돈을 뽑지 못했다고 하겠습니다. 그럼 고객은 돈을 받지 못한 채 재고만 감소하는 문제가 생깁니다. 이 과정을 트랜잭션으로 묶으면 어떻게 달라질까요? 돈을 뽑는 어떤 과정 중 하나라도 실패하게 되면 모든 과정을 실패로 처리합니다. 따라서 잔고감소는 무효 처리 됩니다.

.

애노테이션 위치에 따른 트랜잭션 적용은, @Transactional 애노테이션을 메소드에 붙일 경우 메소드에만 적용되며, 클래스에 붙일 경우 클래스가 소유한 메서드 전체에 적용됩니다.

감사합니다.

0

Sunny

어.. 제가 알고싶은건 트랜잭션이 아닌 @Transactional 애노테이션이 메소드가 아닌 클래스에 붙였을 경우 어째서 클래스가 소유한 메서드 전체에 적용되는지 알고싶어 질문드렸습니다.

0

김영한

안녕하세요. Sunny님 @Transactional을 처리는 전용 어드바이스, 포인트컷이 해당 기능을 가능하게 처리합니다. 예를 들어서 메서드에 @Transactional 에노태이션이 있는지 확인하고 없으면 클래스 레벨도 체크합니다.

이 부분에 대해서 다음 강의인 스프링 DB 접근 기술에서도 자세히 설명드릴 예정입니다.

감사합니다.

0

Sunny

아 그렇군요 다음 강의 컨텐츠 질문이었군요 친절한 답변감사합니다!!

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

0

50

1

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

0

77

2

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

0

48

1

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

0

52

1

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

0

55

1

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

0

74

1

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

1

334

2

final 키워드 사용 관련 질문

0

74

1

안녕하세요

0

63

1

ThradLocal 실무 사례

0

97

2

실무에서의 동시성 문제

0

62

1

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

0

50

1

ProceedingJoinPoint와 MethodInvocation에 대하여

0

66

1

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

0

69

1

안녕하세요 질문있습니다

0

43

1

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

0

37

1

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

0

74

1

순환참조

0

157

2

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

0

77

1

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

0

73

1

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

0

86

1

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

0

115

2

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

0

65

1

ThreadLocal 사용시 부작용이 있을수 있을까요? (ThreadLocal.remove()를 잘한다고 해도..)

0

69

2