AOP

가수왕·2022년 12월 11일
0

Spring

목록 보기
4/4
post-thumbnail

0. 개요

Spring의 특징 중 하나인 AOP가 무엇인지 알아보도록 하자

1. AOP란?

Aspect Oriented Programming, 관점 지향 프로그래밍이다.
어떤 로직이 있을 때 이 로직을 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 모듈화 하는 것이다.
공통관점기능은 전체 시스템에서 사용하는 로그처리, 트랜잭션, 인증 등을 말하고 핵심관점기능은 일반적인 비즈니스 로직을 말한다. 핵심관점기능은 OOP(객체 지향 프로그래밍)으로 쉽게 분리할 수 있지만 공통관점기능은 OOP로는 분리하기 힘들다 아래 그림을 보면 이해가 될 것이다.

AOP를 사용하지 않고 공통적으로 처리해야하는 파란색 영역의 코드를 수정해야 한다면 Class A, B, C에서 해당 코드를 모두 수정해야 한다.
이런 번거로움을 줄이고자 공통적으로 처리해야하는 로그처리나 트랜잭션처리를 따로 모듈화해서 사용하는 것이 AOP이다.

2. 용어정리

  • Advice
    - 실제 적용하는 기능(트랜잭션, 로그, 인증) 즉, 어떤 일을 해야하는지 + 언제 기능을 실행 시킬 것인지

  • JoinPoint
    - Advice가 삽입되어 동작하는 위치(메소드 실행, 예외처리, 변수 값 변경)

  • PointCut
    - JoinPoint 중 실행하려는 위치를 결정

  • Target
    - Advice를 적용할 대상 클래스 객체

  • Aspect
    - 여러 객체에 공통적으로 사용되는 관심사를 모듈화 한 것 즉, Advice를 합쳐놓은 것 (트랜잭션 관리 기능)

  • Weaving
    - Advice를 비즈니스 로직 코드에 삽입하는 것

3. Advice 종류

  • @Before
    - 미리 정의한 PointCut 진입전 수행
  • @AfterReturning
    - 미리 정의한 PointCut에서 return이 발생할 때
  • @AfterThrowing
    - 미리 정의한 PointCut에서 예외가 발생할 때
  • @After
    - 미리 정의한 PointCut에서 예외 발생 여부와 상관없이 무조건 수행
  • @Around
    - 미리 정의한 PointCut 전, 후에 수행

4. AOP 적용 시점

  1. 컴파일
    • 자바 코드가 컴파일 되어 .class파일이 될 때 AOP를 추가한다.
    • AspectJ가 사용가능하다
  2. JVM로드
    • .class 파일을 JVM에 로딩하기 전 직접 코드를 조작해 AOP를 추가한다.
    • AspectJ가 사용가능하다
  3. 런타임
    • 실제 실행중일 때 AOP가 추가된다.
    • Spring AOP가 사용하는 방법이다.
    • 프록시를 사용한다.

5. 예고...?

  • AOP를 구현하는데 AspectJ와 SpringAOP를 주로 사용하는 것 같다. 두 개의 동작 방식과 특징 그리고 어떤 차이가 있는지 알아볼 예정이다.

0개의 댓글