Framework/Spring

[Spring] AOP 란? 관점 지향 프로그래밍 AOP 정의

쉬지마 이굥진 2024. 2. 21. 18:00

진행하고 있는 개인 프로젝트에 AOP를 사용한 기능을 추가해 보고 싶어서, AOP 관련 공부를 하려고 한다.

포스팅의 순서는 크게 

1. AOP 사용 이유 

2. AOP 정의

3. AOP 관련 용어 

4. Advice의 종류 로 진행된다.



AOP를 쓰는 이유

 

우리가 개발을 하다가, 모든 메서드에 메서드의 수행 시간을 알아내는 로그를 찍어야 한다고 생각해보자.

메서드가 얼마 없다면 괜찮겠지만, 메서드가 100개, 1000개 된다면 ?

일일히 로그를 찍는 코드를 100번 1000번 서비스단에 넣게 될 것이다.  (다들 .. 반복 작업 ... 싫어하시죠 ..? 🥲)

그리고 넣는다고 하더라도, 핵심 기능과 로그 기능이 섞이기 때문에, 관심사 분리와 중복 코드 지양이라는 부분에서 봤을 때도 좋은 코드는 아닐 것이다.

 

이 때 이러한 로그 기능을 빼서 공통 코드로 만들어 쓸 수 있도록 하는 것이 AOP를 쓰는 이유 !!!!

그럼 AOP가 뭔지 본격적으로 알아보자.

 

 
AOP란?

 

AOP는 Aspect Oriented Programming의 약자다. 번역하면 '관점 지향 프로그래밍'.

(횡단 관심사라는 말도 쓰는데, 영어로 하면 cross-cutting concerns 라고도 한다.)

 

'횡단 관심사' : 여러 모듈이나 계층에 공통적으로 쓰인다. (횡: 가로 횡 橫)

 

풀어서 한 문장으로 정의하면 부가 기능(advice)을 동적으로 추가해주는 기술이라고 정의할 수 있을 것 같다.

 


부가 기능
이 뭔데?!


부가 기능은 핵심 기능의 반대말로 생각하면 된다.

어떤 특정 메서드가 수행하는 핵심 기능 말고, 핵심 로직과는 관심사를 공유하지 않는 '곁다리 기능'이라고 이해했다.

 


그럼 '동적'으로 추가한다는 건 무슨 말이야?

 

부가 기능을 동적으로 추가한다는 건,

우리가 프로그램을 만들 때 넣는게 아니라, 코드가 실행 중에 자동으로 추가된다는 뜻이다. 

이러한 성질을 이용하면 코드를 메서드의 시작 or 끝 or 시작과 끝 모두에 자동으로 코드를 추가해 줄 수 있다.

 


AOP 관련 용어

용어 설명
target advice가 추가될 객체
advice target에 동적으로 추가될 부가 기능 (코드)
join point advice가 추가(join)될 대상 (메서드)
pointcut join point들을 정의한 패턴. ex) execution(* com.sparta.*.*(..))
proxy target에 advice가 동적으로 추가되어 생성된 객체 
weaving target에 advice를 추가해서 proxy를 생성하는 것

 

 


Advice의 종류

스프링에서 Advice의 설정은 XML, yml,  애너테이션 등의 방법으로 가능하다.

종류 애너테이션 설명
around advice @Around 메서드의 시작과 끝 부분에 추가되는 부가 기능
before advice @Before 메서드의 시작 부분에 추가되는 부가 기능
after advice @After 메서드의 끝 부분에 추가되는 부가 기능
after returning @AfterReturning 예외가 발생되지 않았을 때, 실행되는 부가 기능
after throwing  @AfterThrowing 예외가 발생했을 때, 실행되는 부가 기능

 

 

이렇게 AOP의 정의와 용어, 사용 이유에 대해 공부해봤다. 

다음 포스팅에서는 AOP를 현재 하고있는 프로젝트에 적용하는 과정에 대해서 포스팅해보겠다!

 


다음 포스팅

 

[프로젝트] AOP로 'API 수행 시간/회원 별 총 API 사용시간 누적 저장' 기능 다르게 구현하기와 그에

내가 구현하고 싶은/구현해야 할 기능은 두 가지가 있었다. 회원 별 API 사용 시간 측정(저장) 기능과 API 수행시간 측정 기능이다. 이 기능들은 '핵심기능' 이라기 보단 '부가기능'에 가까웠으므로

developer-jinnie.tistory.com