프록시 패턴
프록시
클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 대리자
타킷
프록시를 통해 최종적으로 요청을 위임 받아 처리하는 실제 오브젝트
프록시의 사용목적
1. 클라이언트가 타킷에 대한 접근 방법을 제어
2. 부가적인 기능을 부여하기 위함
3. 스프링에서는 AOP에 프록시 패턴 적용
AOP
Aspect Oriented Programming(관전 지향 프로그래밍)
어떤 로직을 기준으로 핵심, 부가적인 관점으로 나누고 그 관점을 기준으로 모듈화하겠다. 소스 코드 상에서 반복적으로 쓰는 코드를 발견할 수 있는데, 이것을 흩어진 관심사(Crosscutting Concerns)라고 부른다.
위와 같이 흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지다.
![](https://blog.kakaocdn.net/dn/bq2v7V/btrnBiE9h2H/ZhvWUY75Z5VeCA9Ac3IfAk/img.png)
AOP 주요 개념
Aspect: Crosscutting Concerns을 모듈화한 것. 주로 부가기능을 모듈화 한다.
Target: Aspect 적용하는 곳(클래스, 메소드, ...)
Advice: 실질적인 부가기능을 담은 구현체
JointPoint: Advice가 적용될 위치
PointCut: JointPoint의 상세 스펙
대표적인 스프링 AOP 예제: @Transactional
- 원래 쿼리를 수행하기전에, setAutoCommit = false
- 쿼리 수행 후 commit or rollback 코드를 넣어준다.
- 비즈니스 로직에 집중할 수 있다.
정리
프록시 패턴이란?
간단하게 말해서, 기존 코드를 건들지 않고 새 기능을 추가하는 것. 어떤 객체에 대한 접근을 제어하는 용도로 대리인 역할을 하는 객체를 제공하는 것.
사장과 비서를 생각해보자. 비서는 부가 기능을 수행하고, 사장은 주요 기능을 처리한다. 사장에게 요청을 바로 할 수 없고, 비서가 요청을 대신 전달해준다.
프록시란?
타킷을 감싸서 타킷의 요청을 대신 받아주는 랩핑(Wrappin) 오브젝트. 비서 역할
타킷이란?
실제 오브젝트.
AOP의 장점은?
- 핵심기능과 부가기능을 분리해서 관리한다. 비즈니스 로직에만 집중할 수 있다.
- App 전체 흩어진 기능들을 하나의 장소에서 관리한다.
참고자료
'Programming > 디자인 패턴' 카테고리의 다른 글
Template Method Pattern (0) | 2024.10.14 |
---|---|
데코레이터 패턴(Decorator Pattern) (0) | 2021.12.18 |
컴포지트 패턴(Composition Pattern) (0) | 2021.12.14 |
커맨드 패턴 (0) | 2021.12.12 |