AOP

핵심 기능과 부가 기능 애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다. 핵심 기능이라 함은 객체가 가지고 있는 비즈니스로직으로 볼 수 있다. 만약 계산을 해주는 Calculator 라는 객체가 있다고 가정하면, Calcualtor의 핵심 기능은 사칙연산 등을 의미한다. 부가 기능은 핵심 기능을 보조하기 위한 기능이다. 단독으로 사용되지 않으며 핵심기능과 함께 사용된다. 예를 들면 메소드 실행 속도를 나타내는 로그, 트랜잭션 기능, 보안 기능 등등이 된다. 핵심 기능에 부가 기능을 추가해보자 @Slf4j public class Calcualtor { public int add(int x, int y) { // 핵심 기능 return x + y; } public int sub(int x,..
2022.10.11 - [프로그래밍 노트/SPRING] - [Spring] 빈 후처리기 (feat. proxy, advisor) Advisor를 bean으로 등록하면, AnnotationAwaareAspectJAutoProxyCreator 빈 후처리기가 Advisor 에 지정된 pointcut 기반으로 proxy를 만들어 줬다. Advisor 를 bean 으로 등록하기 위해 어드바이저를 직접 만들었는데, 스프링은 @Aspect 애노테이션으로 매우 편리하게 어드바이저(포인트 컷 + 어드바이스)생성 기능을 지원한다. Advisor 를 직접 생성하여 bean 으로 등록 @Bean public Advisor advisor() { AspectJExpressionPointcut pointcut = new Aspec..
2022.09.28 - [프로그래밍 노트/SPRING] - [Spring] 프록시팩토리_1 (feat. Advice) 2018.07.01 - [프로그래밍 노트/SPRING] - [Spring] Spring AOP(Aspect Oriented Programming)1 AOP 하면 빠질 수 없는 용어들이 있다. 블로그를 찾아보니 2018년도에 AOP 관련 용어를 정리한 글이 존재하는데… 프록시 팩토리에서 찍먹으로 사용되니 몇 개만 속성으로 알아보자 포인트 컷(Pointcut) 어떤 포인트(Point)에 기능을 적용할지 하지 않을지 잘라서(cut) 구분하는 것 어디에 부가기능(Advice)을 적용할지 판단하는 필터링 로직 어드바이스(Advice) 실제로 기능을 구현한 객체 프록시가 호출하는 부가 기능 어드바이..
Spring ⇒ IoC와 AOP를 지원하는 경량의 컨테이너 프레임워크 개발자가 직접 Servlet 클래스를 작성하지 않고, POJO 만으로 웹 애플리케이션을 구축할 수 있다는 것이 스프링의 특징이다. 컨테이너란? 특정 객체의 생성과 관리를 담당하며 객체 운용에 필요한 다양한 기능을 제공한다. 필요한 객체를 생성하고 객체 간의 의존관계를 관리한다는 점에서 스프링도 일종의 컨테이너라고 할 수 있다. 스프링 컨테이너의 종류 스프링에서는 BeanFactory와 이를 상속한 ApplicationContext 두 가지 컨테이너를 제공한다. BeanFactory: 스프링 설정파일(xml 혹은 java)에 등록된 bean 객체를 생성하고 관리하는 가장 기본적인 컨테이너 기능만 제공한다. 컨테이너가 구동될 때 객체를 생..
애노테이션 기반의 스프링 @AOP 의존성 추가 org.springframework.boot spring-boot-starter-aop 애스팩트 정의 @Aspect 빈으로 등록해야 하니까(컴포넌트 스캔을 사용한다면) @Component도 추가. 포인트컷 정의 @Pointcut(표현식) 주요 표현식 execution @annotation bean 포인트컷 조합 &&, ||, ! @Aspect @Component public class PerfAspect { // Advice + Pointcut @Around("execution(* com.corn..*.EventService.*(..))") public Object logPerf(ProceedingJoinPoint pjp) throws Throwable { ..
스프링 AOP 특징 프록시 기반의 AOP 구현체 스프링 빈에만 AOP를 적용할 수 있다. 모든 AOP 기능을 제공하는 것이 목적이 아니라, 스프링 IoC와 연동하여 엔터프라이즈애플리케이션에서 가장 흔한 문제에 대한 해결책을 제공하는 것이 목적 프록시 패턴 왜? (기존 코드 변경 없이) 접근 제어 또는 부가 기능 추가 기존 코드를 건드리지 않고 성능을 측정해 보자. (프록시 패턴으로) EventService (Subject) public interface EventService { void createEvent(); void publishEvent(); } SimpleEventService (Real Subject) @Service public class SimpleEventService implement..
Aspect-oriented Programming(AOP)는 OOP를 보완하는 수단으로, 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법 흩어진 관심사 (Crosscutting Concerns) AOP를 적용하게 되면? 비즈니스로직이 아닌 공통적이고 반복적인 코드를 처리하기 위한 방법으로 Aspect X, Y, Z를 횡단 관심사(cross-concern)라고도 한다. Logging, Security, Transaction을 Aspect라고 보면 된다. (공통 관심사에 대한 추상적인 명칭) AOP 주요 개념 Aspect와 Target Advice Join point와 Pointcut AOP 구현체 자바 AspectJ 스프링 AOP AOP 적용 방법 컴파일 ⇒ 클래스 로드시, 부하가 생길 수 있음 ..
AOP(Asepect Oriented Programming) 기능기존의 비즈니스로직 외 작성해야 하는 코드를 별도로 분리함으로써 개발자가 좀 더 비즈니스 로직에만 집중해서 처리할 수 있는 방법을 제공=> 비즈니스로직이 아닌 공통적이고 반족적인 코드를 처리하기 위한 방법 AOP와 트랜잭션 처리를 통해서 다음과 같은 기능을 완성 할 수 있음개발자가 원하는 코드를 실행하는데 얼마나 시간이 소모되는지 쉽게 알 수 있다.개발자는 메소드에 전달되는 파라미터나 리턴 값에 대해서 로그를 기록할 수 있다.데이터베이스 상에서 트랜잭션 처리를 설정하여, 성공하는 경우에만 모든 데이터가 완전하게 처리되는 방법 적용할 수 있다. AOP에서 'Aspect'란=> '비즈니스 로직은 아니지만, 반드시 해야하는 작업', '반드시 해야..
깡냉쓰
'AOP' 태그의 글 목록