Spring(AOP)_00

2025. 2. 6. 17:32·Spring, Boot/기초 내용 정리

2025-02-05

 

 

 

# AOP(Aspect Oriented Programming)?

  - 관점 지향 프로그래밍
  
  - 코드 상에 핵심기능 + 공통 기능이 있는데 핵심 기능과 
    공통 기능을 분리해 놓는 것을 관점 지향 프로그래밍이라 함.
    즉, 핵심 사항과 공통관심사항을 분리하여 구현하는 것을 말함.
    
  - 문제를 바라보는 관점을 기준으로 프로그래밍을 하는 기법을 말함.
  
  - AOP는 문제를 해결하기 위한 핵심 사항과 코드 전체에 적용되는
    공통관심사항을 기준으로 프로그래밍 함으로써 공통 모듈을 여러 
    코드에 쉽게 적용할 수 있도록 도와줌.
    
  - AOP는 핵심사항과 공통관심사항을 별도의 코드로 구현해서 최종적으로
    이 둘을 조합하여 완성하는 것을 말함.


# AOP의 장점
  - 전체 코드에 흩어져 있는 공통 관심 사항이 하나의 장소에 
    집중(응집)이 된다는 점.
    
  - 서비스 모듈이 자신의 주요 관심 사항(핵심 사항)에 대한 코드만 
    집중하고, 그 외의 공통 관심 사항은 모두 빠지므로 코드가 깔끔해
    진다는 장점.
    
# AOP 주요 용어 - 용어가 어려움(중요).   
  - target(핵심 관심 사항) : 비지니스 로직(주된 업무)
                          어떤 대상에 공통 관심 사항(부가 기능)을 적용할 것인가?
  - advice(공통 관심 사항) - 횡단 관심 사항 
    : 부가적인 업무(보조 업무). 공통 관심 사항은 누군가에게 맡겨
      버리는 것이 좋음.
      공통 관심 사항 내용을 정의하고 언제 그 작업을 수행할지를 정의
      하는 것을 말함. 즉, 언제 공통 관심 기능을 핵심 로직에 적용할
      지를 정의하고 있어야 함.
      언제 ==> Before, AfterReturning, AfterThrowing, After, Around
  - aspect : 무엇을 언제 어디서 할지 즉, 필요한 정보가 정의되어 
             있음. 즉, 여러 객체에 공통으로 적용되고 있는 공통 
             관심 사항을 말함. 트랜잭션이나 보안, 로그 등이 좋은 
             예임. ==> aspect = advice + pointcut  
  - joinpoint : advice가 추가될 대상(메서드)
                핵심 관심 사항과 공통 관심 사항을 연결해 주는
                설정 정보를 말함.
                어디에 적용할 것인가? 스프링에서는 메서드가 실행될 때만 적용이 됨.
  - pointcut : join point 들을 정의한 패턴.
               실제 공통 관심 사항(advice)이 적용되는 지점(join point)를 
               말함. 스프링에서는 정규 표현식이나 aspectj 문법을 이용하여 정의함.
  - weaving : code, advice, pointcut 등을 조합해서 
              애플리케이션을 만들어 가는 과정을 말함.
              
              
# 스프링에서 AOP를 구현하는 방법
  - 설정 파일을 이용하는 방법(XML 기반의 구현 방법)
  - 애노테이션을 이용하는 방법(@AspectJ 애노테이션 기반의 AOP 구현)
  
  - 스프링 AOP 사용 시 필요한 라이브러리 등록(pom.xml)
    * artifactId가 aspectjweaver 인 라이브러리를 등록해야 함. 
     
  - 스프링 AOP 프록시 사용 시 필요한 라이브러리 등록(pom.xml)
    * artifactId가 cglib 인 라이브러리를 등록해야 함. 
  
  - 공통 기능 클래스 제작 - Advice 역할을 하는 클래스.  
 
 
# xml(설정 파일을 이용하는 방법) 파일에서 advice 종류
  - <aop:before> : 핵심 기능이 실행되기 전에 advice(공통관심사항)를 실행.
  - <aop:after-returning> : 정상적으로 핵심 기능이 실행된 후에 
                            advice(공통관심사항)를 실행.
                            모든 실행이 정상적으로 이루어진 후에 
                            동작하는 코드임.
  - <aop:after-throwing> : 핵심 기능 실행 중에 Exception이 발생 
                           시 advice(공통관심사항)를 실행.
                           예외가 발생한 후에 동작하는 코드임.
  - <aop:after> : 핵심 기능 실행 후에 advice(공통관심사항)를 실행 
                  ==> Exception이 발생하더라도
                      정상적으로 실행되거나 예외가 발생했을 
                      때 구분 없이 실행되는 코드임.
  - <aop:around> : 핵심 기능 실행 전 / 후 및 Exception 발생 
                   시 advice(공통관심사항)를 실행
                   ==> 가장 많이 사용됨.
                   

# Aspect pointcut 표현식
  - pointcut 을 지정할 때 사용하는 표현식으로 AspectJ 문법을 
    사용함.
    pointcut으로 표현할 수 있는 명시자에는 여러 종류가 있지만 
    일반적으로 가장 많이 사용하는 명시자는 execution 명시자임. 
    그 외에도 within, bean 명시자가 있음.
    
    - execution 명시자 : advice를 적용할 메서드를 명시할 때 
                        사용함.
      
      - * : 모든
      - . : 현재
      - .. : 0개 이상
      
           예시)
           * execution(public void get*(..))
             ==> public void 이고, 메서드 이름이 get으로 
                 시작하는 메서드이고, 인자가 있는 경우.
                 
           * execution(* com.test.aop.*.*())
             ==> com.test.aop 패키지의 모든 클래스에 
                 파라미터(인자)가 없는 모든 메서드.
                 
           * execution(* com.test.aop..*.*())
             ==> com.test.aop 패키지 및 com.test.aop 
                 패키지의 하위 패키지의 모든 클래스의 파라미터
                 (인자)가 없는 모든 메서드.
                 
           * execution(* com.test.aop.Staff.*())
             ==> com.test.aop 패키지 안의 Staff 클래스 
                 안에 파라미터(인자)가 없는 모든 메서드.

'Spring, Boot > 기초 내용 정리' 카테고리의 다른 글

Spring Boot_00  (1) 2025.02.06
Spring(AOP)_01  (0) 2025.02.06
Spring(FileUpload)_01  (0) 2025.02.06
Spring(MyBatis)_04  (0) 2025.02.05
Spring(MyBatis)_03  (0) 2025.02.05
'Spring, Boot/기초 내용 정리' 카테고리의 다른 글
  • Spring Boot_00
  • Spring(AOP)_01
  • Spring(FileUpload)_01
  • Spring(MyBatis)_04
mw41817
mw41817
일생의 개발 기록 저장소
  • mw41817
    IT 개발 일지
    mw41817
    • Index (487)
      • HTML (36)
        • 기초 내용 정리 (36)
      • CSS (29)
        • 기초 내용 정리 (29)
      • JavaScript (60)
        • 기초 내용 정리 (60)
      • JQuery (38)
        • 기초 내용 정리 (38)
      • Java (232)
        • 기초 내용 정리 (232)
      • JSP (46)
        • 기초 내용 정리 (46)
      • Spring, Boot (31)
        • 기초 내용 정리 (31)
      • DB (5)
        • Oracle SQL (5)
      • Code WorkBook (6)
        • programmers (6)
        • Baekjoon (0)
      • 기타 (1)
        • 유용한 사이트 (3)
  • 전체
    오늘
    어제
  • 글쓰기 관리
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 카테고리
    • 주인장 GitHub
  • 공지사항

  • 인기 글

  • 태그

    html #코딩 #프로그래밍 #기초
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
mw41817
Spring(AOP)_00
상단으로

티스토리툴바