Html 헤더와 바디가 포함된 화면 자체를 캐시화 해야하는 문제발생
Dofilter에서 특정 url을 골라낸후 ContentCachingResponseWrapper 객체를 생성하여 response를 담고
Request와 response를 arguments로 filter.dofilter로 넘기고 결과값을 담은 response를 헤더와 바디를 분리하여 바이트화시켯고 그 값을 캐시화시켜서 파일로 만들었다,
그러고 특정 url이 호출되면 특정 경로에 특정 파일이 존재하는지 확인하여 없으면 파일을 만들면서 보여주고 있으면 만들어진 캐시 파일을 보여주도록 했다.
그러던중 서버부하문제로
매일 특정 조건의 보여줘야할 품목데이터(약 150~200개)를 뽑아서 해당 데이터를 스케줄러로 캐시화시켜서 만들어놔야하는 문제가 발생하였고,
해당 과정은 필터에서 일어나므로 특정 url을 주기적으로 호출해줘야하는 문제에 직면했다. 당연히 스케줄러를 생각했고,
스케줄러로 해당 품목을 리스트를 뽑아서 리다이렉트 시키려고 하였으나 자바의 어노테이션 스케줄러는 메서드 형식이 void에다가 return값이 없어야한다는것을 잊고있었다,
Response.sendRedirect, New modelAndView라던지 RedirectView같은 방법은 매개변수를 받을 수 없는 점과 리턴값이 없어야한다는 전제때문에 모두 불가능했고,
RestTemplate의 getForObject를 사용하려했으나 이 방법은 json형식으로 데이터를 받아왔다,
Api호출로는 적합해보았으나, 해당 화면은 타임리프로 랜더링된 화면을 캐시화했어야하는 점때문에 사용이 불가능하였다.
SseEmitter도 비슷한 이유로 사용이 불가능하였고,
HttpURLConnection을 사용하여 Get방식으로 해당 화면을 호출하고 bufferReader에 담는 방법으로 미리 캐시화하는 방법에 대하여 성공하였다.
'관련_배경_지식' 카테고리의 다른 글
쿠버네티스란? (0) | 2023.11.10 |
---|---|
커넥션 풀이란? (0) | 2023.11.10 |
웹 취약점이란? (0) | 2023.11.10 |
웹 접근성(web accessibility)이란 (0) | 2023.11.10 |
도커(Docker)란 (0) | 2023.11.10 |