관점 지향 프로그램
예: 보안 관련된 관심사, API 성능로깅, 트랜잭션 관리,요청 로깅 등
Aspect: 관심사를 모듈화 한것이다.
여러 클래스에 걸쳐 코드를 분산하는 대신 관심사를 다루는 로직을 하나의 Aspect 에 넣는다.
예: isValidatedMember() 와 같이 검증 메서드를 여러 클래스에 초기 진입부에서 검증 스프링에서 클래스에 Aspect 를 구현 할 수 있으며, @Aspect 어노테이션을 적용 할수있다.
dependency: org.springframework.boot:spring-boot-starter-aop
AOP 적용 전:
classDemoA -> methodDemoA( isValidatedMemebr() )
classDemoB -> methodDemoB( isValidatedMemebr() )
classDemoA -> methodDemoC( isValidatedMemebr() )
...
수십 혹은 수백개의 클래스와 메서드가 위와 같이 동일하게 있고, 해당 메서드에 검증 로직을 넣는다고 가정.
한 두개 의 검증 이 필요한 지점이 있을 경우에는 괜찮아 보일 수있으나,
몇십개 , 몇백개의 동일한 상황이 존재 한다고 가정 할 경우 엄청난 반복 작업과,
불필요한 코드가 증가 할 수 있다.
이를 해결 하기위한 방법중의 하나는 AOP 를 적용 하는것이다.
AOP 구현:
@Aspect
@Component
public class ValidateMemberChecker{ }
위와 같이 AOP 를 구현하여 특정 메서드가 실행 되는 지점에 aop 에서 적용한 로직을 수행 하게 되면,
불필요한 중복 코드를 줄이고, 한 곳에서 로직 및 관리를 진행 할 수 있게 된다.
JoinPoint: 특정 프로그램이 실행되는 지점.
Advice: AOP 클래스 내의 method,어드바이스는 특정 관심사를 처리하는 행동이다.
PointCut: 일치하는 여러 조인 포인트를 결합 한것.
'SpringBoot' 카테고리의 다른 글
LocalDateTime hour step (0) | 2021.10.31 |
---|---|
ModelMapper 를 사용하여 객체 컨버팅 하기 (0) | 2021.05.23 |
spring factory pattern (0) | 2020.10.19 |
spring webflux swagger config (0) | 2020.08.31 |
React Stream create and test (0) | 2020.08.24 |