AOP(Aspect Oriented Programming)란?
1) 스프링의 3대 요소
제어 역전(IoC), 관점지향 프로그래밍(AOP), 추상화 서비스(PSA) 중 하나
2) OOP(객체지향 프로그래밍)를 보완하는 수단
👉🏻 여러 곳에서 쓰이는 공통 기능을 모듈화하고, 모듈화 한 것을 필요한 곳에 정의하여 사용함
👉🏻 소스 코드 상에서 다른 부분에 계속 반복해서 쓰는 코드인 흩어진 관심사(Crosscutting Concerns)를 Aspect(관점)로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하는 것
주요 개념
1. Aspect(관점): 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 코드를 부분적으로 나누어서 모듈화 하는 것
2. Target: Aspect가 적용되는 곳
3. Advice: Aspect의 실질적인 기능에 대한 구현체
4. Joint point: Advice가 Target에 적용되는 시점(지점), 메서드 진입 / 생성자 호출 / 필드에서 값을 꺼낼 때 등, 스프링에서 Joint point는 항상 메서드 실행 시점을 의미함
5. Point cut: Joint point의 상세 스펙을 정의한 것(어디에 적용해야 하는지)
스프링 AOP의 특징
- 프록시 패턴 기반의 AOP, 프록시 객체를 쓰는 이유는 접근 제어 및 부가 기능을 추가하기 위해서임
- 스프링 빈에만 AOP 적용 가능
- 모든 AOP기능을 제공하는 것이 아닌 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제(중복코드, 프록시 클래스 작성의 번거로움, 객체 간 복잡도 증가)에 대한 해결책을 지원하는 것이 목적
'Spring > Springboot' 카테고리의 다른 글
📝 스프링 프레임워크 특징 (0) | 2022.11.18 |
---|---|
📝 스프링(Spring) 예외(Exception)처리 1 (0) | 2022.11.18 |
📝 Spring Bean이란 무엇이며 어떻게 등록해야 할까? (0) | 2022.11.16 |
📝 gradle이란 무엇이며 어떠한 장점이 있을까? (0) | 2022.11.16 |
📝 restAPI의 put 과 patch 는 어떤 차이점이 있을까요? 어떤 경우에 사용하면 좋을까요? (0) | 2022.11.16 |