티스토리 뷰

반응형

브라우저에서 보안상의 이유로 하나의 HTML에 다른 서버의 URL 호출이 불가능 하게 설정되어 있습니다. 외부서버(DJango등 다른 종류의 서버도 가능) 호출이 필요할 때 경로에 "proxy" 를 삽입하면 해당 application.properties 에 정의한 서버로 전환시켜 주는 기능입니다.

  • http://localhost:8080/prediction/proxy/AAA -> http://165.246.xxx.xxx:8000/AAA

이 기능의 문제점은 외부서버에서 받은 내용(JSon) 등이 다시 재가공 되면서 length 가 틀어지는 문제가 있을 수 있습니다. 특히 DJango 등 JSon 처리 방식이 스프링부트와 다를때 문제가 발생하는 것으로, 재가공 하는 기능을 막는 방법은 아직 찾지 못하였으나 DJango 에서 결과 리턴할때 방식을 변경하여 해결이 가능하리라 생각됩니다.

application.properties:

#DJango API 서버
django.deepcredit.server=165.246.xxx.xxx:8000

 

controller:

package com.qhedge.online.deepCredit.controller;

@Slf4j
@Controller
@PropertySource("classpath:/application.properties")
public class DeepCreditController {

	private String prefix="/deepCredit/proxy";

	@Autowired
	@Value("${django.deepcredit.server}")
	public String server;

	@Autowired
	private DeepCreditService deepCreditService;

	void setHeaders(ProxyExchange<?> proxy) {
        proxy.header("proxy", "DeepCredit");
	}

	@GetMapping("/deepCredit/proxy/**")
	public ResponseEntity<?> proxyPathGet(@RequestParam MultiValueMap<String, String> allParams, ProxyExchange<?> proxy) throws Exception {
		String path = proxy.path(prefix);
		proxy.header("Cache-Control", "no-cache");
		proxy.header("dataType", "");
		setHeaders(proxy);
		UriComponents uriComponents = UriComponentsBuilder.fromHttpUrl("http://" + server + path).queryParams(allParams).build();
		return proxy.uri(uriComponents.toUri().toString()).get();
	}

	@DeleteMapping("/deepCredit/proxy/**")
	public ResponseEntity<?> proxyPathDel(@RequestParam MultiValueMap<String, String> allParams, ProxyExchange<?> proxy) throws Exception {
		String path = proxy.path(prefix);
		proxy.header("Cache-Control", "no-cache");
		setHeaders(proxy);
		UriComponents uriComponents = UriComponentsBuilder.fromHttpUrl("http://" + server + path).queryParams(allParams).build();
		return proxy.uri(uriComponents.toUri().toString()).delete();
	}

	@PutMapping("/deepCredit/proxy/**")
	public ResponseEntity<?> proxyPathPut(ProxyExchange<?> proxy)
			throws Exception {
		String path = proxy.path(prefix);
		setHeaders(proxy);
		return proxy.uri("http://" + server + path).put();
	}

	@PostMapping("/deepCredit/proxy/**")
	public ResponseEntity<?> proxyPathPost(ProxyExchange<?> proxy)
			throws Exception {
		String path = proxy.path(prefix);
		setHeaders(proxy);
		return proxy.uri("http://" + server + path).post();
	}
    
    
	/**
	 * 데이터 관리
	 *
	 * @return mv
	 * @throws Exception
	 */
	@RequestMapping("/deepCredit/dataMgmt.do")
	public ModelAndView dataStatistic() throws Exception {
		ModelAndView mv = new ModelAndView("deepCredit/dataMgmt");

		List<DatasetVersionDto> datasetVersionList = deepCreditService.selectDatasetVerionList();
		mv.addObject("datasetVersionList", datasetVersionList);

		return mv;
	}
}
반응형
댓글
댓글쓰기 폼