[Spring] HttpServletRequest 요청마다 같은 주소값을 반환하는 이유
2023. 2. 25. 16:48
부트캠프가 끝나고 예전에 수강했던 김영한님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 다시 듣고 있었다.
서블릿 부분을 보던 중 의아한 부분이 있었다.
스프링의 내장 톰캣 서버는 서블릿들을 스캔하여 서블릿 컨테이너에 싱글톤으로 관리하면서 요청마다 WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체를 호출한다. 즉, 요청마다 request와 response객체는 요청마다 다른 객체가 만들어져서 servlet을 호출한다고 이해했다.
위와 같이 코드를 작성하고 요청 결과를 확인하다가 request, response가 같은 객체를 사용하고 있는 것을 확인했다.
강의에서는 요청마다 request, response를 생성해서 servlet을 호출한다고 했는데 같은 객체를 사용하길래 궁금해서 찾아본 결과 나와 같이 궁금했던 사람이 질문한 글을 발견했다.
정리하면 톰캣의 RequestFacade객체는 최적화를 위해 객체를 계속 생성하지 않고 요청이 끝나면 Facade객체를 초기화하고 다른 요청이 오면 재사용한다고 한다.
sleep을 적용하고 요청을 반복하면 사용되는 객체가 다른 것을 확인할 수 있다.
'Programming > Spring' 카테고리의 다른 글
[Querydsl] Querydsl 동적으로 정렬하는 방법 (1) | 2023.03.06 |
---|---|
[Spring] RequestContextHolder를 통해 HttpServletRequest, Response 가져오기 (0) | 2023.02.17 |
[Spring] 같은 타입의 빈 문제 해결 방법(@Primary, @Qualifier) (0) | 2023.02.15 |
[Spring] 스프링 컨테이너와 빈 (0) | 2023.02.13 |
[Spring] 예외처리 - ExceptionHandler, ControllerAdvice (0) | 2022.10.30 |