민스씨의 일취일장

LogT | Java Spring의 AOP에 대해 알게된 모든 내용과 고민들 본문

Programming Language & Framework/JAVA & Spring

LogT | Java Spring의 AOP에 대해 알게된 모든 내용과 고민들

읻민스 2023. 1. 26. 21:50
반응형

Java Spring의 AOP에 대해서 공부하며 알게된 모든 내용과 고민들을 시간순으로 기록하는 페이지이다.


2023년 1월 26일

AOP 맛보기

AOP 맛보기 강의를 보았다. 메서드에 공통으로 들어가는 부분들을 OOP의 관점으로 분리하여 사용할 때 동적으로 주입시키는 기술이다.

  • 주입시키기 위해 분리시킨 코드를 Advice란 이름의 클래스로 만든다.
  • 메서드의 맨 앞 또는 맨 뒤에만 삽입될 수 있다.
    • 맨 앞에 삽입 : Before-Advice
    • 맨 뒤에 삽입 : After-Advice
    • 맨 앞과 맨 뒤 모두에 삽입 : Around-Advice

2023년 1월 30일

AOP란?

Aspect Oriented Programming의 첫글자를 따서 AOP라고한다. 우리말로 직역하자면 관점 지향 프로그래밍이다.

- 다른말로 설명하자면

다른 말로 Cross-Cutting Concerns이라 해서 횡단 관심사, 즉 공통 관심사를 분리하는 것이다.

- 이해를 돕기 위한 긴 설명

하나에 서비스안에는 다양한 기능들이 들어있을 수 있다. 주문하기, 문의하기, 검색하기 등. Client가 어떤 요청을 보낼 때마다 어떤 Client가 어떤 종류의 매체를 통했는지 그리고 그 요청이 성공했는지를 기록해야 하고 싶을 때가 있다. 이런 기능을 주문하기, 문의하기, 검색하기에 각각 구현하면 중복 코드가 계속 발생하게 된다. 여러 기능들이 함께 사용하는 것을 분리하는 것을 Cross-Cutting Concerns (횡당 관심사) 분리라고 한다. 그리고 기능이 작동할 때마다 분리한 코드를 주입시키는 방식을 AOP라고 하고 이해하기 쉽게 "동적으로 부가기능을 추가한다"라고 말하기도 한다.

- 정리

Advice (부가기능)

위에서 공통 코드를 분리해 놓은 코드를 Advice, 우리말로는 부가기능이라고 한다.

Target

분리해 놓은 코드를 주입시킬 대상 객체를 타겟이라고 한다.

Joint Point

타켓 내에서 실질적으로 코드가 주입될 메서드를 조인트 포인트라고 한다.

Proxy

코드는 분리되어 있지만 호출되면서 Advice 코드들이 Target 내의 Joint Point에 주입이 된다. 이렇게 만들어진 객체를 프록시라고 한다.

Weaving

Proxy를 만드는 과정, 즉 Advice를 Target의 Joint Point에 넣는 과정을 Weaving(우리말로 꿰매기)라고 한다.

Advice 설정방식

Advice는 XML을 통해 설정하거나 Annotation을 이용해서 간단히 설정한다.

종류 Annotaion
around advice @Around
before advice @Before
after advice @After
after returning @AfterReturning
after throwing @AfterThrowing

Pointcut Expression

Point Expression이란 Advice를 추가할 메서드를 특정하기 위해 작성하는 것이다. 패턴이라고 주로 부른다.

excution(* com.serviceName.root.package.class.method(..))
excution(* com.serviceName.root.package.class.*(..))
excution(* com.serviceName.root.package.*.*(..))

 

728x90
반응형