>>>>>>>>>>>>>>>> Spring Framework >>>>>>>>>>>>>>>


- 개요 : 유연한 특성을 가지는 프레임워크

 

* AOP
  . Aspect Oriented Programming 관점지향
  . 공통적인 기능을 한곳에서 정의
  . 새로운 기능을 적용하려고 하는 클래스를 수정할 필요없이
    그런 기능을 어디에 어떻게 적용할 것인지 선언적으로 정의 가능

               A        B        C
                    |
                    z 기능 추가해 (기존의 소스를 재코딩, 다시 컴파일, 재배치)

 
               D        E        F
                     |
                     z

               . 마감이 임박한 프로그램에
               . 새로운 기능이 추가되면 재코딩->재컴파일->재배포 하는 번거로움.
               . 기존의 소스를 건드리지 않고 z기능을 추가하는 기능
               . z기능을 따로 만들어서 필요한 위치에 집어 넣어줌
               . 들어갈 가능성이 있는 지점을 joinpoint라 한다 (즉 메소드가 끝나는 지점)
               . pointcut : 실제 끼어드는 순간
               . z기능 : code 또는 advice
               . 좀더 쉽게 구현하기 위해
               . spring AOP에 Aspectj를 함께 사용하면 환경설정이 훨씬 쉬워진다


* DI
  . Dependence Injection 의존성 주입
  . 인터페이스는 다형성을 이용해서 사용
  . 의존을 하고 있는 상황
  . 의존이 많이 발생하는 상황이 되면 빼도막도 못하는 상황이 발생
  . 의존을 낮추는 방향으로 프로그램 개발
  . 참조해서 객체 만들지마라
  . 객체를 만들어서 주입만 해줌
  . 객체를 주입받기 위해서 setter만 있으면 됨

----------------------------------------------------

 

1. AOP 용어 개요

 

- 핵심관심 : Major ConCern
                 예) 게시판에 글쓰기, 글보기, 글삭제, 글수정...
- 횡단관심 : Cross-Cutting Concern
                 예) 로깅, 인증, 예외처리...
- 기존의 코드 : 핵심 관심과 횡단 관심이 결합되어 있는 형태는
                     =>유지보수 어려움이 있다
               (중복발생, 지저분함, 생산성 저하, 재사용 힘듬, 변화 힘듬)

                    Code : 핵심관심을 구현한 것
                    Advice : 횡단관심을 구현한 것
                    Joinpoint : Advice가 Code에 끼어 들 수 있는 순간들
                    Pointcut : Joinpoint중에서 실제 Advice가 Code에 끼어드는 순간
                    Aspect : Advice + Pointcut
                    weaving : Code에 Aspect를 적용하는 과정

 

2. AOP 용어

 

  1) 결합점 (Join point)

    인스턴스의 생성시점, 메소드를 호출하는 시점, Exception이 발생하는 시점과 같이
    애플리케이션이 실행될 때 특정작업이 실행되는 시점을 의미한다.

 

  2) 교차점 (pointcut)

    충고가 어떤 결합점에 적용되어야 하는지 정의.
    명시적인 클래스의 이름, 메소드의 이름이나 클래스나 메소드의 이름과
    패턴이 일치하는 결합점을 지정 가능토록 해준다
    (스프링 설정파일 안에서 XML로 작성)

 

  3) 충고 (Advice)

    충고는 교차점에서 지정한 결합점에서 실행(삽입)되어야 하는 코드이다.
    Aspect의 실제 구현체

 

  4) 에스팩트 (Aspect)

    에스팩트는 AOP의 중심단위. Advice와 pointcut을 합친 것이다.
    구현하고자 하는 횡단 관심사의 기능. 애플리케이션의 모듈화 하고자 하는 부분

 

  5) 대상(target)

    충고를 받는 클래스를 대상(target)이라고 한다.
    대상은 사용자가 작성한 클래스는 물론, 별도의 기능을 추가하고자 하는
    써드파티 클래스가 될 수 있다.

 

  6) 엮기 (Weaving)

    에스펙트를 대상 객체에 적용하여 새로운 프록시 객체를 생성하는 과정을 말한다.
    Aspect는 대상 객체의 지정된 결합점에 엮인다.

 

3. Advice의 종류

 

- Before advice : joinpoint이전에 실행이 되며 예외를 던지지 않는 이상
                         joinpoint이후에 실행될 작업을 막을 방법이 없다

- After returning advice : joinpoint가 정상적으로 완료된 후에 실행이 된다.
                                   예외를 던지는 상황은 정상적인 상황에서 제외된다.

- After throwing advice : 어떤 메소드가 예외를 던지면 실행이 된다.

- Around advice : 메소드 호출과 같이 joinpoint를 감싸는 Advice. advice중에 가장 능력이 좋다
                          메소드 호출 전과 후에 어떤 것을 실행할 수 있다.
                          joinpoint 이 후에 실행될 작업을 계속 수행할지 말지 정할 수 있다.
                         수행하지 않을 때는 자신이 수행할 메소드 대신에 값을 반환하거나 예외를 던질 수 있다.

- 이중에서 필요한 기능을 수행할 수 있는 가장 최소화된 능력을 발휘하는
  Advice를 사용하는 것을 권장한다
  예를 들어) 어떤 메소드가 값을 반환한 이후 cache를 업데이트 하려고 할 때
                 Around advice를 사용할 수도 있겠지만 After returning advice를 사용한다
  이렇게 가장 구체적인 Advice타입을 사용하는 것은 잠재적으로 발생할 에러를 방지 할수 있다.

 

 

 

+ Recent posts