티스토리 뷰
반응형
최근에 트래픽이 특정 시점에 몰리는 경우 발생한 문제에 대해 찾아보다가 의외로 단순한 문제로 해결되는 방법을 찾게 되었습니다. 이전 글에서도 작성하였다시피 Controller 에서 아래와 같은 방식과 같이 개발을 하는 경우가 많습니다.
@GetMapping("/test")
public String test() {
return "redirect:/url/" + UUID.randomUUID();
}
몇 건의 경우 문제가 없겠지만 한 번에 다량의 Request가 들어오게 된다면 스프링에서 제공해주는 동시성 유틸리티에 과부하가 되어 Out of memory, 즉, 힙 영역에 과다한 부하가 들어오게 되어 FullGC가 발생하게 됩니다.
이런 방식을 개선하기 위해 RedirectView 또는 ModelAndView 클래스를 사용하도록 권장되어 있습니다. 위와 같은 @RequestMapping을 사용하지 말라는 방법이 아닙니다.
특정적으로 난수를 많이 생성하고 (UUID Class, Math.random() Method 등) 그거에 맞춰서 리다이렉션을 진행하는 클래스를 아래처럼 변경해줍니다.
@GetMapping("random")
public ModelAndView random() {
ModelAndView mav = new ModelAndView();
RedirectView rv = new RedirectView();
rv.setUrl("result/" + UUID.randomUUID());
mav.setView(rv);
return mav;
}
자세한 내용은 아래 문서에 있어서 참고를 많이 하였습니다 :)
https://taetaetae.github.io/2019/01/10/spring-redirect-oom/
https://github.com/spring-projects/spring-framework/issues/14698
반응형
'Server' 카테고리의 다른 글
Ubuntu 20.04 Jenkins 설치하기 (0) | 2021.08.18 |
---|---|
Ubuntu 20.04 Redis 설치하고 구성하기 (0) | 2021.08.18 |
Ubuntu 20.04 Java 설치 (0) | 2021.08.18 |
[Spring] @Order 를 사용하여 보안 필터링 적용하기 (0) | 2021.06.30 |
[Java] 날짜와 관련된 클래스들 (0) | 2021.06.30 |
Nginx를 활용한 에러 페이지 출력하기 (0) | 2021.06.26 |
댓글
공지사항