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 |