250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 플러그인
- Like
- #eclipse
- #Oracle
- 설치
- #java
- html
- 설정
- 이클립스
- Oracle
- IntelliJ
- Eclipse
- 인텔리제이
- 오라클
- #오라클
- 소스코드 맵
- Spring
- #자바가상머신
- log4j2
- mariadb
- #JVM
- #이클립스
- log4j
- 스프링
- springboot
- 환경설정
- 스프링부트
- Plugins
- CodeGlance
- #자바
Archives
- Today
- Total
커피와 개발자
AOP(Aspect Oriented Programming) 설정 본문
728x90
AOP(Aspect Oriented Programming)
AOP(Aspect Oriented Programming)는 관점 지향 프로그래밍입니다. 어떠한 기준을 정하고, 관점을 나누어서 각 관점 별로 모듈화를 하여 사용하는 방식입니다.
비즈니스 로직과 공통 기능으로 구분을 하고, 공통 기능은 필요한 시점에 불러와서 적용하는 프로그래밍 방법입니다.
관심 지향 프로그래밍은 프로그램 로직을 명확한 부분들(이른바 관심사)로 나누는 것을 수반합니다. 거의 모든 프로그래밍 패러다임들은 관심사들을 별도의 독립적인 엔티티로 그룹화하고 캡슐화하는 것을 어느 정도는 지원하며, 이는 이러한 관심사들을 구현, 추상화, 합성하기 위해 사용할 수 있는 추상화(예: 함수, 프로시저, 모듈, 클래스, 메서드)를 제공함으로써 수행됩니다.
일부 관심사들은 프로그램 내의 여러 추상적 개념들에 영향을 미치며 이러한 형태의 구현체를 거역하는데, 이러한 관심사들을 흩어진 관심사(크로스 커팅 관심사, cross-cutting concerns)라고 부릅니다.
AOP 주요 Annotation :
어노테이션 | 의미 |
@Aspect | AOP를 정의하는 Class에 할당 |
@Pointcut | 기능을 어디에 적용시킬 것인지 지점을 설정 |
@Before | 메소드가 실행되기 이전 |
@After | 메소드가 성공적으로 실행 후, 예외가 발생되더라도 실행 |
@AfterReturing | 메소드 호출 성공 실행시 (Not Throws) |
@AfterThrowing | 메소드 호출 실패시 예외발생 (Throws) |
@Around | Before / After 모두 제어 |
pom.xml - dependency 적용 :
pom.xml 파일에 spring-boot-starter-aop dependency를 적용합니다.
@EnableAspectJAutoProxy 적용 :
최상위 패키지에 있는 Application 클래스에 Annotation을 적용해서 AOP를 찾을 수 있도록 합니다.
Aspect 적용 :
LoggerAspect.java를 생성하고 공통기능을 정의하고 공통기능이 사용될 시점을 정의합니다.
AOP 적용 시점 pointcut 표현식 :
Pointcut | JoinPoints |
execution(public * *(..)) | public 메소드 실행 |
execution(* set*(..)) | 이름이 set으로 시작하는 모든 메소드명 실행 |
execution(* get*(..)) | 이름이 get으로 시작하는 모든 메소드명 실행 |
execution(* com.pkg.service.AccountService.*(..)) | AccountService 인터페이스의 모든 메소드 실행 |
execution(* com.pkg.service.*.*(..)) | service 패키지의 모든 메소드 실행 |
execution(* com.pkg.service..*.*(..)) | service 패키지와 하위 패키지의 모든 메소드 실행 |
within(com.pkg.service.*) | service 패키지 내의 모든 결합점 (클래스 포함) |
within(com.pkg.service..*) | service 패키지 및 하위 패키지의 모든 결합점 (클래스 포함) |
bean(*Repository) | 이름이 “Repository”로 끝나는 모든 bean |
bean(*) | 모든 bean |
bean(account*) | 이름이 account 로 시작되는 모든 bean |
bean(*dataSource) || bean(*DataSource) | 이름이 dataSource 나 DataSource 으로 끝나는 모든 bean |
결과 확인 :
http://localhost:9090/sample 접속 후 로그 확인
2022-05-21 21:45:35,863 [INFO ] [http-nio-9090-exec-1] s.p.s.c.i.LoggerInterceptor: /********** BEGIN **************************************************
2022-05-21 21:45:35,864 [INFO ] [http-nio-9090-exec-1] s.p.s.c.i.LoggerInterceptor: * Request URI : /sample
2022-05-21 21:45:35,877 [INFO ] [http-nio-9090-exec-1] s.p.s.c.a.LoggerAspect: * AspectJ : Around Logging BEGIN
2022-05-21 21:45:35,878 [INFO ] [http-nio-9090-exec-1] s.p.s.c.a.LoggerAspect: * Controller : std.pjt.springboot.sample.controller.SampleController.page()
2022-05-21 21:45:35,879 [INFO ] [http-nio-9090-exec-1] s.p.s.c.a.LoggerAspect: * AspectJ : Before Logging BEGIN
2022-05-21 21:45:35,879 [INFO ] [http-nio-9090-exec-1] s.p.s.c.a.LoggerAspect: * AspectJ : Before Logging END
2022-05-21 21:45:35,899 [DEBUG] [http-nio-9090-exec-1] s.p.s.s.c.SampleController: SampleController.page debug log
2022-05-21 21:45:35,899 [INFO ] [http-nio-9090-exec-1] s.p.s.s.c.SampleController: SampleController.page info log
2022-05-21 21:45:35,900 [INFO ] [http-nio-9090-exec-1] s.p.s.c.a.LoggerAspect: * Service : std.pjt.springboot.sample.service.impl.SampleServiceImpl.getList()
2022-05-21 21:45:35,909 [INFO ] [http-nio-9090-exec-1] s.p.s.c.a.LoggerAspect: * AspectJ : AfterReturning Logging BEGIN
2022-05-21 21:45:35,909 [INFO ] [http-nio-9090-exec-1] s.p.s.c.a.LoggerAspect: * AspectJ : AfterReturning Logging END
2022-05-21 21:45:35,909 [INFO ] [http-nio-9090-exec-1] s.p.s.c.a.LoggerAspect: * AspectJ : Around Logging END
2022-05-21 21:45:35,910 [INFO ] [http-nio-9090-exec-1] s.p.s.c.i.LoggerInterceptor: *********** END ***************************************************/
728x90
'프로젝트 > Spring Boot' 카테고리의 다른 글
DataBase 연동 (MariaDB, HikariCP) (0) | 2022.10.11 |
---|---|
Argument Resolver 설정 (0) | 2022.10.11 |
jsonView 설정 (0) | 2022.10.11 |
Interceptor 설정 (0) | 2022.10.11 |
log4j2 설정 (0) | 2022.10.11 |
Comments