Spring프레임워크
spring 에서 proxy 패턴 활용
비가온다
2019. 9. 28. 09:05
Proxy 패턴은 아래와 같은 경우 사용 될 수 있다.
- 실제 객체 접근시 권한 체크가 필요 할 때
- 실제 객체 동작이 무겁고 복잡하여, 캐싱이 필요 할 때
- 기타, 실제 객체 동작 이외에 다른 작업이 필요 할 때
실제로 개발을 하다 Controller 에서 Dao 접근을 해야 하는데, 로컬개발 환경이다 보니
권한체크 문제가 있었다.
이 문제를 해결하려고 하면 배보다 배꼽이 더 커지기 때문에
Proxy 패턴을 이용하여 ProxyDao 를 만들어서 내가 원하는 작업만 하도록 바꾸어 보았다.
대충 이런 식이다. (문법은 틀릴 수도 있다. 흐름만 보자)
Interface Dao {
public List<String> work(String param);
}
@Component
Class DaoImpl implements Dao {
@Override
public List<String> work(String param) {
//복잡한 비즈니스 로직(권한체크 등등)
}
}
@Component
@Primary
Class ProxyDaoImpl implements Dao {
@Autowired
DaoImpl daoImpl;
@Override
public List<String> work(String param) {
//권한체크 무효화 코드 return daoImpl.work(param);
}
}
@Controller
Class WorkController {
@Autowired
Dao dao;
public void exec() {
dao.work();
}
}
@Primary 를 붙여서 DaoImpl 대신 ProxyDaoImpl 을 주입하도록 하였다.Proxy 패턴을 사용하여, 기존의 Controller 과 Dao 는 전혀 건드리지 않으면서 구현이 가능하다.Spring 프레임워크를 사용 한다면 이 방법 말고 AOP 방식으로도 구현이 가능하다.