- AOP(Aspect-Oriented-Programming)란
공통 관심 사항(부가적 로직)을 구현한 코드를 핵심 로직을 구현한 코드 안에 삽입하는 것입니다. - 핵심 기능
- 업무 로직을 포함하는 기능(게시글 작성, 댓글 작성, 예약하기 등 Core Concerns)
- 부가 기능
- 핵심 기능을 도와주는 부가적인 기능(로깅,보안,트랜젝션 등 Cross-cutting Concerns)
- 핵심 기능을 도와주는 부가적인 기능(로깅,보안,트랜젝션 등 Cross-cutting Concerns)
- AOP용어
- Advice
JoinPoint에 삽입되어 동작할 수 있는 코드
관점으로서 분리되고 실행 시 모듈에 Weaving 된 구체적인 처리 - JoinPoint
Advice를 주입(Weaving) 가능한 지점
클래스 인스턴스 생성 시점, 메서드 호출 시점, 예외 시점 등 특정 작업 시점이
시작되는 시점 - PointCut
JoinPoint의 부분 집합
실제로 Advice가 적용되는 JoinPoint - Weaving
Advice를 핵심 로직 코드에 적용하는 것 - Aspect
여러 객체의 공통으로 적용되는 공통 관심사항
트랜잭션, 보안, 로그인 등등 - Advisor
Advice + PointCut
- Advice
- 주입(Weaving)의 세 가지 방법
- 컴파일 시에 주입(Weaving)하기
AspectJ에서 사용하는 방법
핵심 로직을 구현한 자바 소스 코드를 컴파일할 때, 알맞은 위치에 공통 코드를 삽입 - 클래스 로딩 시에 주입(Weaving)하기
원본 클래스 파일은 변경하지 않고 클래스 로딩할 때 JVM이 변경된 바이트 코드를 사용하도록 함. - 런타임 시에 주입(Weaving)하기
Proxy를 이용한 AOP구현 방식
중간에 프락시를 생성한 후 프록시를 통해 핵심 로직을 구현한 객체에 접근
이때, 프락시의 핵심 로직을 실행하기 전 혹은 후에 공통 기능을 적용하는 방식- 프록시 기반의 한계
메서드가 호출될 때만 Advice를 적용할 수 있기 때문에 필드 값 변경과 같은
JoinPoint에 대해서는 적용 불가
- 프록시 기반의 한계
- 컴파일 시에 주입(Weaving)하기
- 클래스 분리(OOP)와 차이점
- OOP (비지니스 로직의 모듈화)
모듈화의 핵심 단위는 비즈니스 로직 - AOP (인프라 혹은 부가기능의 모듈화)
각각의 모듈들의 주목적 외에 필요한 부가적 기능들 - OOP에선 공통된 기능을 재사용하는 방법으로 상속이나 위임을 사용합니다.
하지만 어플리케이션 여기저기에 사용되는 부가기능들을 상속이나 위임으로
처리하기에는 깔끔하게 모듈화가 어렵습니다.
즉 이러한 이유가 AOP의 등장 배경입니다.
- OOP (비지니스 로직의 모듈화)
- 결론
- AOP는 부가 로직을 핵심 로직과 분리함으로써 애플리케이션 전체에 흩어진 공통 기능이 하나의 장소에서 관리됩니다.
- 다른 서비스 모듈들이 본인의 목적에만 충실하고 (객체지향 설계 원칙 중 SRP-단일 책임원칙)
그 외 사항들은 신경 쓰지 않아도 되는 장점이 있습니다.
- 참고
'spring' 카테고리의 다른 글
Filter, Intercepter, AOP 차이점 (0) | 2020.09.23 |
---|---|
MyBatis란? (0) | 2020.08.08 |
OCP 계방폐쇠 원칙 이해하기 (0) | 2020.07.08 |