728x90
Aspect Oriented Programming
관점 지향 프로그래밍
어떠한 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어 그 관점을 기준으로 각각 모듈화 하는 것
OOP 모듈화의 핵심 단위는 클래스
AOP 모듈화의 핵심 단위는 관점(Aspect)
AOP는 기존에 사용하던 OOP를 대체하기 위한 것이 아닌 횡단 관심사를 깔끔하게 처리하기 위해 OOP의 부족한 부분을 보조하는 목적으로 개발됨
AOP가 필요한 이유
소프트웨어 개발에서 변경 지점은 하나가 될 수 있도록 잘 모듈화 되어야 함
부가 기능처럼 특정 로직을 애플리케이션 전반에 적용하는 문제는 일반적인 OOP 방식으로는 해결이 어렵기 때문에 핵심 기능과 부가 기능을 분리하는 AOP 방식이 필요함
- OOP 방식의 프로그래밍을 했을 때 여러 곳에서 공통적으로 사용되는 부가 기능의 중복 코드가 발생하게 된다
- 중복되는 부가 기능에 수정 및 삭제가 필요하게 되면 사용되는 모든 곳에 수정 및 삭제 동작을 해줘야 한다
- 관심 지향 프로그래밍(AOP)은 OOP 방식의 불필요한 반복을 해결하기 위한 방법이다
AOP 용어
Aspect
- 여러 객체에 공통으로 적용되는 기능(공통 기능)
- 어드바이스 + 포인트컷을 모듈화하여 애플리케이션에 포함되는 횡단 기능
Join Point
- 클래스 초기화, 객체 인스턴스화, 메서드 호출, 필드 접근, 예외 발생과 같은 애플리케이션 실행 흐름에서의 특정 포인트를 의미
- 애플리케이션에 새로운 동작을 추가하기 위해 조인포인트에 관심코드(aspect code)를 추가할 수 있음
- 횡단 관심은 조인포인트 전/후에 AOP에 의해 자동으로 추가됨
- 추상적인 개념이며, AOP를 적용할 수 있는 모든 지점
- 스프링 AOP는 프록시 방식을 사용하므로 조인 포인트는 항상 메서드 실행 지점으로 제한
- 어드바이스 적용이 필요한 곳은 애플리케이션 내에 메서드를 갖는다
Advice
- 조인포인트에서 수행되는 코드
- Aspect를 언제 핵심 코드에 적용할지를 정의
- 시스템 전체 애스펙트에 API 호출을 제공
Pointcut
- 조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능
- AspectJ 표현식을 사용해서 지정
- 프록시를 사용하는 스프링 AOP는 메서드 실행 지점만 포인트컷으로 선별 가능
Weaving
- 포인트컷으로 결정한 타겟의 조인 포인트에 어드바이스를 적용하는 것(Advice를 핵심코드에 적용하는 것)
- 핵심 기능 코드에 영향을 주지 않고 부가 기능을 추가할 수 있음
- AOP 적용을 위해 애스펙트 객체에 연결한 상태
AOP proxy
- AOP 기능을 구현하기 위해 만든 프록시 객체
- 스프링에서 AOP 프록시는 JDK 동적 프록시 또는 CGLIB 프록시이다
Target
- 핵심 기능을 담고 있는 모듈로 타겟은 부가기능을 부여할 대상이 됨
- Advice를 받는 객체이고 포인트컷으로 결정
Advisor
- 하나의 어드바이스와 하나의 포인트 컷으로 구성
- 스프링 AOP에서만 사용되는 특별한 용어
728x90
'개발일지 > Spring' 카테고리의 다른 글
Spring JPA 엔티티 매핑 (0) | 2022.11.05 |
---|---|
JPA (Java Persistence API) (0) | 2022.11.04 |
Spring - Pagination (0) | 2022.10.31 |
Spring MVC의 동작 방식과 구성 요소 (0) | 2022.10.22 |
Spring MVC (0) | 2022.10.22 |