목록BE (354)
오봉이와 함께하는 개발 블로그
스프링 핵심 원리 - 고급편 > AOP 소개 애스팩트핵심 기능과 부가 기능을 분리누군가는 이러한 부가 기능 도입의 문제점들을 해결하기 위해 오랜기간 고민해왔다.그 결과 부가 기능을 핵심 기능에서 분리하고 한 곳에서 관리하도록 했다. 그리고 해당 부가 기능을 어디에 적용할지 선 택하는 기능도 만들었다.이렇게 부가 기능과 부가 기능을 어디에 적용할지 선택하는 기능을 합해서 하나의 모듈로 만들었는데 이것이 바로 애스펙트(aspect)이다. 애스펙트는 쉽게 이야기해서 부가 기능과, 해당 부가 기능을 어디에 적용할 지 정의한 것이다. 예를 들어서 로그 출력 기능을 모든 컨트롤러에 적용해라 라는 것이 정의되어 있다.이전에 공부했던 @Aspect가 바로 그것이다. 그리고 스프링이 제공하는 어드바이저도 어드바이스(부가..
스프링 핵심 원리 - 고급편 > AOP 소개 핵심 기능과 부가 기능애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다.핵심 기능은 해당 객체가 제공하는 고유의 기능이다. 예를 들어서 OrderService의 핵심 기능은 주문 로직이다.부가 기능은 핵심 기능을 보조하기 위해 제공되는 기능이다. 예를 들어서 로그 추적 로직, 트랜잭션 기능이 있다.이러한 부가 기능은 단독으로 사용되지 않고, 핵심 기능과 함께 사용된다. 예를 들어 로그 추적 기능은 어떤 핵심 기능이 호출되었는지 로그를 남기기 위해 사용한다. 그러니까 부가 기능은 이름 그대로 핵심 기능을 보조하기 위해 존재한다.주문 로직을 실행하기 직전 로그 추적 기능을 사용해야 하면, 핵심 기능인 주문 로직 기능과 부가 기능인 로그 추적 기능이..
스프링 핵심 원리 - 고급편 > @Aspect 프록시 - 설명앞서 자동 프록시 생성기를 학습할 때, 자동 프록시 생성기(AnnotationAwareAspectJAutoProxyCreator)는 Advisor를 자동으로 찾아와서 필요한 곳에 프록시를 생성하고 적용해준다고 했다.자동 프록시 생성기는 여기에 추가로 하나의 역할을 더 하는데, 바로 @Aspect를 찾아서 이것을 Advisor로 만들어준다.쉽게 이야기해서 지금까지 학습한 기능에 더해 @Aspect를 Advisor로 변환해서 저장하는 기능도 한다.그래서 이름 앞에 AnnotationAware(어노테이션을 인식하는)가 붙어 있는 것이다.자동 프록시 생성기는 2가지 일을 한다.@Aspect를 보고 어드바이저(Advisor)로 변환해서 저장한다.어드바이..
스프링 핵심 원리 - 고급편 > @Aspect 프록시 - 적용스프링 애플리케이션에 프록시를 적용하려면 포인트컷과 어드바이스로 구성된 어드바이저를 만들어서 스프링 빈으로 등록하면 된다.그럼 나머지는 자동 프록시 생성기가 처리해준다. 자동 프록시 생성기는 스프링 빈으로 등록된 어드바이저들을 찾고, 스프링 빈들에 자동으로 프록시를 적용해준다. (당연히 포인트컷에 매치가 되어야 한다.)스프링은 @Aspect 애노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원한다.참고: @Aspect는 관점 지향 프로그래밍(AOP)을 가능하게 하는 AspectJ 프로젝트에서 제공하는 어노테이션이다. 스프링은 이것을 차용해서 프록시를 통한 AOP를 가능하게 한다. AOP와 AspectJ ..
스프링 핵심 원리 - 고급편 > 하나의 프록시, 여러 Advisor 적용스프링 빈이 advisor1, advisor2가 제공하는 포인트컷의 조건을 모두 만족하면 프록시 자동 생성기는 프록시를 몇 개 생성할까?프록시 자동 생성기는 프록시를 하나만 생선한다. 왜냐면 프록시 팩토리가 생성하는 프록시는 내부에 여러 advisor를 포함할 수 있기 때문이다.따라서 프록시를 여러 개 생성하여 비용을 낭비할 이유가 없다.프록시 자동 생성기 상황별 정리advisor1 의 포인트컷만 만족 프록시1개 생성, 프록시에 advisor1 만 포함advisor1 , advisor2 의 포인트컷을 모두 만족 프록시1개 생성, 프록시에 advisor1 , advisor2 모두 포함advisor1 , advisor2 의 포인트컷을 모..