AOP는 흔히 관점 지향 프로그래밍 이라는 용어로 번역된다.
AOP가 추구하는 것은 관심사의 분리 이다. AOP는 개발자가 염두에 두어야 하는 일들은 별도의 관심사로 분리하고, 핵심 비즈니스 로직만을 작성할 것을 권장한다.
코드를 온전하게 만들기 위해서 필요한 고민들을 전통적인 방식에서는 개발자가 반복적으로 코드에 반영하게 된다.
예를 들어 나눗셈을 구현한다고 치면 "핵심 로직"은 두 개의 숫자를 나누는 것이지만, "주변 로직"은 0을 나누는 것이 아닌지 등을 체크하는 것이다.
AOP는 과거에 개발자가 작성했던 '관심사 + 비즈니스 로직" 을 분리해서 별도의 코드로 작성하도록 하고, 실행할 때(컴파일 혹은 실행) 이를 결합하는 방식으로 접근한다.
예를 들어 AOP를 이용하면 작성된 모든 메서드의 실행 시간이 얼마인지를 기록하는 기능을 기존 코드의 수정 없이도 작성할 수 있고 잘못된 파라미터가 들어와서 예외가 발생하는 상황을 기존 코드의 수정 없이도 제어할 수 있다.
실무에서 어떤식으로 쓰일까?
어떤 메소드가 실행됐을 때 시간이 얼마나 걸리는지 알아볼 때를 예를 들어보겠습니다.
위의 메소드들이 실행될 때마다 시간을 보려면
delete method에 있는 StopWatch객체를 전부 만들어서 하나씩 시작과 끝, 프린트 문까지 직접 만들어줘야 한다.
실질적인 비즈니스 로직이 들어가야 할 부분에 필요없는 로직이 반복적으로 들어가 있는 것이다.
pointcut을 사용해서 어떤 경로에서 실행되는 것들인지 매핑을 해주고
(enableTimer method는 Timer annotation을 만든다음 매핑하기 위해서 만든 메소드이다.)
around 메소드를 사용한다 joinPoint.proceed()를 사이로 after와 before를 나눠 준 다음 실행 시간을 나타내 보았다.
보는 바와 같이 controller에서 StopWatch 객체를 전부 지운 상태에서 Timer annotation를 붙여주니까 결과가 나왔다.
이처럼 실질적인 로직말고 부가적이고 반복적인 작업이 필요할 때 AOP를 사용한다.
2초가 넘게 걸린 것은 delete method에 thread.sleep(1000*2)를 걸었기 때문이다.
'SPRING > Spring기본' 카테고리의 다른 글
IMG 파일 업로드하기(로컬 폴더에 저장하기) (0) | 2022.02.16 |
---|---|
스프링 기본 설정 (0) | 2022.02.14 |
null값 빼고 response (0) | 2021.11.11 |
GET POST PUT api (0) | 2021.11.11 |
PathVariable 지정해주기 (0) | 2021.11.11 |