인프런 커뮤니티 질문&답변

Space님의 프로필 이미지

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

AOP 적용

AOP 적용 질문

해결된 질문

작성

·

509

0

안녕하세요
AOP 중 궁금한점이 생겨 질문드립니다!

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)

2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
질문을 쭉 봤는데 해당 내용이 없었습니다.
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
 
 
이부분에서 찍어보면
 
다음과 같이 EnhancedBySpring~
이부분이 스프링이 AOP 를 처리하기 위해 프록시로 복제된 객체로, AOP를 사용하게되면 사용된다는 내용으로 이해했습니다.
 
 
강의 자료에 보면, 다음과 같은 내용이 있는데,
AOP와 관련된 코드들 (예제에서는 시간을 측정하는 코드, 시간측정하는 클래스를 주입하는 코드)을 제거 한 후에도 MemberController 에서 Service 클래스를 sout 으로 찍어볼 경우, 똑같이 EnhancedBySpring~ 하는 객체가 찍혀 나옵니다.
 
이 부분이 위에 AOP 적용 전 그림
에서 진짜 객체들만 사용한다는 위 그림과 과 맞지 않는데,
그렇다면 Spring 에서는 AOP 관련된 코드가 없어도 자동적으로 AOP를 위해 프록시 객체를 사용하도록 강제(?) 처리 되는건지 궁금합니다.

답변 3

0

Space님의 프로필 이미지
Space
질문자

예제와 Package명만 다르고 그대로 실습했던 파일입니다.

여기서 AOP를 사용하는 메소드별 시간측정하는 메소드인

TimeTraceAop.java 가 주석처리 되어있고,

SpringConfig.java 에서 

//    @Bean
// public TimeTraceAop timeTraceAop() {
// return new TimeTraceAop();
// }

해당 부분을 사용하지 않도록 하였습니다.

 

https://drive.google.com/file/d/1Wy3KoElrnRFd4GIverdi0MwAWfScwGrt/view?usp=sharing

실행방법 : Intellij IDE에서,  SpaceSpringApplication 실행

 

실행시 콘솔 로그에
memberService = class space.spacespring.service.MemberService$$EnhancerBySpringCGLIB$$

해당 부분이 AOP를 사용할때 나온다고 강의에서 말씀해 주셨는데,

AOP 관련 부분을 제거한 뒤(build 파일 제거 후 리빌드) 에도 EnhancerBySpring~ 문구가 나옵니다 .

 

 

 

확인해보니 MemberService 내 @Transactional 애노테이션이 붙어있네요.

해당 애노테이션은 AOP를 활용해 트랜잭션을 동작시키므로 프록시 객체가 생성됩니다.

해당 애노테이션을 제거하시고 실행해보시면 프록시 객체가 아닌 일반 객체임을 확인하실 수 있습니다.

Space님의 프로필 이미지
Space
질문자

 감사합니다!!

 

0

Space님의 프로필 이미지
Space
질문자

Build 폴더를 삭제하고 실행해보고, 

Gradle의 clean 도 해보았는데

~~package.service.MemberService$$EnhancerBySpringCGLIB$$9a4bda50

이런식으로 찍히는걸 확인할 수 있었습니다.

조금 더 상세히 살펴볼 수 있게 아래 참고하셔서 프로젝트 남겨주실 수 있으실까요?

---

전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

주의: 업로드시 권한 문제 꼭 확인해주세요

추가로 다음 내용도 코멘트 부탁드립니다.

1. 실행 방법을 알려주세요.
2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.

감사합니다

0

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

build 폴더 내 파일을 삭제 후 다시 빌드하시고 실행해보시겠어요?

감사합니다.

Space님의 프로필 이미지
Space
질문자

Build 폴더를 삭제하고 실행해보고, 

Gradle의 clean 도 해보았는데

~~package.service.MemberService$$EnhancerBySpringCGLIB$$9a4bda50

이런식으로 찍히는걸 확인할 수 있었습니다.

Space님의 프로필 이미지

작성한 질문수

질문하기