-
Aspect Oriented Programming(AOP) 에 대하여스터디 노트 2023. 11. 23. 22:17
📌 들어가며
해당 내용은 '스프링부트로 개발하는 MSA 컴포넌트' 책을 참고하여 작성되었습니다.
📌 Aspect Oriented Programming(AOP)
AOP란 무엇일까요?
AOP란 프로그램의 구조를 관점 기준으로 공통 관심사를 분리하여 기능을 제공하는 방식으로 구현하는 것을 말합니다.
즉, 횡단관심사들을 따로 모아놓은 기능 모듈이라고 생각하면 되겠지요.
핵심 비즈니스 로직 가운데 공통의 횡단 관심사의 기능들을 모아 제공하는 방식이라 생각하면 됩니다.
우린 이 AOP를 사용하여 클래스의 코드와 관점의 코드를 완전히 분리해낼 수 있습니다.
관점지향 프로그래밍을 위해서는 다음 설계 고려사항을 명심해야 합니다.
✅ 기능의 분류
애플리케이션의 기능적 요구사항과 비기능적 요구사항을 분류합니다. 기능적 요구사항은 핵심 로직을 의미하고, 비기능적 요구사항은 비즈니스 로직은 아니지만 애플리케이션 기능 실행 시 반드시 필요한 기능을 의미합니다.
✅ 공통 기능의 분류
공통 기능은 일반화를 통해 모듈화하는 과정이 필요합니다. 분류된 공통 기능을 별도의 관점 클래스로 작성하고 통일된 기능을 제공해야 합니다.
✅ 공통 기능의 적용
어떤 클래스에 어떤 공통 기능을 적용할지, 어떤 메서드에 어떤 공통 기능을 적용할지 설계해야 합니다.
스프링 프레임워크에선 관점지향 프로그래밍을 제공하기 위해 스프링 AOP 모듈을 제공하며, 이를 통해 관점 클래스를 보다 손쉽게 작성할 수 있고 손쉽게 핵심 비즈니스 로직과 서로 엮을 수 있습니다.
스프링 프레임워크의 기능 중 대표적인 스프링 AOP의 예시는 트랜잭션 관리와 캐시 추상화 기능입니다.
@Transactional과 @Cacheable 어노테이션을 통해 간단하게 정의만 하면 바로 사용할 수 있지요.
📌 AOP의 핵심용어 정리
AOP의 용어를 간략하게 정리해보도록 하겠습니다.
사실 오늘 이 콘텐츠를 정리하는 가장 큰 이유는 이 AOP의 핵심 용어가 머리 속에 들어오질 않아서였습니다.
이렇게 글로 설명하듯 정리를 하면 머리속에 그래도 잘 남는 것 같습니다 ㅎ
✅ 대상 객체(Target Object)
공통 모듈을 적용할 대상 객체를 의미합니다.
✅ 관점(Aspect)
핵심이 되는 개념인 '관점(Aspect)'은 AOP 프로그래밍으로 작성한 공통 모듈과 그 모듈의 기능이 적용될 위치의 조합을 말합니다. 관점은 뒤에서 살펴볼 어드바이스와 포인트컷이 합쳐진 것을 말합니다.
✅ 어드바이스(Advice)
애플리케이션의 공통 로직이 작성된 모듈을 의미합니다. 즉 관심사의 분리를 통해 하나로 모아진 기능을 말하며, 스프링 AOP에서 어드바이스는 메서드 형태로 작성합니다. 관점(Aspect)와 어드바이스(Advice)의 가장 큰 차이는 어드바이스가 적용될 위치 정보인 포인트컷의 유무입니다.
✅ 포인트 컷(Point Cut)
어드바이스를 적용할 위치를 선정하는 설정으로 어드바이스는 포인트컷으로 적용될 위치가 결정되고, 그 시점에 어드바이스가 실행됩니다. 포인트컷은 포인트컷 표현식을 사용해 설정하며 특정 애너테이션으로 지정할 수도 있습니다.
✅ 조인포인트(JoinPoint)
어드바이스가 적용된 위치를 의미합니다. 포인트컷은 조인포인트를 선정하는 것을 의미하고 어드바이스가 적용된 부분을 조인포인트라고 합니다.
✅ 위빙(Weaving)
조인포인트에 실행할 코드인 어드바이스를 끼워넣는 행위를 위빙이라 합니다.
✅ 프록시 객체(Proxy Object)
스프링 AOP는 관점 클래스와 대상 클래스의 기능을 조합하기 위해 동적으로 프록시 객체를 만들고, 이 프록세 객체가 관점 클래스와 대상 클래스의 기능을 적절하게 실행하게 됩니다.
어드바이스의 경우 관점의 일부이자 공통 로직이 작성된 모듈을 의미합니다. 어드바이스는 호출되는 대상 메서드의 앞뒤에 로직을 추가할 수 있습니다.
스프링 AOP에서 사용할 수 있는 어드바이스 타입은 총 다섯가지가 있습니다.
✅ Before Advice
서버 클래스의 메서드 실행 전 어드바이스 모듈 먼저 실행
✅ After Advice
서버 클래스의 메서드 실행 후 어드바이스 모듈 실행
✅ After Returning Advice
서버 클래스의 메서드가 정상 실행되어 결과 리턴 시 모듈 실행
✅ After Throwing Advice
서버 클래스의 메서드가 예외를 발생시킬 시 모듈 실행
✅ Around Advice
앞서 설명한 모든 어드바이스의 실행 시점을 합친 기능입니다.
'스터디 노트' 카테고리의 다른 글
@Transactional 애너테이션에 대하여 (1) 2023.12.04 Java에서 Serializable은 무엇일까? 직렬화 vs 역직렬화 (1) 2023.12.04 모놀리식 아키텍쳐 vs 마이크로 서비스 아키텍쳐 (Monolithic Architecture vs Micro Service Architecture) (1) 2023.11.23 [Java] CompletableFuture 에 대하여 (0) 2023.11.22 [ClickHouse] 클릭하우스 자바 클라이언트 만들어 데이터 다루기 예제! ClickHouse + Java + Http Client Exam (2) 2023.11.21