2021.01.26 일지 - AOP

2217 단어 SpringSpring

AOP(Aspect Oriented Programming)

스프링의 핵심 개념 중 하나로서, 어플리케이션 전체에 걸쳐 사용되는 공통된 기능을 재사용하도록 지원하는 것이다. AOP란 단어를 번역하면 관점 지향 프로그래밍이다. 자체적인 언어라기 보다는 기존의 OOP언어를 보완하는 확장 형태로 사용되고 있다.

OOP에서는 공통된 기능을 재사용하는 방법으로 상속이나 위임을 사용하는데, 전체 어플리케이션에서 여기저기에서 사용되는 부가기능들을 상속이나 위임으로 처리하기에는 깔끔하게 모듈화가 어렵다. 그래서 이 문제를 해결하기 위해 AOP가 등장하게 된다.

  • 핵심관점(업무로직) + 횡단관점(트랜잭션/로그/보안/인증처리 등)으로 관심의 분리를 실현

AOP의 장점

  1. 어플리케이션 전체에 흩어진 공통 기능이 하나의 장소에서 관리된다는 점
  2. 다른 서비스 모듈들이 본인의 목적에만 충실하고 그 외 사항들은 신경쓰지 않아도 된다는 점

사용법


제일 먼저 보이는 @Around는 어드바이스이다. 앞서 설명드린것 처럼 어드바이스는 애스펙트가 "무엇을", "언제" 할지를 의미하고 있다. 이 언제 라는 시점의 경우 @Around만 존재하지 않고 총 5가지의 타입이 존재한다.

@Before (이전) : 어드바이스 타겟 메소드가 호출되기 전에 어드바이스 기능을 수행
@After (이후) : 타겟 메소드의 결과에 관계없이(즉 성공, 예외 관계없이) 타겟 메소드가 완료 되면 어드바이스 기능을 수행
@AfterReturning (정상적 반환 이후) : 타겟 메소드가 성공적으로 결과값을 반환 후에 어드바이스 기능을 수행
@AfterThrowing (예외 발생 이후) : 타겟 메소드가 수행 중 예외를 던지게 되면 어드바이스 기능을 수행
@Around (메소드 실행 전후) : 어드바이스가 타겟 메소드를 감싸서 타겟 메소드 호출전과 후에 어드바이스 기능을 수행

예를 들어 타겟 메소드의 이전 시점에서만 어드바이스 메소드를 수행하고 싶다면,

@Before("포인트컷 표현식")
public void 어드바이스메소드() {
    ....
}

식으로 작성하시면 된다.

여기서 주의하실 점은 @Around의 경우 반드시 proceed() 메소드가 호출되어야 한다는 것이다. proceed() 메소드는 타겟 메소드를 지칭하기 때문에 proceed 메소드를 실행시켜야만 타겟 메소드가 수행이 된다는것을 잊으시면 안된다.

좋은 웹페이지 즐겨찾기