Skip to content
This repository has been 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

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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