DevBoi

AOP(Aspect Oriented Programming) 개념 정리 본문

Develop/[Spring]

AOP(Aspect Oriented Programming) 개념 정리

HiSmith 2021. 6. 3. 00:09
반응형

1. AOP : 스프링의 3대 요소중 하나, 관점 지향 프로그래밍이라는 뜻...

 

스프링은 프록시 기반 AOP, 빈 AOP 설정 등에 특화

 

쉽게 말하면, 중복 사용되는 코드들을 재사용 가능하게, 자바로 치면 class화 시켜서 코딩하는 것

- 가장 쉬운 예, Log print ,  트랜잭션 처리, 시간처리

 

Aspect는 포인트 컷 + 어드바이스의 결합이다.

포인트 컷 : 어떤 메소드에 대해

어드바이스 메소드 : 어떤 메소드를 실행??

 

약간 인터셉터랑 비슷하다고 생각한다. 물론, Request 단이냐 Servlet 단이냐에 따라 다르긴하지만...

동작시점설명

Before 메소드 실행 전에 동작
After 메소드 실행 후에 동작
After-returning 메소드가 정상적으로 실행된 후에 동작
After-throwing 예외가 발생한 후에 동작
Around 메소드 호출 이전, 이후, 예외발생 등 모든 시점에서 동작

 

 

 

 

ex-code)

 

@Aspect

@Component 

public class LogAspectMethod{

 

//static 변수 선언

private static Logger logger = LoggerFactory.getLogger(LogAspectMethod.class);

 

@Around("execution(* com.example.ysj.controller.indexController.*(..))") //이것이 포인트 컷 (어떤 어노테이션들에서 수행할것인지)

public Obect logging(ProceedingJoinPoint pjp) throws Trowable{

 

LogFunction logfunction = new LogFunction();

 

logfunction.strat();

logger.info("start - sysdate");

Object result = pjp.proceed();

logger.info("finish - sysdate");

 

return;

}

}

 

 

이렇게 Around 로, 특정 컨트롤러 하위의 모든 메소드를 지정하고,

특정 메소드가 실행되면, pjp 변수로 받은 메소드가 실행후에 항상 logger.info 로 찍는다.

 

너무 많으면 log print 시간도 고려해서, 핵심 로직에만 넣는 것이 옳다고 생각한다.

execution(* com.example.ysj.controller.indexController.*(..))"

execution 파라미터로는 리턴타입, 패키지 지정, 매개변수의 개수상관없이 모든 매개 변수를 지정한다는 의미 (추후 코딩때 좀더 다양한 케이스에 대해서 정리)

 

Around execution 매게 변수로 구글링 하면 뭐 많이 나온다.

 

프록시, 랩핑오브젝트

스프링에서는 사용자가 프록시를 호출, 타겟메소드 전에 선처리, 메소드, 후처리 방식으로 진행

 

프록시 기반, AOP는, 각각 다른 비즈니스 로직이 아닌, 개발단에서 꼭 필요한,

로깅, 시간체크, 보안(이것도 로깅과 관련이 있다.)

 

무튼, 비즈니스 로직 외에 공통으로 필요한 개발 로직들은 AOP로 감싸는 것이 기본...(핵심 로직만... 주문 결제 등등...)

 

오늘은 노트북 충전기를 회사에 놓고 온 관계로... 다음엔 코드를 직접 짜면서 공부를 해야겠다....

 

글만 적으니... 약간 뜬구름 잡는 듯한...그래도 개념정리에 도움이 되었다.

개발하면서 느낀건 개념정리도 정말 중요하다는...

반응형