이 게시물에 확인할 프록시의 의미는 프록시 패턴, 스프링 프록시 네트워크 프록시 등에서 프록시 패턴을 다루게 됩니다.
프록시 패턴
프록시 패턴이란 클라이언트가 사용하는 실제 서비스 객체를 대신하는 객체를 제공하는 구조적 디자인 패턴을 의미합니다.
여기서 프록시는 클라이언트 요청을 수신하고 일부 작업을 수행한 다음 요청 서비스 객체에 전달하는 역할을 합니다.
위 그림은 프록시 객체가 실제 객체에 어떻게 참조되고 있는지 표현되고 있느지 표시한 것 입니다.
프록시 객체는 클라이언트가 실제 오브젝트에 접근을 했을때 오브젝트 대신에 접근 로그를 남기거나, 실제 객체에서 가져온 데이터를 캐싱하거나, 등등의 작업을 하며 실제 객체의 대리인 역할을 합니다.
아래 그림에서 보다시피 실제 데이터를 캐싱하여 빠르게 요청을 대신하여 반환해주거나, 원격으로 서비스를 처리할수도 있고, 무거운 데이터의 경우 지연로딩을 하는등 여러가지 일을 합니다.
적용 예시
이러한 서비스 객체가 있다고 해보겠습니다. 이 서비스 객체에서 할때마다 값을 재사용하고 싶어 캐싱기능을 넣고 싶다고 할때, 프록시 객체를 이용해서 캐싱 작업을 추가로 하게되는데요.
이때 프록시 객체를 추가하기 위해선 원래 객체와 같은 인터페이스를 구현해줘야합니다. 원래 객체를 주입받아, 인터페이스의 메소드들을 사용하고 추가 작업을 할 수 있도록 하기 때문입니다.
따라서 OCP 원칙을 준수하며 작성된다고 보면 될거같습니다.
이렇게 하게되면 기존 서비스 로직들에 어떠한 변경사항없이 캐싱, 로깅 등등의 추가작업을 구성할 수 있게 됩니다.
그러나 이러한 프록시 패턴은 추가 기능을 쉽게 추가할 수는 있지만, 프록시 객체에서 중복코드나 다른클래스의 동일 기능을 사용하고자 할때면 매변 추가로 작성해줘야하기 때문에 효율적이지 못하다고 할 수 있습니다.
따라서 이러한 경우 스프링 AOP를 적용하면 쉽게 단점을 없앨 수 있는데요.
스프링 AOP는 따로 블로그를 정리해서 다시 올리도록 하겠습니다.
'나의 공부' 카테고리의 다른 글
NCP에서 크레딧을 지원받았다.. (1) | 2023.06.19 |
---|---|
제네릭이란 뭘까.. (0) | 2023.05.18 |
동기와 비동기, Blocking과 Non-Blocking의 차이 (0) | 2023.05.04 |
객체지향 설계 원칙 SOLID (0) | 2023.04.27 |
JPA? 왜사용할까. (0) | 2023.04.21 |
댓글