본문 바로가기

Spring/Springboot

📝 AOP(Aspect Oriented Programming) 관점 지향 프로그래밍 개념

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와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제(중복코드, 프록시 클래스 작성의 번거로움, 객체 간 복잡도 증가)에 대한 해결책을 지원하는 것이 목적