본문 바로가기

Programming/SpringBoot

[Spring] AOP란?

728x90

AOP(Aspect-Oriented Programming)은 객체 지향 프로그래밍에서 공통적으로 발생하는 부가 기능(로깅, 보안, 트랜잭션 관리 등)을 모듈화하는 프로그래밍 기법입니다.

 

AOP는 프로그램의 모듈성, 유지 보수성, 재사용성 등을 높이기 위해 개발되었습니다. 기존의 객체 지향 프로그래밍에서는 공통적인 기능을 모든 객체에서 반복적으로 구현해야 했으나, AOP는 이러한 반복적인 작업을 해결하기 위해 공통 기능을 모듈화하여, 각각의 객체에 적용하는 방식으로 개발됩니다.

 

AOP는 대표적으로 다음과 같은 용어를 사용합니다.

  1. Aspect : 공통적으로 수행되는 부가 기능입니다. 예를 들어, 로깅, 보안, 트랜잭션 관리 등이 Aspect의 예입니다.
  2. Join point : Aspect가 적용될 수 있는 시점입니다. 메서드 호출, 객체 생성 등이 Join point의 예입니다.
  3. Advice : Join point에서 실행되는 Aspect의 코드입니다. 예를 들어, 메서드 호출 시점에서 실행되는 로그 출력 코드가 Advice의 예입니다.
  4. Pointcut : Aspect가 적용되는 Join point를 지정하는 방법입니다. 메서드 이름, 메서드 파라미터 등을 이용하여 Pointcut을 지정할 수 있습니다.

Spring은 AOP를 지원하며, AOP를 사용하는 방법은 다음과 같습니다.

  1. Aspect 정의 : 공통 기능을 수행하는 Aspect를 정의합니다.
  2. Join point 지정 : Aspect가 적용될 Join point를 지정합니다.
  3. Advice 정의 : Join point에서 실행될 Aspect의 코드를 정의합니다.
  4. Pointcut 지정 : Aspect가 적용될 Join point를 지정하는 Pointcut을 정의합니다.

Spring에서 AOP는 프록시 객체를 이용하여 구현됩니다. 프록시 객체는 원본 객체에 대한 참조를 갖고 있으며, 원본 객체의 메서드를 호출하기 전에 프록시 객체가 추가적인 작업(예를 들어, 로깅, 보안 등)을 수행합니다. 이를 통해 AOP를 적용할 수 있습니다.

 

AOP를 사용하면 공통 기능을 한 곳에서 관리할 수 있으므로, 코드의 중복을 줄이고 유지보수성과 재사용성을 높일 수 있습니다. 하지만, AOP를 적용할 때는 Join point의 선택과 Pointcut의 지정이 중요하며, 잘못된 사용은 애플리케이션의 성능 저하와 유지보수성 저하 등을 야기할 수 있습니다.

728x90