본문 바로가기

개발/Spring

[Spring]AOP(관점지향프로그래밍) 입문

스프링 프레임워크의 주요 특징 중 하나로 언급되는 것이 관점지향프로그래임(AOP)이다.

 

관점지향이란 무엇인가? 보통 자바로 구현하는 프로그래밍을 객체지향 프로그래밍(OOP)이라고 하는데,

 

이것과는 무엇이 다른가?

 

실무를 함에 있어, 모든 로직에 특정 기능을 추가해야 한다고  생각해보자,

 

이미 구현된 서비스상에 수많은 클래스에 모든 메소드를 추가할 것인가? 또는 하나의 로직을 객채로  만들었다고 한들..

그 로직을 호출하는 부분을 모든 서비스에 붙여넣어주어야 하는가?

 

개발자의 중요한 덕목(?)중 하나는 바로 귀찮음이다. 이러한 귀찮은 행위를 반복하지 않기 위해  고민하고 발전해 나가는 것이 개발자일 것이다.

 

다행히도 스프링 프레임워크는 AOP를 통해 이러한 문제를 해결할 수 있다. 아래는 김영한 팀장님의 인프런 강의에서 발췌한 이미지이다. 

스프링 핵심 원리 - 기본편 중 (인프런-김영한)

필요한 로직을 한번만 구현한 후 해당 로직이 반영 될 곳을 어노테이션을 통해 지정해주면 끝!

 

이를 코드로 보면 아래와 같이 나타낼 수 있다.

 

@Aspect로 AOP클래스임을 지정해주고 @Component를 통해 스프링이 컴포넌트스캔을 할 수 있게 지정해준다.

 

@Around 어노테이션을 통해 AOP로 지정된 로직이 실행 될 경로를 지정해준다.

 

아래와 같이 해당 경로 내의 모든 로직이 실행될때 실행시간을 가져오는 것을 확인할 수 있다.