inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 핵심 원리 - 고급편

빈 후처리기 - 적용

유틸성 클래스의 경우 어떻게 LogTrace를 적용할 수 있을까요?

해결된 질문

301

nove1080

작성한 질문수 8

0

스프링 빈으로 등록하여 사용하지 않는 예를 들어 유틸성 클래스 혹은 직접 인스턴스를 생성하여 사용하는 클래스 등의 경우 LogTrace를 적용시키는 요구사항을 어떻게 만족시킬 수 있을까요?

 

지금까지 배운 방법은 사용하는 클래스를 빈으로 등록하여서 Proxy로 바꿔치기 하는 방법인데 그렇다면 LogTrace를 적용하고 싶은 모든 클래스를 빈으로 등록해주어야 하나요?

spring

답변 3

1

김영한

안녕하세요. nove1080님

질문의 핵심이 스프링 컨테이너나 빈을 사용하지 않고, static 메서드 같은 곳까지 모두 LogTrace를 적용하고 싶다는 내용으로 이해했습니다.

이 문제를 스프링 컨테이너나 빈 없이 해결하려면 다른 차원의 방법이 필요합니다.

예를 들어서 컴파일 시점에 코드를 끼워넣거나, 아니면 자바 바이트 코드를 로드하는 시점에 특정 코드를 끼워넣어야 합니다.

다음 키워드를 검색해보시면 도움이 되실거에요.

java bytecode instrumentation

aspectJ Compile time

감사합니다.

1

생마차라거

만약 저라면 클라이언트에서 해당 객체의 메서드 호출이 발생했을 때, 직접 프록시 객체를 생성할 것 같습니다.

해당 객체의 팩토리 객체를 만들고 그 안에서는 직접 동적 프록시 기술(리플렉션, JDK 동적 프록시, CGLIB)을 사용하거나, 스프링이 제공하는 ProxyFactory 를 통해서 프록시 객체를 생성하고 Advisor 도 직접 만들어 등록하는 식으로 구현할 것 같습니다.

 

static 클래스의 경우 영한님께서 말씀해 주신 방법을 사용할 것 같습니다!

1

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

nove1080님의 질문에 대한 대답으로는, 유틸성 클래스나 직접 인스턴스를 생성하여 사용하는 클래스에 대해서 LogTrace를 적용하는 방법 중 하나로 CustomizableTraceInterceptor를 활용하는 방법을 제안드릴 수 있습니다. CustomizableTraceInterceptor는 Spring에서 제공하는 기능으로, 메소드 호출에 대한 상세한 로깅 정보를 제공하도록 설정할 수 있습니다. 예를 들어 JpaRepository 같은 Spring Data JPA의 리포지토리 인터페이스에 대한 메소드 호출 시, 호출되는 메소드 이름과 인수, 반환값 등을 로깅할 수 있습니다.

이 기능을 사용하기 위해서는 다음과 같이 CustomizableTraceInterceptor 빈을 명시하고, AOP 설정을 통해 관련 메소드 실행 시 이 인터셉터를 적용하는 방식으로 구현할 수 있습니다.

<bean id="customizableTraceInterceptor" class="
org.springframework.aop.interceptor.CustomizableTraceInterceptor">
  <property name="enterMessage" value="Entering $[methodName]($[arguments])"/>
  <property name="exitMessage" value="Leaving $[methodName](): $[returnValue]"/>
</bean>

<aop:config>
  <aop:advisor advice-ref="customizableTraceInterceptor"
  pointcut="execution(public * org.springframework.data.jpa.repository.JpaRepository+.*(..))"/>
</aop:config>

위와 같은 설정을 통해, 유틸성 클래스나 직접 생성한 인스턴스가 아닌, Spring에서 관리하는 Bean에 대한 메소드 호출시 상세 로깅을 적용할 수 있습니다. 유틸성 클래스 또는 직접 인스턴스를 생성하여 사용하는 클래스에 LogTrace를 적용하기 위해서는, 이들 클래스를 Spring Bean으로 등록하거나, 다른 방식으로 AOP를 적용할 방법을 고려해야 합니다.

도움이 되었길 바랍니다.

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

0

50

1

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

0

77

2

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

0

49

1

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

0

53

1

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

0

55

1

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

0

74

1

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

1

343

2

final 키워드 사용 관련 질문

0

74

1

안녕하세요

0

64

1

ThradLocal 실무 사례

0

97

2

실무에서의 동시성 문제

0

62

1

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

0

50

1

ProceedingJoinPoint와 MethodInvocation에 대하여

0

67

1

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

0

69

1

안녕하세요 질문있습니다

0

43

1

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

0

37

1

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

0

74

1

순환참조

0

158

2

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

0

77

1

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

0

75

1

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

0

88

1

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

0

117

2

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

0

67

1

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

0

72

2