본문 바로가기

Spring74

스프링 코어 2 - @Aspect AOP @Aspect 프록시 스프링 어플리케이션에 프록시를 적용하려면 포인트컷과 어드바이스로 구성되어 있는 어드바이저(Advisor)를 만들어서 스프링 빈으로 등록한다. 그렇게 하면 나머지는 스프링의 자동 프록시 생성기가 모두 자동으로 처리해준다. 자동 프록시 생성기는 스프링 빈으로 등록된 어드바이저들을 찾고, 스프링 빈들에 자동으로 프록시를 적용해준다.(물론 포인트컷이 매칭되는 경우에만 프록시를 생성) 하지만 우리가 굳이 빈으로 등록하지 않아고 스프링은 @Aspect 어노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원한다. 참고 @Aspect 는 관점 지향 프로그래밍(AOP)을 가능하게 하는 AspectJ 프로젝트에서 제공하는 애노테이션이다. 스프링은 이것을 차용해서.. 2022. 1. 12.
스프링 코어 2 - 스프링이 제공하는 빈 후처리기 스프링이 제공하는 빈 후처리기 스프링이 제공하는 빈 후처리기를 사용하기 위해서는 아래의 의존성을 추가해야 한다. implementation 'org.springframework.boot:spring-boot-starter-aop' 위 라이브러리를 추가하면 aspectjweaver 라는 aspectJ 관련 라이브러리를 등록하고, 스프링 부트가 AOP 관련 클래스를 자동으로 스프링 빈에 등록한다. 스프링 부트가 없던 시절에는 @EnableAspectJAutoProxy를 직접 사용해야 했는데, 이 부분을 스프링 부트가 자동으로 처리해준다. aspectJ 는 뒤에서 설명한다. 스프링 부트가 활성화하는 빈은 AopAutoConfiguration를 참고하자. (AopAutoConfiguration 더보기) 더보기 .. 2022. 1. 11.
스프링 코어 2 - 빈 후처리기 빈 후처리기 일반적으로 스프링 빈을 등록하면 스프링은 대상 객체를 생성하고 스프링 컨테이너 내부의 빈 저장소에 등록한다. 그 이후에는 스프링 컨테이너를 통해 등록된 스프링 빈을 조회해서 사용하면 된다. 빈 후처리기 - BeanPostProcessor 이때 빈 후처리기를 사용하면 빈으로 등록하고자하는 객체를 빈 저장소에 등록하기 전에 조작할 수 있다. BeanPostProcessor는 이름 그대로 빈을 생성한 후에 무언가를 처리하는 용도로 사용한다. 객체를 조작하거나, 완전히 다른 객체로 바꿔치기하는 것도 가능하다. 그림으로 보면 아래와 같다. 1. 생성 : 스프링 빈 대상이 되는 객체를 생성한다. (@Bean, ComponentScan 모두 포함) 2. 전달 : 생성된 객체를 빈 저장소에 등록하기 직전에.. 2022. 1. 11.
스프링 코어 2 - 포인트 컷, 어드바이스, 어드바이저 • 포인트컷(Pointcut) : 어디에 부가 기능을 적용할지, 어디에 부가 기능을 적용하지 않을지 판단하는 필터링 로직. 주로 클래스와 메서드 이름으로 필터링한다. 이름 그대로 어떤 포인트(Point)에 기능을 적용할지 하지 않을지 잘라서(cut)구분하는 것이다. • 어드바이스(Advice) : 이전에 본 것처럼 프록시가 호출하는 부가 기능이다. 단순하게 프록시 로직이라 생각하면 된다. • 어드바이저(Advisor) : 단순하게 하나의 포인트컷과 하나의 어드바이스를 가지고 있는 것이다. 쉽게 말하면 포인트컷1 + 어드바이스1이 다. 이렇게 포인트컷, 어드바이스, 어드바이저를 구분한 것은 역할과 책임을 명확하게 분리하는 것이다. 포인트컷은 대상 여부를 확인하는 필터 역할만 담당하고, 어드바이스는 깔끔하게.. 2022. 1. 10.