본문 바로가기

Spring/AOP

[Spring Framework] AOP란 무엇인가?

728x90
반응형

'뉴렉처' 님의 채널(www.youtube.com/user/newlec1)을 바탕으로 제작한 블로그 글입니다:)

 

 

 

 

이번 카테고리에서는 Spring의 AOP에 대해서 알아보고자 합니다.

 

 

 

AOP는 Spring이 제공하는 기능이라기보다는, 하나의 방법론이지만 Spring이 이를 더 쉽게 사용할 수 있도록 도와주는 역할을 합니다.

 

 

 

AOP를 이해하기 전에, 먼저 우리가 알고 있는 OOP와의 관계에 대해서 알아야 합니다.

 

 

 

 

OOP (Object-oriented programming)은 사용자가 주 업무 로직에 어떤 기능을 원하느냐? 를 중점으로 프로그래밍되는 방식입니다.

즉, 사용자가 물건을 구입하고, 계좌로 돈을 송금하고, 물건의 가격과 상세 정보를 보는 등 이 프로그램을 사용하는 "사용자의 입장"에서 구성되는 방식입니다.

 

 

그러나 프로그램을 개발하기 위해서는 사용자가 프로그램에 어떤 기능을 원하는지만 중요한 것이 아니라,

개발자가 프로그램을 개발하기 위해 필요한 코드나 기능들, 또 이 프로그램을 운영하기 위한 운영자가 필요로 하는 기능들이 존재합니다.

 

 

예시로, 프로그램의 성능이나 사용자의 권한 등을 확인하기 위한 로그 처리, 안전한 프로그램을 위한 보안처리, 트랜잭션 처리 등은 사용자가 요구한 적은 없지만, 운영이나 개발에 있어서는 필요한 부분들입니다.

 

따라서 OOP 방식의 주 업무 로직 이외에 개발자와 운영자를 위한 기능을 끼워넣어야 하는 일이 생기게 되는데, 이것을 관점 지향 프로그래밍 AOP(Aspect-oriented programming)라고 합니다.

 

 

 

 

사용자가 필요로 하는 기능들을 구현한 것을 Primary(Core Concern),

이 외에 별도의 목적으로 인해 필요로 하는 기능들을 구현한 것을 Cross-cutting Concern이라고 합니다.

 

이 때, Cross-cutting Concern의 특징은 바로 기존의 코드(메소드 등 ...)의 앞/뒤에 오게 된다는 점입니다.

 

 

core concern : 초록색, cross-cutting concern : 노란색

 

더보기

왜 Cross-cutting Concern이란 이름이 붙게 되었을까?

그 이유는 위에서 아래 방향으로 흘러가는 프로그래밍 방식과는 별개로, AOP 부분은 위 아래에 각각 붙어있는 샌드위치의 빵 같은 존재이기 때문에 

가로로 컷팅하여 떼어 올 수 있다는 의미에서 붙게 되었다고 합니다.

 

 

 

옛날에는 Cross-cutting Concern을 위해서는 원하는 코드 범위의 위 아래에 직접 로그 처리를 위한 코드 등을 넣어주는 작업을 했습니다.

그러다가 필요가 없어지면 주석 처리를 하는 등의 방법으로 위 아래를 떼었다가, 붙였다가 하는 구현 방식을 사용한 것이죠.

 

 

 

그러나 이전에 Dependency Injection에서도 말했듯이, 코드를 직접 수정하는 것은 부담스러운 일이고, 재배포를 할 때에도 문제가 생기게 됩니다.

그러므로 가급적이면 기존의 코드를 건드리지 않고, AOP 부분을 떼었다 붙였다 하는 것이 좋겠죠.

 

이를 위해서 등장한 것이 아래의 AOP 구현 방식입니다.

 

 

 

기존의 방식은 노란색 부분이 초록색의 위아래에 바로 붙어있었지만,

이제는 corss-cutting concern 부분 사이의 틀에 필요한 코드(초록색)이 들어오는 방식으로 바뀐 것을 볼 수 있습니다.

 

 

이러한 방식을 사용하게 되면, 직접 코드를 수정할 필요 없이 쉽게 AOP를 붙이고 떼는 것이 가능하기 때문에

현재는 이런 방식으로 개발하고 있습니다.

 

 

옛날에는 이러한 방식으로 AOP를 구현할 수 있도록 하는 데에 AspectJ를 많이 썼지만,

현재는 Spring이 그 자리를 점점 대신하고 있다고 합니다.

 

 

 

 

이번 시간에는 AOP의 기본 개념과 구현 방식에 대해서 알아보았습니다 :)

 

 

728x90
반응형

'Spring > AOP' 카테고리의 다른 글

[Spring Framework] AOP의 구현방식  (0) 2021.02.06