📌 목차
영상의 링크
https://www.youtube.com/watch?v=Hm0w_9ngDpM
📌 AOP의 필요성
만약 회사의 요구사항에 모든 기능에 시간을 측정해달라고 하면 어떻게 될까?
만약 메서드가 1억개라면? 1억개에 다 달아야 할 것이다.
또한 비지니스 로직을 제외한 부분은 부가기능이다.
시간을 잰다던가, 권한을 체크한다던가, 트랜잭션을 거는 것들의 기능들은 전부 부가기능이고, 이런 부가기능들은 Infra logic이라고 불린다.
📌 인프라 로직
로깅, 트랜잭션, 성능검사등은 하나의 관심사를 갖게 된다.
🔥 횡단 관심사
해당 로직들은 다른 메서드에서도 같은 층에서 중복으로 발견되므로, 횡단으로 나타난다고 말할 수 있다.
그래서 해당 인프라 로직들을 횡단 관심사라고 부른다.
중간중간 삽입돼어야 할 코드들을 횡단 관심사라고 부른다.
https://willseungh0.tistory.com/61
📌 AOP
Aspect-Oriented Programming
AOP란 횡단 관심에 따라 프로그래밍을 하는 것이다.
AOP는 OOP를 보완하는 개념이다.
AOP는 하나의 패러다임이기 때문에, 해당 패러다임을 구현하는 구현체들이 각 언어별로 존재한다. java는 aspectJ를 사용한다.
📌 AOP 용어정리
- target : 부여되는 대상
- advice : 어떤 부가 기능인지?
- join point : aspectJ에서는 메서드가 호출될 때, 실행될 때, 생성될 때 등등 여러 시점에서 부가 기능들을 실행시킬 수 있는데, Spring에서는 메서드가 실행될 때로 한정해놓았다.
- Point cut : advice가 적용될 지점인데, spring에서는 메서드가 실행될 때로 한정해 놓았으므로, Spring AOP에서는 advice가 적용될 메서드를 뜻한다.
📌 실습
📌 AOP 구현 방법
🔥 컴파일 시 적용
- j.java -> j.class 컴파일 하는 시점에 해당하는 aspectJ를 끼워넣어준다.
🔥클래시 로드시
- class를 load할 때 aspectJ를 끼워 넣는다.
- 컴파일과 클래스 로드 방법은 aspectJ에서 사용하는 방법이다.
🔥 프록시 패턴
- Spring AOP에서 사용하는 방법
- j라는 target class를 부가기능을 제공하는 프록시로 감싸서 실행해준다.
- IoC / DI 를 기반으로 하는 Spring 이기에 가능한 방식이다.
📌 프록시
📌 참고
부가기능을 제공하는 Transaction, Filter, Intercepter 역시 모두 AOP 다.
📌 Spring AOP vs AspectJ
- spring aop -> 개발시에만 간단하게 지원하는 용도로 사용한다.
- spring container가 관리해주기 때문에, 런타임 시에만 가능하다.
- AspectJ는 스프링 컨테이너가 없기 때문에 런타임은 제공하지 않는다.
📌 AOP란?
관점지향 프로그래밍으로써, 관점을 바꾸어서 핵심기능과 부가기능을 나누는 제3자의 관점에서 보는 개념이다. 부가기능을 나누면, 부가기능을 재사용할 수 있으므로 공통된 부분을 재사용할 수 있다.
https://jojoldu.tistory.com/71
'CS > 📌 뭉터기들' 카테고리의 다른 글
Spring Annotation 정리 (0) | 2021.10.23 |
---|---|
빌드관리 tool - Maven vs Gradle (0) | 2021.10.20 |
우테코 - Transaction (0) | 2021.08.06 |
기술노트 알렉 유투브 정리 (1) (0) | 2021.07.18 |
git 연습 (0) | 2021.07.17 |
댓글