AOP(Aspect Oriented Programming)/Spring

2023. 11. 20. 17:04기술공부

AOP란?

◆ 관점 지향 프로그래밍이라고 불린다

◆ 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눠보고 그 관점을 기준으로 각각 모듈화 하겠다는 의미이다.

 

핵심 비즈니스 로직이든, 부가 기능의 로직이든 하나의 객체로 분리하는데 그치는 객체지향 프로그래밍을 보완하기 위해 쓰인다.

핵심적인 관점

◆ 개발자가 적용하고자 하는 핵심 비즈니스 로직이다. 

 

부가적인 관점

 

◆ 애플리케이션을 관통하는 부가 기능 로직 -> 횡단 관심사(로깅, 트랜잭션, 보안)

◆ DB연결, 로깅, 파일 입출력 등이 있다.

 

다양한 AOP적용 방법

◆ 컴파일 시점 적용 : AspectJ컴파일러가 일반 .java파일을 컴파일 할 때 부가기능을 넣어서 .class 파일로 컴파일해주는 것을 의미한다. 이 동작을 위빙이라고 부른다.

 

◆ 클래스 로딩 시점 적용 : JVM내 클래스 로더에 .class 파일을 올리는 시점에 바이트 코드를 조작해 부가기능 로직을 추가하는 방식이다.

 

◆ 런타임 시점 적용 : 컴파일, 클래스 로딩, main() 메서드의 실행 이후에 자바가 제공하는 범위내에 부가 기능을 적용하는 방식이다. 프록시를 통해 부가 기능을 적용하는 방식이다. -> spring AOP가 사용하는 방식

 

● Aspect : 여러 곳에서 쓰이는 공통 부분 코드를 모듈화한 것

● Target : Aspect가 적용되는 곳

● Advice : Aspect에서 실질적인 기능에 대한 구현체, Aspect를 언제 핵심 코드에 적용할 지 정의

● Join Point : Advice가 Target에 적용되는 시점 ex) 메서드에 진입할 때, 생성자 호출할 때, 필드에서 값을 꺼낼 때 등...

● Point cut : Joint Point의 상세 스펙을 정의한 것

● Advisor : 스프링 AOP에서만 쓰는 용어로, 하나의 advice와 하나의 point cut으로 구성된 aspect를 

 

AOP 사용

1. 의존성 작성

 

2. 메인문에 @EnableAspectJAutoProxy 어노테이션 작성

- @EnableAspectJAutoProxy 란? : 스프링이 자동으로 개발자의 매서드를 호출하기 전에 개로챌 수 있게 하는 옵션

 

3. Aspect클래스 작성

@Pointcut으로 AOP를 적용하고자 하는 클래스를 지정하였다.

@Around로 타겟을 불러오고 세션체크를 할 것이기때문에 동시에 httpServletRequest도 함께 불러와줬다.

세션이 존재하는지 체크를 한 후 존재하면 jointPoint.proceed()를 통해 비즈니스로직을 불러오고

존재하지 않으면 에러코드를 리턴한다.

'기술공부' 카테고리의 다른 글

지수 백오프(Exponential Backoff)  (0) 2024.03.05
@NoArgsConstructor(access=Level.PROTECTED)  (0) 2023.11.26
WEB 서버와 WAS의 차이  (0) 2023.11.13
쿠키와 세션 그리고 jwt  (0) 2023.11.05
매트릭 데이터 수집  (0) 2023.01.11