@Transactional이 어디에 적용되어 있는지 스프링은 매번 조사하는 건가요?
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
@Transactional 적용 우선순위가
1. 클래스의 메서드
2. 클래스의 타입
3. 인터페이스의 메서드
4. 인터페이스의 타입
이 순서라고 하셨으니 클래스의 메서드에 @Transactional이 없으면 클래스의 타입을 확인하고, 그래도 없으면 인터페이스의 메서드를 확인하고, 그래도 없으면 인터페이스의 타입에 @Transactional이 있는지 없는지 확인하는 거로 이해했는데
스프링 프레임워크를 사용하면 이를 항상 적용하나요?
이전에 스프링 핵심 원리 기본 편, MVC 1, 2 강의에서 작성한 코드들엔 @Transactional을 적용하지 않았었는데, @Transactional이 코드 어디에도 없더라도 매번 스프링이 이렇게 @Transactional이 어디에 있는지 조사하나요?
답변 2
1
안녕하세요. 11 1님, 공식 서포터즈 OMG입니다.
영한님의 MVC1,2 편에서 @Transactional을 적용하지 않았던 것은 실제 DB와의 연동이 없었기 때문에 트랜잭션 선언이 필요 없었기 때문입니다 😀
그 외 내용은 AI인턴 답변을 참고해주세요 😀
감사합니다.
1
안녕하세요, 인프런 AI 인턴입니다. 11 1님.
스프링에서 @Transactional 어노테이션은 메서드 또는 클래스 수준에 트랜잭션 경계를 정의하기 위해 사용됩니다. 스프링 프레임워크는 AOP(Aspect-Oriented Programming)를 활용하여 이러한 트랜잭션 경계를 구현합니다.
질문하신 대로 @Transactional의 적용 순서는 메소드 레벨이 우선이며, 클래스, 인터페이스에서 단계적으로 체크됩니다. 따라서 스프링은 기본적으로 @Transactional이 어디에 적용되었는지를 런타임 시 AOP 프록시를 통해 결정합니다.
스프링 프레임워크에서는 실제로 @Transactional이 사용되었을 때만 이를 체크하고 적용합니다. 따라서 코드에 @Transactional이 존재하지 않는 경우, 스프링은 트랜잭션 관련 처리를 수행하지 않습니다. 즉, @Transactional이 실제로 코드에 존재할 때만 스프링이 이를 적용하는 로직이 활성화됩니다.
관련하여 추가적인 이해를 돕기 위해 비슷한 질문과 답변을 참조해 보시면 좋을 것 같습니다:
- 클래스 @Transactional에서는 클래스에 @Transactional을 적용했을 때의 작동 방식에 대해 설명합니다.
- @Transactional 적용 범위 질문에서는 트랜잭션이 걸린 메서드 내의 호출 메서드에 대해 설명합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
RepositoryTest의 패키지 위치가 domain인 이유
0
29
2
REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!
0
29
1
update()에 사용하는 setter 질문드립니다.
0
47
1
SQL 중심적 개발의 문제점에 대한 질문
0
72
1
혹시 Containing 을 안쓰신 이유가 있을까요?
0
83
2
[공유] 스프링부트 4.x 버전 mybatis 연동
0
173
1
@repository 어노테이션
0
89
3
ItemService
0
58
1
논리 커밋, 물리 커밋 질문드립니다.
0
54
1
내부 트랜잭션 커밋은 필수인가요?
0
57
1
프록시 커넥션 객체를 반환할 때 생성하는건가요?
0
54
1
Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)
2
178
2
JPQL 대신 네이티브 쿼리를 사용해야 하는 경우
0
77
1
@EventListener(ApplicationReadyEvent.class) 관련
0
88
1
트랜잭션 동기화 매니저와 데이터 소스
0
76
1
DB 관련 강의 개설 계획은 없으신건가요?
0
133
2
물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요
0
94
1
스프링 3 버전 이상 rollbackFor 변경된듯요
1
112
1
트랜잭션 전파 질문.
0
87
1
프로젝트 오픈 에러
0
126
1
외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다
0
83
2
같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환
0
72
1
h2 인메모리 테스트중 예약어 충돌날 경우 대처방법
0
102
1
커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문
0
98
2





