[SpringBoot] AOP(Aspect Oriented Programming)

Woojin·2023년 8월 12일
0

SpringBoot

목록 보기
8/15

AOP

  • 관점 지향 프로그래밍
  • 기존 OOP를 더욱 보완, 확장하여  OOP를  OOP답게 사용할 수 있도록 도와주는 개념
  • 공통 모듈을 분리시켜 해당 소스코드가 외부의 다른 클래스에서 존재하는 것
  • 사용 이유 : 비즈니스 로직과 공통 기능으로 구분을 하고, 공통 기능은 필요한 시점에 불러와서 적용하는 프로그래밍 방법

Web Layer

  • REST API를 제공하며, Client 중심의 로직 적용

Business Layer

  • 내부 정책에 따른 logic을 개발하며, 주로 해당 부분을 개발

Data Layer

  • 데이터 베이스 및 외부와의 연동을 처리

장점

  • 중복 코드 사라짐
  • 코드 간결 및 유지보수 쉬움
  • 재활용성 높아짐

Core Concern(핵심 관심) : 각 서비스의 핵심 비즈니스 로직.   i.e. 계좌이체, 입출금, 이자계산

Crosscut Concern(횡단 관심) : 공통 모듈.   i.e. 로깅, 보안, 트랜잭션

AOP의 구성요소

  • JointPoint : Crosscut Concern(횡단 관심)을 삽입할 시점(when)
  • PointCut : 어떤 클래스의 어떤 함수에 삽입할건지. 삽입할 위치(where)
  • Aspect : JointPoint(when) + PointCut(where)
  • Advice : 무엇(what)을 삽입할건지
  • Weaving : Aspect(when + where) + Advice(what). 위빙을 통해 지정된 객체를 새 Proxy 객체로 생성
  • Proxy : Crosscut Concern(횡단 관심)이 Core Concern(핵심 관심)에서 직접 실행되지 않고 Proxy(대리인)을 생성해 실행.
  • Before : 메서드 실행하기 이전
  • After : 메서드가 성공적으로 실행 후, 예외가 발생 되더라도 실행
  • AfterReturing : 메서드 호출 성공 실행 시 (Not Throws)
  • AfterThrowing : 메서드 호출 실패 예외 발생 (Throws)
  • Around : Before / after 모두 제어

0개의 댓글

관련 채용 정보