반응형

스프링 AOP (Aspect-Oriented Programming)

AOP 란, Aspect-Oriented Programming 의 약자로 관점 지향 프로그래밍이라 불린다. 관점 지향은 쉽게 표현하자면 어떤 로직을 핵심적인 관점, 부가적인 관점으로 나누어 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란, 공통한 로직이나 기능을 하나로 묶는 것을 뜻한다.

 

AOP 에서 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어 모듈화하겠다는 뜻이다. 이 때, 소스 코드상 다른 부분에서 반복해서 사용되는 코드들을 발견할 수 있는데 이것을 Crosscutting Concerns (흩어진 관심사) 라고 부른다.

 

Crosscutting Concerns 의 모듈화

위와 같이 흩어진 관심사들을 Aspect 로 모듈화하고 핵심적인 비즈니스 로직에서 분리해 재사용하는 것이 AOP 의 취지이다.

 

OOP 와 AOP 개념 비교

더보기
  • OOP : 비즈니스 로직의 모듈화
    • 모듈화의 핵심 단위는 비즈니스 로직
  • AOP : 인프라 혹은 부가기능의 모듈화
    • 각 모듈들의 주요 목적 외 필요한 부가적인 기능들
    • 대표적 예 : 로깅, 트랜잭션, 보안 등

 

AOP 주요 개념

  • Aspect : 위에서 설명한 흩어진 관심사를 모듈화한 것
  • Target : Aspect 를 적용한 곳 (클래스, 메소드, ...)
  • Advice : 실질적으로 어떤 동작을 해야할 지에 대한 것
  • JoinPoint : 어드바이스가 적용될 위치
  • PointCut : 부가기능이 적용될 대상을 선정하는 방법의 표현
  • Proxy : 타겟을 감싸서 타겟의 요청을 대신 받아주는 래핑 오브젝트
  • Introduction : 타겟 클래스에 코드 변경없이 신규 메소드나 멤버 변수를 추가하는 기능
  • Weaving : 지정된 객체에 Aspect 를 적용해 새로운 프록시 객체를 생성하는 과정

+ Recent posts