Spring Core/03. AOP
-
AOP는 우리의 코드에서 횡단 관심 사항을 분리해 줌으로 엄청난 자동화를 이룰 수 있다. 하지만 잘못 사용하면 큰 난관에 부딪힐 수도 있으니 주의해야 한다. AOP 작성 주의 사항 일반적인 작성 시 주의 사항AOP를 잘못 사용하면 예기치 못한 큰 문제를 일으킬 수 있다. 좀 억지로 만들어본 코드지만 다음과 같이 advice를 설정하면 어떤 일이 발생할까?@Before("execution(* *(..))")public void toAllMethod(JoinPoint jp) { // do something}이 코드는 프로젝트의 모든 빈의 메서드에게 영향을 줄것이다. 이로 인한 부작용은 심각할 수 있다. 따라서 AOP를 사용할 때는 적용 대상을 정확히 파악하고 꼭 필요한 내용만 AOP로 작성해야 한다.AOP..
06. AOP 작성 주의 사항AOP는 우리의 코드에서 횡단 관심 사항을 분리해 줌으로 엄청난 자동화를 이룰 수 있다. 하지만 잘못 사용하면 큰 난관에 부딪힐 수도 있으니 주의해야 한다. AOP 작성 주의 사항 일반적인 작성 시 주의 사항AOP를 잘못 사용하면 예기치 못한 큰 문제를 일으킬 수 있다. 좀 억지로 만들어본 코드지만 다음과 같이 advice를 설정하면 어떤 일이 발생할까?@Before("execution(* *(..))")public void toAllMethod(JoinPoint jp) { // do something}이 코드는 프로젝트의 모든 빈의 메서드에게 영향을 줄것이다. 이로 인한 부작용은 심각할 수 있다. 따라서 AOP를 사용할 때는 적용 대상을 정확히 파악하고 꼭 필요한 내용만 AOP로 작성해야 한다.AOP..
2024.02.16 -
스프링에서는 이미 많은 부분에서 AOP들이 적용되어있다. 이번 포스트에서는 여러가지 예를 통해서 어떤 면에서 스프링의 AOP가 활용되는지 살펴보자. singleton의 비밀스프링은 빈을 관리할 때 특별히 scope 속성을 변경하지 않는다면 singleton으로 관리해준다. 사실 @Bean의 메서드를 호출하기만 하면 언제나 새로운 빈이 만들어지는데 어떻게 그런일이 가능할까?@Configurationpublic class BeanConfig { @Bean public Engine engine() { return new Engine(); }}@Slf4jclass Engine {} @Configuration이 적용되어있는 클래스의 실제 타입을 살펴보자.@SpringBootTest@S..
05. Spring 내부의 AOP들스프링에서는 이미 많은 부분에서 AOP들이 적용되어있다. 이번 포스트에서는 여러가지 예를 통해서 어떤 면에서 스프링의 AOP가 활용되는지 살펴보자. singleton의 비밀스프링은 빈을 관리할 때 특별히 scope 속성을 변경하지 않는다면 singleton으로 관리해준다. 사실 @Bean의 메서드를 호출하기만 하면 언제나 새로운 빈이 만들어지는데 어떻게 그런일이 가능할까?@Configurationpublic class BeanConfig { @Bean public Engine engine() { return new Engine(); }}@Slf4jclass Engine {} @Configuration이 적용되어있는 클래스의 실제 타입을 살펴보자.@SpringBootTest@S..
2021.10.29 -
advice는 실행되는 시점에 따라 여러가지 타입으로 작성할 수 있다. 이번 포스트에서는 다섯가지 advice의 타입에 대해 살펴보자. advice 타입advice가 동작하기 위해서는 어떤 시점에 advice를 실행할 것인가를 결정해야 한다. Spring에서는 다섯가지 annotation으로 이 시점을 설정할 수 있다.애너테이션설명@Before타겟 메서드 호출 전 advice 실행@AfterReturning타겟 메서드가 정상 종료(return) 후 advice 실행@AfterThrowing타겟 메서드에서 예외가 던져졌을 때(throws XXException) advice 실행@After타겟 메서드 성공 여부(return or throws XXException)..
04. advice의 타입advice는 실행되는 시점에 따라 여러가지 타입으로 작성할 수 있다. 이번 포스트에서는 다섯가지 advice의 타입에 대해 살펴보자. advice 타입advice가 동작하기 위해서는 어떤 시점에 advice를 실행할 것인가를 결정해야 한다. Spring에서는 다섯가지 annotation으로 이 시점을 설정할 수 있다.애너테이션설명@Before타겟 메서드 호출 전 advice 실행@AfterReturning타겟 메서드가 정상 종료(return) 후 advice 실행@AfterThrowing타겟 메서드에서 예외가 던져졌을 때(throws XXException) advice 실행@After타겟 메서드 성공 여부(return or throws XXException)..
2020.06.20 -
이번 포스트에서는 target의 메서드 즉 join point에서 advice를 적용 할 것인지 결정하기 위한 pointcut 작성에 대해 살펴보자. Pointcut(포인트컷) pointcut이란?Pointcut은 target의 메서드에서 advice를 적용할 것인지 결정하는 메서드 선정 알고리즘으로 @Before 등 애너테이션의 value 값이다. pointcut을 작성 할 때는 execution, within, bean 등 지정자와 함께 사용한다.execution: 메서드의 signature 기반으로 한 정교한 포인트컷 작성법으로 가장 많이 사용된다.@Before("execution(String *..SimpleBean.getName())")within: 빈 클래스 기반으로 포..
03. pointcut 작성이번 포스트에서는 target의 메서드 즉 join point에서 advice를 적용 할 것인지 결정하기 위한 pointcut 작성에 대해 살펴보자. Pointcut(포인트컷) pointcut이란?Pointcut은 target의 메서드에서 advice를 적용할 것인지 결정하는 메서드 선정 알고리즘으로 @Before 등 애너테이션의 value 값이다. pointcut을 작성 할 때는 execution, within, bean 등 지정자와 함께 사용한다.execution: 메서드의 signature 기반으로 한 정교한 포인트컷 작성법으로 가장 많이 사용된다.@Before("execution(String *..SimpleBean.getName())")within: 빈 클래스 기반으로 포..
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 ; private Calendar now ; } SimpleBean 등록 후 단위 테스트 위 빈이 잘 동작하는지 테스트 해보자. 테스트만 통과하면 퇴근 각이다.! package com.dodin..
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 ; private Calendar now ; } SimpleBean 등록 후 단위 테스트 위 빈이 잘 동작하는지 테스트 해보자. 테스트만 통과하면 퇴근 각이다.! package com.dodin..
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