Proxy
프록시(Proxy)는 대리자 라는 뜻으로, 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 역할을 합니다.
프록시는 실제 대상인 것처럼 위장함으로써 이를 사용하는 클라이언트는 구체 클래스를 알 필요가 없어집니다. 또한 프록시는 클라이언트의 요청을 받아서 원래 요청 대상에게 바로 넘겨주는 게 아닌, 다양한 부가기능을 지원할 수 있습니다.
여기서 원래 요청하려는 대상, 즉 최종적으로 요청을 위임받아 처리하는 실제 오브젝트를 타깃이라고 합니다.
🏷️ 프록시 패턴
프록시 객체가 객체를 감싸서 클라이언트의 요청을 처리하게 하는 패턴으로 접근 제어, 부가 기능 추가 등의 이유로 사용합니다.
원래 객체와 같은 interface를 구현해줘야 하고 객체를 주입받아 interface의 메소드들을 위임받아 사용하고 코드를 추가해 줍니다. 이렇게 해주면 원래 코드에 손을 쓰지 않고도 기능을 추가할 수는 있지만 , 프록시 객체에 중복코드가 발생할 수 있고 다른 클래스에서도 동일한 기능을 사용하기 위해 매번 코딩을 해줘야 하는 부분에서 효율적이지 못합니다.
이때, 이를 해결해주는게 스프링 AOP로 런타임 시 동적으로 프록시 객체를 만들어 줍니다.
✅ Spring AOP
Spring AOP는 Proxy를 기반으로 한 Runtime Weaving 방식입니다.
- 프록시 패턴 기반의 AOP 구현체
- 스프링 빈에만 AOP를 적용 가능
- 메소드 조인포인트만 제공
- AOP적용 전에는 DispatcherServlet에서 Controller로 요청이 넘어갔습니다.
- AOP적용 후에는 요청을 중간에 낚아 채게됩니다.
- AOP는 DispatcherServlet와 Controller 사이에서 실행됩니다.
📖 Reference
'코딩 공부 > web & Java' 카테고리의 다른 글
[Java] 팩토리 메소드 (0) | 2024.07.13 |
---|---|
[JPA] N + 1 문제 (0) | 2024.04.23 |
[Java] DTO를 Record로 만드는 이유 (0) | 2024.04.17 |
[Java] Lombok (0) | 2024.03.10 |
[JPA] findById와 getReferenceById (0) | 2024.03.09 |