Spring AOP, 관점 지향 프로그래밍

2023. 9. 14. 03:52·Spring
목차
  1. AOP
  2. AOP 적용 방식
  3. AOP 용어 및 개념
728x90

AOP

  • Aspect-Oriented Programming
  • 관점지향 프로그래밍은 객체지향 프로그래밍을 보완하기 위해 쓰임
  • 핵심 로직과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화하여 재사용할 수 있도록 지원하는 것

  • 보통 비즈니스 웹 애플리케이션이라면 사업에 핵심적인 핵심 비즈니스 로직
  • 횡단 관심사(cross-cutting concerns):  애플리케이션 전체를 관통하는 부가 기능 로직 (로깅, 보안, 트랜젝션)
관점 == 관심사( 개발에 필요한 고민이나 염두에 두어야 하는 일)
- 파라미터가 올바르게 들어왔을까?
- 이 작업을 하는 사용자가 적절한 권한을 가진 사용자인가?
- 이 작업에 발생할 수 있는 모든 예외는 어떻게 처리해야 하는가?
핵심 로직은 아니지만, 코드를 온전하게 만들기 위해서 필요한 고민들 ( 반복적으로 코드에 반영)

나눗셈
- 핵심로직 : 두 개의 숫자를 나누는 것
- 주변로직 : 0을 나누는 것이 아닌지 체크 ('관심사' == '주변로직')
  • AOP가 추구하는 것은 '관심사의 분리'
  • AOP는 과거에 개발자가 작성했던 '관심사 + 비즈니스 로직'을 분리해서 별도의 코드로 작성하고, 실행할 때 이를 결합하는 방식으로 접근
  • AOP는 개발자가 염두에 두어야 하는 일들은 별도의 '관심사'로 분리하고, 핵심 비즈니스 로직만 작성할 것을 권장
  • 횡단 관심사의 코드를 핵심 비즈니스 로직의 코드와 분리하여, 코드의 간결성을 높이고 변경에 유연함과 무한한 확장이 가능하도록 하는 것이 AOP의 목적
OOP : 비즈니스 로직의 모듈화
 - 모듈화의 핵심 단위는 비즈니스 로직

AOP : 인프라 혹은 부가기능의 모듈화
 - 대표적인 예 : 모니터링 및 로깅, 동기화, 오류 검사 및 처리, 성능 최적화(캐싱) 등
 - 각각의 모듈들의 주 목적 외에 필요한 부가적인 기능들

 

AOP 적용 방식

컴파일 시점

  • .java 파일을 컴파일러를 통해 .class를 만드는 시점에 부가 기능 로직을 추가하는 방식
  • 모든 지점에 적용 가능
  • AspectJ가 제공하는 특별한 컴파일러를 사용해야 하기 때문에 특별할 컴파일러가 필요한 점과 복잡하다는 단점

클래스 로딩 시점

  • .class 파일을 JVM 내부의 클래스 로더에 보관하기 전에 조작하여 부가 기능 로직 추가하는 방식
  • 모든 지점에 적용 가능
  • 특별한 옵션과 클래스 로더 조작기를 지정해야하므로 운영하기 어려움

런타임 시점

  • 스프링이 사용하는 방식
  • 컴파일이 끝나고 클래스 로더에 이미 다 올라가 자바가 실행된 다음에 동작하는 런타임 방식
  • 실제 대상 코드는 그대로 유지되고 프록시를 통해 부가 기능이 적용
  • 프록시는 메서드 오버라이딩 개념으로 동작하기 때문에 메서드에만 적용 가능 → 스프링 빈에만 AOP를 적용 가능
  • 특별한 컴파일러나, 복잡한 옵션, 클래스 로더 조작기를 사용하지 않아도 스프링만 있으면 AOP를 적용할 수 있기 때문에 스프링 AOP는 런타임 방식을 사용

 

AOP 용어 및 개념

Target

  • 개발자가 작성한 해심 비즈니스 로직을 가지는 객체
  • advice의 대상이 되는 객체
  • Pointcut으로 결정

advice

  • 실질적인 부가 기능 로직을 정의하는 곳
  • 특정 조인 포인트에서 Aspect에 의해 취해지는 조치
  • 그 동작 위치에 따라 구분
Type 설명
Before 조인포인트 실행 이전에 실행, 일반적으로 리턴타입 void
After returning 조인포인트 완료후 실행 (ex. 메서드가 예외없이 실행될 때)
After Throwing 메서드가 예외를 던지는 경우 실행
After (finally) 조인포인트의 동작과 관계없이 실행
Around 메서드 호출 전후에 수행(조인포인트 실행 여부 선택, 반환 값 변환, 예외 변환, try~catch~finally 구문 처리 가능 등)
가장 강력한 어드바이스

Join point

  • advice가 적용될 수 있는 모든 위치
  • Target 객체가 가진 메서드
  • ex) 메서드 실행 시점, 생성자 호출 시점, 필드 값 접근 시점
  • 스프링 AOP는 프록시 방식을 사용하므로 조인 포인트는 항상 메서드 실행 지점

Pointcut

  • 조인 포인트 중에서 advice가 적용될 위치를 선별하는 기능
  • 스프링 AOP는 프록시 기반이기 때문에 조인 포인트가 메서드 실행 시점 뿐이 없고 포인트컷도 메서드 실행 시점만 가능
  • 관심사와 비즈니스 로직이 결합되는 지점을 결정하는 것

Aspect

  • 추상적인 개념
  • advice + pointcut을 모듈화 한 애플리케이션의 횡단 기능

Advisor

  • 스프링 AOP에서만 쓰는 용어로, 하나의 어드바이스와 하나의 포인트컷으로 구성된 에스팩트를 특별하게 지칭하는 말

Proxy

  • Target을 전체적으로 감싸고 있는 존재
  • AOP 기능을 구현하기 위해 만든 프록시 객체
  • 스프링에서 AOP 프록시는 JDK 동적 프록시 또는 CGLIB 프록시
  • 스프링 AOP의 기본값은 CGLIB 프록시
728x90
  1. AOP
  2. AOP 적용 방식
  3. AOP 용어 및 개념
'Spring' 카테고리의 다른 글
  • Spring websocket 웹소켓, java 채팅 프로그램
  • [Jasypt] Spring Boot yaml 파일 암호화
  • @Component, @Bean 어노테이션
  • Spring 제어의 역전(Ioc) ,의존성 주입 (DI), ApplicationContext
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    최소신장트리
    백준
    최대공약수
    파이썬
    플로이드워셜
    그래프
    트리
    DFS
    최단거리
    LIS
    월간코드챌린지
    구현
    동적계획법
    알고리즘
    조합
    BFS
    프로그래머스
    큐
    정렬
    Algorithm
    재귀
    구간합
    그리디
    DP
    덱
    자료구조
    다익스트라
    이분탐색
    힙
    스택
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
Spring AOP, 관점 지향 프로그래밍
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.