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 방식으로도 구현이 가능하다.