Study
-
[Spring] 스프링 핵심 원리 - 스프링 AOP 주의사항Study/Spring 2025. 5. 7. 06:47
프록시와 내부 호출 - 문제개요스프링은 프록시 방식의 AOP를 사용함AOP를 적용하려면 항상 프록시를 통해서 대상 객체(Target)를 호출해야 함만약 프록시를 거치지 않고 대상 객체를 직접 호출하게 되면 AOP가 적용되지 않으므로 Advice(부가 기능)도 호출되지 않음일반적인 상황AOP를 적용하면 스프링은 대상 객체 대신에 프록시 객체를 스프링 빈으로 등록함따라서 스프링은 의존관계 주입 시 항상 프록시 객체를 주입함프록시 객체가 주입되기 때문에 대상 객체를 직접 호출하는 문제는 일반적으로 발생하지 않음문제 상황대상 객체의 내부에서 메서드 호출이 발생하면 프록시를 거치지 않고 대상 객체를 직접 호출하는 문제가 발생함프록시 방식의 AOP 한계 : 메서드 내부 호출에 프록시를 적용할 수 없음 프록시와 내부..
-
[Spring] 스프링 핵심 원리 - 스프링 AOPStudy/Spring 2025. 4. 23. 21:45
AOP 소개 - 핵심 기능과 부가 기능어플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있음핵심 기능 : 해당 객체가 제공하는 고유의 기능부가 기능 : 핵심 기능을 보조하기 위해 제공되는 기능 ex) 로그 추적 로직, 트랜잭션 기능단독으로 사용되지 않고, 핵심 기능과 함께 사용됨부가 기능 적용 문제보통 부가 기능은 여러 클래스에 걸쳐서 함께 사용됨. 따라서 이러한 부가 기능은 횡단 관심사(cross-cutting concerns)가 됨즉, 하나의 부가 기능이 여러 곳에 동일하게 사용되다는 뜻아래와 같은 문제 발생함부가 기능이 여러 곳에 퍼져 중복 코드를 만들어냄중복으로 인해 부가 기능을 변경하거나 부가 기능의 적용 대상을 변경할 때 많은 수정이 필요함 AOP 소개 - Aspect위와 같은 부가..
-
[Spring] 스프링 핵심 원리 - @Aspect AOPStudy/Spring 2025. 4. 22. 23:33
@Aspect 프록시 - 적용스프링은 @Aspect 어노테이션으로 Pointcut과 Advice로 구성되어 있는 Advisor 생성 기능을 지원함 예시)더보기import lombok.extern.slf4j.Slf4j;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;@Slf4j@Aspectpublic class LogTraceAspect { private final LogTrace logTrace; public LogTraceAspect(LogTrace logTrace) { this.logTrace = l..
-
[Spring] 스프링 핵심 원리 - 빈 후처리기Study/Spring 2025. 4. 21. 23:54
빈 후처리기 (BeanPostProcessor)@Bean이나 컴포넌트 스캔에 의해 스프링이 빈 저장소에 등록할 목적으로 생성한 객체를 빈 저장소에 등록하기 직전에 조작하고 싶다면 BeanPostProcessor를 사용하면 됨빈 객체를 프록시로 교체하는 것도 가능함 BeanPostProcessor에 의한 스프링 빈 등록 과정생성 : 스프링 빈 대상이 되는 객체를 생성한다. (@Bean, 컴포넌트 스캔 모두 포함)전달 : 생성된 객체를 빈 저장소에 등록하기 직전에 BeanPostProcessor에 전달한다.후 처리 작업 : BeanPostProcessor는 전달받은 스프링 빈 객체를 조작하거나 다른 객체로 바꿔치기 할 수 있다.등록 : BeanPostProcessor는 빈을 반환한다. 전달된 빈을 그대로 반..