Untitled

Spring IoC/DI와 Spring Boot

앞서 Spring 삼각형의 IoC/DI를 살펴봤고, 이번에는 다른 스프링 삼각형 중 하나인 Spring AOP에 대해서 살펴보겠습니다

AOP란(Aspect Oriented Programming)?

핵심 로직과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모둘화하여 재사용하는 것을 말하고, 관점 지향 프로그래밍이라고도 합니다

Untitled

위의 그림에서 동일한 색깔의 선들은 비슷한 메소드, 필드, 코드들을 의미합니다. 만약 A 클래스의 주황색 선의 코드를 수정해야 한다면, A 클래스, B 클래스, C 클래스의 주황색 코드를 모두 수정해 주어야 합니다. 만약 주황색 코드를 사용하는 클래스가 매우 많다면, 매우 비효율적인 작업이 될 것입니다. 이렇듯 반복되는 코드를 흩어진 관심사(Crosscutting Concenrs)라고 부릅니다.

이를 해결하기 위해 AOP를 이용합니다. 주황색 코드들, 파란색 코드들, 빨간색 코드들을 모듈화(어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말합니다)하고, 어느 곳에서 사용해야 하는지만 정의해주면 됩니다.

AOP와 OOP의 차이?

AOP는 OOP를 더욱 발전시키기 위한 개념입니다. OOP로 프로그래밍을 한다 해도 중복되는 코드들이 발생할 수 밖에 없습니다. OOP는 공통되는 모듈이나 필드를 관리하기 위해 상속을 사용하지만, 전체 애플리케이션에서 여기저기 사용되는 부가 기능들은 상속으로 처리하기에는 한계가 있습니다. 이를 해결하기 위해 AOP가 등장했습니다

Untitled

기존의 OOP에서는 계좌이체, 입출금, 이자계산 서비스가 각각의 OOP로 구현되어 있고, 각각의 서비스 안에 로깅, 보안, 트랜잭션을 하는 코드가 구현되어 있습니다. 각각의 객체는 공통적인 로직을 갖고, 이러한 코드를 OOP 소스코드 밖으로 빼내 하나의 공통 모듈로 관리하는 것이 AOP입니다

AOP의 핵심은 공통 모듈을 분리시켜 해당 소스코드가 외부의 다른 클래스에 존재한다는 뜻입니다!!

AOP의 장점

AOP 주요 개념