티스토리 뷰

1. AOP(Aspect Oriented Programming)의 개념


- 관점 지향 프로그래밍

- 핵심 기능과 공통 기능을 분리 시켜놓고, 공통 기능을 필요로 하는 시점에서 직접 삽입해 사용하는 방식

- 목적 : OOP(Object Oriented Programming; 객체 지향 프로그래밍)을 좀 더 효율적으로 사용하기 위해 도와주는 개념

자바는 다중 상속이 불가능하므로 다양한 모듈에 상속을 통한 공통 기능 부여가 힘들다. 

로그, 권한 체크, 인증, 예외 처리와 같이 필수적이고 반복되는 코드를 공통 기능으로 뺀 후 핵심 기능에 적용하고자 하는 부분에 적용하는 것


2. AOP 개념

(1) 용어 

- Aspect(관점) : 공통 기능

- Advice : Aspect가 해야 할 기능 자체

- Joinpoint : Advice를 적용해야 하는 부분 (Ex : 메소드) code와 Advice를 연결해주는 설정 정보

- Pointcut : Joinpoint의 부분으로 실제로 Advice가 적용되는 부분. 클래스명, 메소드명, 정규 표현식 등의 조건을 통해 선택된 일부

- Weaving : Advice, Pointcut을 조합해 핵심 기능에 적용하는 과정. 컴파일시, 클래스 로딩시, 런타임시 세가지 방법에서 Weving 발생 (스프링에서는 런타임 시점에서 weaving)

- Target(핵심 기능) : Advice가 적용될 객체

- Proxy(대행) : Advice를 Target에 적용했을 때 생성되는 객체 


(2) 특징 

- 스프링 Advice는 자바로 구현
- 스프링 Aspect는 런타임 시점에서 만들어짐
- 스프링은 메소드 Joinpoint만 지원함 (생성자, 소멸자 지원안함)

(3) AOP 구현 방법

- proxy를 이용

- 호출부(client) -> Proxy(대행) -> Target(핵심기능)

- XML 스키마 기반의 AOP구현

- AspectJ5에서 정의한 @Aspect 어노테이션 기반의 AOP구현

- POJO 클래스 이용한 AOP 구현


3. xml 방식의 AOP 구현

(1) Advice 종류

- <aop:config> : AOP 정의

- <aop:before> : 메소드 실행 전에 advice 실행

- <aop:after-returning> : 정상적으로 메소드 실행 후 advice 실행

- <aop:after-throwing> : 메소드 실행 중 exception 발생 시 advice 실행

- <aop:after> : 메소드 실행 중 exception이 발생하여도 advice 실행

- <aop:around> : 메소드 실행 전/후 및 exception 발생 시 advice 실행

- <aop:aspect ref="aopname"> : AOP의 대상 객체를 정함

- <aop:pointcut id="xmlPointCut" expression="within(com.javalec.ex.*)"/>

  :  포인트컷을 설정 (어디서부터 작동할 것인가) 
- expression 속성에 들어갈 명시자 : within, execution, bean

(2) 작업 순서

- 의존 설정 (pom.xml)

 <!-- AOP -->

<dependency>

     <groupId>org.aspectj</groupId>

     <artifactId>aspectjweaver </artifactId>

     <version>1.7.4</version>

</dependency>


- 공통 기능의 클래스 제작 (Advice 클래스; LogAop.java)

- XML 설정 파일에 Aspect 설정 (applicationCTX.xml)

 <aop:config>

     <aop:aspect id="log" ref="logAop">

          <aop:pointcut id="publicM" expression="within(com.javalec.ex.*)" />

          <aop:around pointcut-ref="publicM" method="loggerAoP"/>

     </aop:aspect>

</aop:config>


4. @Aspect를 이용한 AOP 구현

(1) 작업 순서

- 의존 설정 (pom.xml)

- @Aspect 어노테이션을 이용한 Aspect 클래스 제작

- XML 파일에 <aop:aspectj-autoproxy /> 설정


(2) AspectJ Pointcut 표현식
* : 모든
. : 현재
.. : 0개 이상

 

Exception


@Pointcut("execution(public void get*(..))") // public void 인 모든 get 메소드 

@Pointcut("execution(* com.javalec.ex.*.*())") // com.javalec.ex 패키지에 파라미터가 없는 모든 메소드

@Pointcut("execution(* com.javalec.ex..*.*())") // com.javalec.ex 패키지와 하위 패키지에 파라미터가 없는 메소드

@Pointcut("execution(* com.javalec.ex.Worker.*())") // com.javalec.ex.Worker 안의 모든 메소드

 

within


@Pointcut("within(com.javalec.ex.*)") // com.javalec.ex 패키지 안에 있는 모든 메소드

@Pointcut("within(com.javalec.ex..*)") // com.javalec.ex 패키지 및 하위 패키지 안에 있는 모든 메소드

@Pointcut("within(com.javalec.ex.Worker)") // com.javalec.ex.Worker 모든 메소드

 bean

@Pointcut("bean(student)") // student 빈에만 적용

@Pointcut("bean(*ker)") // ~ker로 끝나는 빈에만 적용 


-


참고 : https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EC%8A%A4%ED%94%84%EB%A7%81-%EA%B0%95%EC%A2%8C/?subscribe


원래 오늘이 시험보는 날인 줄 알았는데 다음주여서 속상하다 (⋟﹏⋞)





댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함