티스토리 뷰
반응형
스프링 AOP: 개념 소개
스프링 AOP란
AOP란,
- 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법
- OOP를 더 잘하게끔 도와주는 것이다.
그림을 통해 살펴보자
- 그려진 선들은 각각의 Concems을 칭한다.
- Concems란, 비슷한 코드들을 말하는 데, 예를 들면 트랜잭션 처리나 로깅 처리 하는 것들을 일컬어 말하는 것이다.
- 비슷한 코드 즉, Concems들이 각각 클래스에 배치 되는데 이것들이 만약 수정이 필요하게 되면 우리는 각각의 클래스에 소스코드를 모두 수정해야하는 비효율적인 작업을 해야한다.
- 결과적으로 유지보수하는데 쉽지가 않다.
- 그래서 AOP는 이런 문제를 Aspect를 활용해서 해결한다. 즉, 흩어져있는 Concems를 한곳에 모으는 것이다.
AOP가 Aspect를 활용
- 각 Concems(색의 띠)를 Aspect 안에다가 독립적으로 적용하고 이것을 어떤 클래스에서 사용할 것인 지 입력하는 것이다.
- 즉, 해야할 일과 그 일을 어디어디에서 할 것인지를 묶어서 Aspect에 모듈화 한 것이 AOP이다.
AOP 용어
- Aspect : 해야할 일들(Concems)을 묶은 것
- Advice : 해야할 일들(Concems)
- PointCut : 어디에 적용할 것인지(어떤 클래스 혹은 어떤 메소드에 적용할 것인지)
- Ex. A 클래스의 foo 메소드에 적용한다.
- Target : 적용이 되는 대상(각 클래스)
- Join Point : 메소드 실행 시점
- 즉, 메소드를 실행할 때 그 지점에 Advice를 끼워넣어라. 끼워 넣을 수 있는 지점을 Join Point라 칭한다
AOP 적용 방법
A, B, C 클래스(Bean)의 Concems들을 모듈화한 후 어떻게 적용하느냐?! 적용 방법은 3가지가 있다.
- 컴파일 시점(AspectJ)
- 컴파일러에 의해 자바 파일을 클래스 파일로 만들 때 바이트 코드를 조작하면서 AOP를 적용한다.
- 로드 타임(AspectJ)
- 각 클래스(Bean)들은 순수하게 컴파일이 되고, 만들어진 각 클래스 파일을 로딩하는 시점에 AOP를 적용한다.
- 로드 타임 위빙이라고 칭한다 즉, 로드 타임 때 끼워넣는다는 의미이다.
- 런타임 시점(현실적인 추천)
- 스프링 AOP에서 스프링은 각 Bean(클래스)에 Aspect에 모듈화되어 있는 Advice를 사용해야한다는 것을 알고 있다.
- 그래서 스프링은 각 Bean을 만들때, (스프링 애플리케이션에서 Bean을 만드는 과정을 런타임이다.) 각 Bean을 감싸는 proxy bean 을 만든다.
- porxy bean이 실제 각 Bean(클래스)을 호출하기 전에 Advice를 끼워넣고 호출하게 되는 것이다.
AOP 구현체
- AspectJ
- 수많은 Join Point를 가지고 있다.
- 스프링 AOP
반응형
'Spring > Spring 핵심' 카테고리의 다른 글
[스프링 핵심] 스프링 AOP: @AOP (0) | 2020.02.03 |
---|---|
[스프링 핵심] 스프링 AOP: 프록시 기반 AOP (0) | 2020.02.03 |
[스프링 핵심] Validation 추상화 (0) | 2020.01.17 |
[스프링 핵심] Resource 추상화 (0) | 2020.01.17 |
[스프링 핵심] ResourceLoader (0) | 2019.12.29 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- springboot
- Effective Java
- 정적팩터리메서드
- try with resources
- 생성자
- 연관관계
- flatMap
- mustache
- 이펙티브 자바
- 이펙티브자바
- package-private
- 빌더 패턴
- 빈 순환 참조
- 자바8
- 김영한
- Spring
- ifPresent
- jdk버전
- 스프링부트
- 인프런
- junit
- JPA
- 점층적 생성 패턴
- @Lazy
- java8
- 복사 팩토리
- try catch finally
- effectivejava
- java
- 팩토리 메소드 패턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함