DevBoi

[Spring] AOP 예제 및 복습 본문

Develop

[Spring] AOP 예제 및 복습

HiSmith 2021. 12. 14. 15:39
반응형

1. AOP 에 대한 개념

 

AOP란 aspect Oriented Programming의 약자로, 관점 지향 프로그래밍이다.

쉽게 말하면 어떤 로직을 핵심적인 관점으로 나눠서 모듈화를 한다는 것이다.

 

관점은 대부분 이렇다 = 비즈니스 로직, DB연결, 로깅, 파일 입출력 등등

다른 부분에서 공통적으로 쓰는 로직들을 묶어서 모듈화하고, 이를 관점화 하는 것을 AOP라고 한다.

 

2. 주요 핵심 개념

 

1. aspect : 위에서 설명한 흩어진 관심사를 모듈화 하는작업

2. target : aspect를 적용하는 곳 (class 단위 or 메소드 단위 등등 패턴으로도 적용가능)

3. advice : 실질적으로 어떤일을 해야할지에 대한 것, 실질적인 부가기능을 담은 구현체이다.

4.jointPoint :advice가 적용될 위치, 끼어들 수 있는 지점 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올때 등 다양한 시점에 적용가능

5.pointCut : JointPoint의 상세한 스펙을 정의한것, A란 메서드의 진입 시점에 호출할 것과 같이 더욱 구체적으로 adVice가 실행될 지점을 정할수 있다

 

 

3. 특정 

프록시 패턴 기반의 AOP 구현체, 접근 제어 + 부가기능을 추가하기 위해서

스프링 빈에만 AOP를 적용 가능

모든 AOP 기능을 제공하는 것이 아닌 스프링 IOC와 연동해서 엔터프라이즈 애플리케이션에서 가장 흔한 문제에 대한 해결책을 지원

(프록시 객체 생성, 중복 코드 문제 관계 복잡도 등에 대한 해결 책 지원)

 

4.실습

 

4-1 의존성추가

4-2 AOP 클래스 생성

우선 다음 포스팅에서, Component와 bean에 대해서 자세히 포스팅하겠지만

우선 Component를 통해서 내가 만든 클래스를 bean으로 등록하고,

@Around를 통해서, 해당 패턴으로 특정 패키지의 메소드 전체를  이 AOP를 타게끔 개발이 가능하다.

 

 

추가로 특정 어노테이션을 붙이면 aop가 붙게끔 개발이 가능하다.

retention과 target도 알아봐야겠지만, 해당 특정 어노테이션을 만들고, 해당 어노테이션을 사용한 메소드일때

해당 aop가 돌게끔 동작하는 것도 가능하다.

 

 

@Around 이외에, 다른 시점 즉 메소드 단위로 묶었을떄 다른 시점에서도 해당 aop가 동작하게끔 개발이 가능하다.

 

@Before (이전) : 어드바이스 타겟 메소드가 호출되기 전에 어드바이스 기능을 수행

@After (무조건 이후): 어드바이스 타겟 메소드가 결과에 관계 없이, 메소드 완료 후에 기능 수행

@AfterReturning (정상적 반환 이후) : 타겟 메소드가 성공적으로 결과값응ㄹ 반환한 후에 어드바이스 기능을 수행

@AfterThroing (예외 발생이후) : 타겟 메소드가 수행중 예외를 던지게 되면 어드바이스 기능을 수행

@Around (메소드 실행 전후) : 타겟 메소드를 감싸서 메소드 실행 전과 실행 후에 해당 어드바이스 기능을 수행한다. 

반응형