Spring&SpringBoot/03. AOP
-
AOP는 우리의 코드에서 횡단 관심 사항을 분리해 줌으로 엄청난 자동화를 이룰 수 있다. 하지만 잘못 사용하면 큰 난관에 부딪힐 수도 있으니 주의해야 한다. AOP 작성 주의 사항 일반적인 작성 시 주의 사항 AOP를 잘못 사용하면 예기치 못한 큰 문제를 일으킬 수 있다. 좀 억지로 만들어본 코드지만 다음과 같이 advice를 설정하면 어떤 일이 발생할까? @Before("execution(* *(..))") public void toAllMethod(JoinPoint jp) { // do something } 이 코드는 프로젝트의 모든 빈의 메서드에게 영향을 줄것이다. 이로 인한 부작용은 심각할 수 있다.따라서 AOP를 사용할 때는 적용 대상을 정확히 파악하고 꼭 필요한 내용만 AOP로 작성해야 한다...
06. AOP 작성 주의 사항AOP는 우리의 코드에서 횡단 관심 사항을 분리해 줌으로 엄청난 자동화를 이룰 수 있다. 하지만 잘못 사용하면 큰 난관에 부딪힐 수도 있으니 주의해야 한다. AOP 작성 주의 사항 일반적인 작성 시 주의 사항 AOP를 잘못 사용하면 예기치 못한 큰 문제를 일으킬 수 있다. 좀 억지로 만들어본 코드지만 다음과 같이 advice를 설정하면 어떤 일이 발생할까? @Before("execution(* *(..))") public void toAllMethod(JoinPoint jp) { // do something } 이 코드는 프로젝트의 모든 빈의 메서드에게 영향을 줄것이다. 이로 인한 부작용은 심각할 수 있다.따라서 AOP를 사용할 때는 적용 대상을 정확히 파악하고 꼭 필요한 내용만 AOP로 작성해야 한다...
2024.02.16 -
스프링에서는 이미 많은 부분에서 AOP들이 적용되어있다. 이번 포스트에서는 여러가지 예를 통해서 어떤 면에서 스프링의 AOP가 활용되는지 살펴보자. singleton의 비밀 스프링은 빈을 관리할 때 특별히 scope 속성을 변경하지 않는다면 singleton으로 관리해준다. 사실 @Bean의 메서드를 호출하기만 하면 언제나 새로운 빈이 만들어지는데 어떻게 그런일이 가능할까? package com.doding.aoptest.internalusage; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class Bean..
05. Spring 내부의 AOP들스프링에서는 이미 많은 부분에서 AOP들이 적용되어있다. 이번 포스트에서는 여러가지 예를 통해서 어떤 면에서 스프링의 AOP가 활용되는지 살펴보자. singleton의 비밀 스프링은 빈을 관리할 때 특별히 scope 속성을 변경하지 않는다면 singleton으로 관리해준다. 사실 @Bean의 메서드를 호출하기만 하면 언제나 새로운 빈이 만들어지는데 어떻게 그런일이 가능할까? package com.doding.aoptest.internalusage; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class Bean..
2021.10.29 -
joinpoint는 target의 메서드에 대해 advice가 끼어드는 시점을 의미한다. 이번 포스트에서는 SpringBoot에서 joinpoint를 설정하는 방법에 대해 알아보자. joinpoint pointcut에 의해 AOP를 적용할 target의 메서드가 결정됐다면 어떤 시점에 advice를 실행할 것인가를 결정해야 한다. Spring에서는 다섯가지 annotation으로 이 시점을 설정할 수 있다. 애너테이션 설명 @Before 타겟 메서드 호출 전 advice 실행 @AfterReturning 타겟 메서드가 정상 종료(return) 후 advice 실행 @AfterThrowing 타겟 메서드에서 예외가 던져졌을 때(throws XXException) advice 실행 @After 타겟 메서드 ..
04. joinpoint 구성joinpoint는 target의 메서드에 대해 advice가 끼어드는 시점을 의미한다. 이번 포스트에서는 SpringBoot에서 joinpoint를 설정하는 방법에 대해 알아보자. joinpoint pointcut에 의해 AOP를 적용할 target의 메서드가 결정됐다면 어떤 시점에 advice를 실행할 것인가를 결정해야 한다. Spring에서는 다섯가지 annotation으로 이 시점을 설정할 수 있다. 애너테이션 설명 @Before 타겟 메서드 호출 전 advice 실행 @AfterReturning 타겟 메서드가 정상 종료(return) 후 advice 실행 @AfterThrowing 타겟 메서드에서 예외가 던져졌을 때(throws XXException) advice 실행 @After 타겟 메서드 ..
2020.06.20 -
이번 포스트에서는 target의 메서드에서 advice를 적용할 것인지 결정하기 위한 pointcut 작성에 대해 살펴보자. Pointcut pointcut이란? Pointcut(포인트컷)은 target의 메서드에서 advice를 적용할 것인지 결정하는 메서드 선정 알고리즘으로 @Before 등 애너테이션의 value 값이다. pointcut을 사용할 때는 execution, within, bean 등 지정자와 함께 사용할 수 있다. execution: 메서드의 signature 기반으로 한 정교한 포인트컷 작성법으로 가장 많이 사용된다. @Before("execution(String *..SimpleBean.getName())") within: 빈 클래스 기반으로 포인트컷을 작성한다. 작성 방식은 ex..
03. pointcut 작성이번 포스트에서는 target의 메서드에서 advice를 적용할 것인지 결정하기 위한 pointcut 작성에 대해 살펴보자. Pointcut pointcut이란? Pointcut(포인트컷)은 target의 메서드에서 advice를 적용할 것인지 결정하는 메서드 선정 알고리즘으로 @Before 등 애너테이션의 value 값이다. pointcut을 사용할 때는 execution, within, bean 등 지정자와 함께 사용할 수 있다. execution: 메서드의 signature 기반으로 한 정교한 포인트컷 작성법으로 가장 많이 사용된다. @Before("execution(String *..SimpleBean.getName())") within: 빈 클래스 기반으로 포인트컷을 작성한다. 작성 방식은 ex..
2020.06.20 -
문제 상황의 인식 이번 포스트에서는 간단한 Aspect를 작성해 보고 어떤 방식으로 동작하는지 살펴보자. 어느 일하기 싫은 날 다음과 같은 멋진 빈을 만들고 퇴근이 임박한 시점이다. package com.doding.aoptest.simple; import java.util.Calendar; import org.springframework.stereotype.Component; import lombok.Data; @Data @Component public class SimpleBean { private String name = "orgName"; private Calendar now = Calendar.getInstance(); } SimpleBean 등록 후 단위 테스트 위에 나와있는 SimpleBea..
02. Aspect 작성과 동작문제 상황의 인식 이번 포스트에서는 간단한 Aspect를 작성해 보고 어떤 방식으로 동작하는지 살펴보자. 어느 일하기 싫은 날 다음과 같은 멋진 빈을 만들고 퇴근이 임박한 시점이다. package com.doding.aoptest.simple; import java.util.Calendar; import org.springframework.stereotype.Component; import lombok.Data; @Data @Component public class SimpleBean { private String name = "orgName"; private Calendar now = Calendar.getInstance(); } SimpleBean 등록 후 단위 테스트 위에 나와있는 SimpleBea..
2020.06.18 -
AOP 스프링의 특징을 딱 두 가지만 들어보라면 앞서 배운 DI와 지금 소개할 AOP이다. 사실 AOP는 프로젝트 과정에서 적극적으로 사용하지 않을 수도 있지만 스프링 내부적으로 어마어마하게 많이 사용되고 있는 기술이다. 무언가 스프링이 처리하는 마법 같은 일들은 대부분 AOP의 결과인 것들이 많다. 과연 AOP란 무엇일까? AOP(Aspect Oriented Programming: 관점 지향 프로그래밍)란? AOP는 사실 용어조차 추측하기 힘들다. 어떤 "관점을 기반으로 프로그래밍 한다"는 이야기인데 찬찬히 살펴보자. 일상생활에서의 관점과 관점 지향적 삶 먼저 일상 생활에서 "관점"이라는 것을 생각해 보자. 우리는 사무실, 식당, 헬스장 등 다양한 공간에서 다양한 일을 한다. 사무실에서는 업무를 처리하..
01. AOP 기본 컨셉AOP 스프링의 특징을 딱 두 가지만 들어보라면 앞서 배운 DI와 지금 소개할 AOP이다. 사실 AOP는 프로젝트 과정에서 적극적으로 사용하지 않을 수도 있지만 스프링 내부적으로 어마어마하게 많이 사용되고 있는 기술이다. 무언가 스프링이 처리하는 마법 같은 일들은 대부분 AOP의 결과인 것들이 많다. 과연 AOP란 무엇일까? AOP(Aspect Oriented Programming: 관점 지향 프로그래밍)란? AOP는 사실 용어조차 추측하기 힘들다. 어떤 "관점을 기반으로 프로그래밍 한다"는 이야기인데 찬찬히 살펴보자. 일상생활에서의 관점과 관점 지향적 삶 먼저 일상 생활에서 "관점"이라는 것을 생각해 보자. 우리는 사무실, 식당, 헬스장 등 다양한 공간에서 다양한 일을 한다. 사무실에서는 업무를 처리하..
2020.06.18