Skip to content
This repository was archived by the owner on Dec 13, 2020. It is now read-only.

springframework-storage/SpringBoot-AOP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

03eaac6 · Dec 5, 2018

History

10 Commits
Oct 17, 2018
Nov 17, 2018
Oct 17, 2018
Dec 5, 2018
Oct 17, 2018
Oct 17, 2018
Oct 17, 2018
Oct 17, 2018

Repository files navigation

Spring AOP 의 이해

  • Spring 의 핵심 개념 중 하나인 DI 가 애플리케이션 모듈 간의 결합도를 낮춰준다면,
  • AOP 는 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용하도록 지원하는 것입니다.

AOP (Aspect-Oriented Programming)

  • 관점(관심) 지향 프로그래밍으로 해석되는데 단어가 와닿지 않아서 이해하기 어렵습니다.
  • 다르게 말하면 프로젝트 구조를 바라보는 관점을 바꾼다라고 할 수 있습니다.
    • 즉, 대상을 바라보는 방향을 바꾸자.

지금부터는 코드를 봤다는 전제 하에 설명이 진행됩니다.
부가기능의 관점에서 바라보면 각각의 Service 는 수행 시간 측정을 나타내는 before, after 메소드가 중복됩니다.
AOP 는 여기서부터 시작합니다.

  • 기존 OOP 에서 바라보던 관점을 다르게 하여 부가기능적인 측면에서 봤을 때 공통된 요소를 추출하자는 것입니다.
  • 이때 가로(횡단) 영역의 공통된 부분을 잘라냈다고 하여, AOP 를 Cross-Cutting 이라고 부르기도 합니다.

요약하자면 다음과 같습니다.

  • OOP : 비즈니스 로직의 모듈화
    • 모듈화의 핵심 단위는 비즈니스 로직
  • AOP : 인프라 혹은 부가기능의 모듈화
    • 예: 로깅, 트랜잭션, 보안 등
    • 각각의 모듈의 주 목적 외에 필요한 부가적인 기능들

AOP 는 언제 사용되는가

  • 성능 검사
  • 트랜잭션 처리
  • 로깅
  • 예외 반환
  • 검증

실 예로, @Transactional, @Cache 같은 어노테이션들은 AOP 를 활용하여 동작합니다.

AOP 의 장점

  • 애플리케이션 전체에 흩어진 공통 기능이 하나의 장소에서 관리된다는 점
  • 다른 서비스 모듈들이 본인의 목적에만 충실하고 그외 사항들은 신경쓰지 않아도 된다는 점

AOP 용어

  • 아래 용어들은 Spring 에서만 사용되는 것이 아닌 AOP 프레임워크 전체에서 사용되는 공용어입니다.

타겟 (Target)

  • 부가기능을 부여할 대상을 말합니다.
  • 여기선 핵심기능을 담당하는 getBoards, getUsers 를 하는 Service 를 말합니다.

애스펙트 (Aspect)

  • 객체 지향 모듈을 오브젝트라고 부르는 것과 비슷하게 부가기능 모듈을 애스펙트라고 부릅니다.
    • 핵심기능에 부가되어 의미를 갖는 특별한 모듈이라 생각하면 됩니다.
  • 부가될 기능을 정의한 어드바이스 와 어드바이스를 어디에 적용할 지를 결정하는 포인트컷 을 함께 갖고 있습니다.
  • 참고로 AOP (Aspect Oriented Programming) 라는 뜻 자체가 애플리케이션의 핵심적인 기능에서 부가적인 기능을 분리하여, 애스펙트라는 독특한 모듈로 만들어서 설계하고 개발하는 방법을 뜻합니다.

어드바이스 (Advice)

  • 실질적으로 부가기능을 담은 구현체를 말합니다.
  • 타겟 오브젝트에 종속되지 않기 때문에 순수하게 부가기능에만 집중할 수 있습니다.
  • 애스펙트가 무엇언제 할지를 정의하고 있습니다.
  • 각 JoinPoint 에 삽입되어 동작할 수 있는 코드

포인트컷 (PointCut)

  • 부가기능이 적용될 대상(메소드)를 선정하는 방법을 뜻합니다.
  • 즉, 어드바이스를 적용할 조인포인트를 선별하는 기능을 정의한 모듈을 말합니다.
  • 어떤 클래스의 어느 JoinPoint 를 사용할 것인지 결정

조인포인트 (JoinPoint)

  • 어드바이스가 적용될 수 있는 위치를 뜻합니다.
  • 다른 AOP 프레임워크와 달리 Spring 에서는 메소드 조인포인트만 제공 하고 있습니다.
    • 따라서 Spring 프레임워크 내에서 조인포인트라 하면 메소드를 가리킨다고 생각해도 됩니다.
  • 모듈의 기능이 삽입되어 동작할 수 있는 실행 가능한 특정 위치

프록시 (Proxy)

  • 타겟을 감싸서 타겟의 요청을 대신 받아주는 Wrapping 오브젝트입니다.
  • 호출자(Client)에서 타겟을 호출하게 되면 타겟이 아닌 타겟을 감싸고 있는 프록시가 호출되어,
    타겟 메소드 실행 전에 선처리, 타겟 메소드 실행 후, 후처리를 실행시키도록 구성되어 있습니다.

인트로덕션 (Introduction)

  • 타겟 클래스의 코드 변경없이 신규 메소드나 멤버 변수를 추가하는 기능을 말합니다.

위빙 (Weaving)

  • 지정된 객체에 애스펙트를 적용하여 새로운 프록시 객체를 생성하는 과정을 말합니다.
  • PointCut 에 의해 결정된 JoinPoint 에 지정된 Advice 를 삽입하는 과정 (CrossCutting)
  • 예를 들어, A 라는 객체에 트랜잭션 애스펙트가 지정되어 있다고 가정합니다.
    • A 라는 객체가 실행되기 전, 커넥션을 오픈하고
      실행이 끝나면 커넥션을 종료하는 기능이 추가된 프록시 객체가 생성되고,
      이 프록시 객체가 앞으로 A 객체가 호출되는 시점에 사용됩니다.
      이때의 프록시 객체가 생성되는 과정을 위빙 이라고 생각하면 됩니다.
  • 컴파일 타임, 클래스 로드 타임, 런타임과 같은 시점에서 실행되지만, Spring AOP 는 런타임에서 프록시 객체가 생성됩니다.

Releases

No releases published

Packages

No packages published

Languages