본문 바로가기
반응형

Spring Framework/Spring Framework Advanced13

[스프링 핵심 원리 - 고급편] 13. 실무 주의사항 프록시와 내부 호출 - 문제 스프링은 프록시 방식의 AOP를 사용한다. 따라서 AOP를 적용하려면 항상 프록시를 통해서 대상 객체(Target)을 호출해야 한다. 이렇게 해야 프록시에서 먼저 어드바이스를 호출하고, 이후에 대상 객체를 호출한다. 만약 프록시를 거치지 않고 대상 객체를 직접 호출하게 되면 AOP가 적용되지 않고, 어드바이스도 호출되지 않는다. AOP를 적용하면 스프링은 대상 객체 대신에 프록시를 스프링 빈으로 등록한다. 따라서 스프링은 의존관계 주입시에 항상 프록시 객체를 주입한다. 프록시 객체가 주입되기 때문에 대상 객체를 직접 호출하는 문제는 일반적으로 발생하지 않는다. 하지만 대상 객체의 내부에서 메서드 호출이 발생하면 프록시를 거치지 않고 대상 객체를 직접 호출하는 문제가 발생한다... 2022. 7. 13.
[스프링 핵심 원리 - 고급편] 12. 실전 예제 예제 만들기 지금까지 학습한 내용을 활용해서 유용한 스프링 AOP를 만들어보자 @Trace 애노테이션으로 로그 출력하기 @Retry 애노테이션으로 예외 발생시 재시도 하기 먼저 AOP를 적용할 예제를 만들자. ExamRepository package hello.aop.exam; import org.springframework.stereotype.Repository; @Repository public class ExamRepository { private static int seq = 0; /** * 5번에 1번 실패하는 요청 */ public String save(String itemId) { seq++; if (seq % 5 == 0) { throw new IllegalStateException("예외.. 2022. 7. 13.
[스프링 핵심 원리 - 고급편] 11. 포인트컷 포인트컷 지시자 지금부터 포인트컷 표현식을 포함한 포인트컷에 대해서 자세히 알아보자. 애스펙트J는 포인트컷을 편리하게 표현하기 위한 특별한 표현식을 제공한다. 예) @Pointcut("execution(* hello.aop.order..*(..))") 포인트컷 표현식은 AspectJ pointcut expression 즉 애스펙트J가 제공하는 포인트컷 표현식을 줄여서 말하는 것이다. 포인트컷 지시자 포인트컷 표현식은 execution 같은 포인트컷 지시자(Pointcut Designator)로 시작한다. 줄여서 PCD라 한다. 포인트컷 지시자의 종류 execution : 메소드 실행 조인 포인트를 매칭한다. 스프링 AOP에서 가장 많이 사용하고, 기능도 복잡하다. within : 특정 타입 내의 조인 포.. 2022. 7. 13.
[스프링 핵심 원리 - 고급편] 10. 스프링 AOP 구현 프로젝트 생성 이번에는 스프링 웹 기술은 사용하지 않는다. Lombok만 추가하면 된다. 참고로 스프링 프레임워크의 핵심 모듈들은 별도의 설정이 없어도 자동으로 추가된다. 추가로 AOP 기능을 사용하기 위해서 다음을 build.gradle 에 직접 추가하자 주의 build.gradle implementation 'org.springframework.boot:spring-boot-starter-aop' build.gradle 에 테스트 코드에서도 lombok을 사용할 수 있도록 다음 코드를 추가하자 //테스트에서 lombok 사용 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' 참고 @A.. 2022. 7. 13.
반응형