날아라쩡글이의 블로그입니다.

AOP(Aspect Oriented Programming) 본문

중앙 HTA (2106기) story/spring java framwork story

AOP(Aspect Oriented Programming)

날아라쩡글이 2022. 1. 11. 13:49
반응형

관점지향 프로그래밍 

  • 객체-객체-메소드 -값전달
  • 객체지향 프로그래밍은 메소드로 대화하고 하나의 설계도로 여러개를 만들고 다양한 속성이 존재한다. 
  • 관점지향프로그래밍은 소스코드를 크게 2가지로 바라본다. 
    • 코드를 핵심기능과 공통기능으로 바라보는 시각이 존재한다. 
    • 핵심기능 - 학사관리, 교직원 관리에 특별하게 존재하는 기능
    • 공통기능 - 로그출력, 인증/권한체크, 트랜잭션기능
  • 반복적인 업무를 수행하는 것은 공통기능으로, 특별한 기능은 핵심기능으로 정의한다. 
  • 모든 class는 공통기능과 핵심기능으로 조합이 되어 있다. 
    • 업무로직메소드에서 핵심기능은 다르지만, 공통기능은 비슷하다
    • 공통기능은 중복이 엄청많고, 핵심과 공통기능이 섞여서 구분이 어렵다.
      공통과 핵심기능이 섞여있으면 공통기능변경을 하거나 추가를 할 때 반복적인 소스를 추가하게 된다. 
    • 공통기능을 분리할 수 있다. -> 그럼 호출기능만 남게 된다. 
  • spring에서는 관점지향으로 핵심과 공통기능으로 구분해서 바라본다. 
  • 기존코드의 문제 
    • 핵심기능코드와 공통기능코드가 메소드 안에 섞여있다. 
    • 핵심기능코드를 변경/파악하기 어렵다. 
    • 새로운 공통기능을 추가하기 어렵다. 
      • 전체적으로 공통기능을 추가해야한다. 
    • 기존 모듈기능을 변경하기 어렵다. 
    • 핵심 + 공통기능이 섞인 메소드이다. 
      • 현재 수업을 듣는 우리는 느낄 수 없지만 실제 업무에서는 많은 것을 확인할 수 있다. 코드가 많으면 유지보수가 어렵다. AOP로 해낼 수 있다. 

메소드를 공통기능안에 설정하는 것이다. 
내가 아닌 공통서버를 받도록 만든다. 

  • 메소드 안에 핵심기능만 구현하고, 필요한 공통기능은 핵심기능이 실현될 때 함께 실행되게 하는 방식이다. 
  • 핵심기능실행에 필요한 공통기능을 메소드안에 직접작성하는 것이 아닌
    실행할 공통기능을 모듈로 분리하여,  핵심기능이 실행될 때 같이 실행되게 한다. 
  • AOP를 적용하면 핵심기능만 존재하는 업무로직 메소드를 구현할 수 있다. 
  • AOP의 주요 구성 요소
    • Target
      • 전체적인 공통기능을 추가한다. 
      • 핵심기능을 포함하는 메소드를 포함하고 있는 객체
      • 공통기능 적용대상 객체이다. 
      • 현재까지 우리가 생성한 것이 target객체이다.
    • Advice
      • 핵심기능이 실행시 같이 실행될 공통기능이 구현된 객체이다. 
      • when + what정보를 포함하고 있다. (언제, 무엇을)
      • 핵심로직실행전(when)로그를 출력하는(what)공통기능
      • 핵심로직실행중 예외가 발생했을 때 다른 예외로 변경해서 던지는 공통기능
      • 핵심로직실행전후로 실행시점을 계산해서 총 실행시간을 출력하는 공통기능
      • 만들어야한다. 
    • joinPoint
      • 공통기능이 적용될 지점
      • spring은 메소드의 실행시점에 joinpoint를 지원한다. 
      • 다른 joinpoint는 라이브러리를 이용한다. 
        • target의 메소드가 조인포인트라고 생각하면된다.
    • Pointcut
      • 공통기능을 적용한 규칙
      • where정보를 포함하고 있다. 
    • Aspect
      • AOP적용을 위한 패키지로 Advice와 pointCut를 합친 것이다. 
      • 어디에 언제 어떻게 적용할 것인지에 대한 것이 포함되어 있다. 
      • 무조건 만들어야한다.
    • weaving
      • target에 aspect를 적용시켜서 proxy의 객체를 생성시키는 것이다. 
      • 배틀짜는 것을 의미하는 단어이다. 연결해주다.
    • proxy
      • 핵심기능과 공통기능이 같이 포함되어 있는 객체이다.

spring이 위빙해서 proxy의 객체를 생성한다. 
context-root에서 txManager가 공통기능이 정의된 객체이다.  

반응형
Comments