728x90
반응형
OPP의 한계?
- 여러 클래스에 로깅이나 보안 및 트랜잭션 등 공통된 기능들이 흩어져 존재한다는 점입니다. 이렇게 어플리케이션 전반에 걸쳐 흩어져있는 공통되는 부가 기능들을 관심사라고 합니다.
AOP?
관점 지향 프로그래밍으로 불리며 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누고 그 관점을 기준으로 각각 모듈화 하겠다는 의미입니다.
핵심적인 관점 : 적용하고자 하는 핵심 비즈니스 로직
부가적인 관점 : 로직에 필요한 부가적인 것들 DB연결 및 로깅 등
트랜잭션 관리와 같은 부분이 바로 부가 기능 모듈이며, 이를 Aspect라고 합니다. 핵심 비즈니스 로직을 담고 있지는 않지만 어플리케이션에 부가됨으로써 의미를 갖는 특별한 모듈입니다. AOP는 핵심 비즈니스 로직과 부가 기능 Aspect를 분리하는 등 OOP를 보완하는 역할
결론적으로 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지.
프록시 패턴을 사용하여 기존 코드는 수정하지 않고 메소드들의 성능 측정을 할 수 있다.
Proxy Pattern 이란?
Client는 Subject 인터페이스 타입으로 프록시 객체를 사용하게 되고, 프록시는 Real Subject를 감싸서 클라이언트의 요청을 처리하게 됩니다. 프록시 패턴의 목적은 기존 코드 변경 없이 접근 제어 또는 부가 기능을 추가하기 위해서입니다.
- Aspect : 부가 기능 모듈을 의미한다
- Advice : 실질적으로 어떤 일을 해야하는지를 담고 있다.
- Pointcut : 어디에 적용해야 하는지에 대한 정보를 담고 있다.
- Target : Aspect에 적용이 되는 대상
- Join point : Advice가 적용될 위치, 끼어들 수 있는 지점.
- Around Advice: 대상 객체의 메소드 실행 전, 후 또는 익셉션 발생 시전에 공통 기능을 실행하는데 사용된다.
Spring에서 AOP를 사용하기 위해서는 spring-starter-aop 의존성을 추가해주어야 합니다.
Maven 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
예를 들어 userService class를 만들고 그 클래스 위쪽에
@Around("@annotation(User)") 이라고 선언하면
컨트롤러에 @User 어노테이션을 호출해 주는 것으로 해당 Aspect 를 실행시킬 수 있음
------- 추가 학습 뒤 더 상세하게 올릴 예정
728x90
반응형
'Spring' 카테고리의 다른 글
Spring library 스프링 라이브러리 (0) | 2023.03.02 |
---|---|
@Autowired 와 DI(Dependency Injection) (0) | 2023.02.15 |
Spring Bean (Singleton) 스프링 빈 싱글톤? (0) | 2023.02.07 |
Spring Annotation 정리 (1) | 2023.02.07 |
Spring Security 란? (0) | 2023.02.06 |