스프링MVC

멀티 쓰레드

salmon16 2023. 7. 31. 21:03

서블릿 객체는 쓰레드가 호출하게 된다.

동시 요청이 오면 쓰레드 하나로는 지연이 될 수 있으므로

동시 처리가 필요하면 쓰레드를 추가로 생성한다.

하지만 요청 마다 쓰레드를 생성하면 쓰레드 생성 비용이 비싸기 때문에 응답 속도가 늦어질 수 있다.

그리고 쓰레드 생성에 제한이 없기 때문에 너무 많은 쓰레드가 생성되면 서버가 죽을 수 있다.

 

그래서 보통의 WAS들은 쓰레드 풀을 이용해서 쓰레드를 이용한다.

쓰레드 풀에 미리 쓰레드를 일정 개수 생성을 해 두고 요청이 올 때마다 연결이 되어있지 않은 쓰레드에 연결을 해서 처리를 해 주고 사용 후 쓰레드 풀에 다시 반납한다.

쓰레드 풀에 모든 쓰레드가 연결되어있으면 쓰레드 대기를 하거나 거절을 한다.

 

이 방식을 사용하면 미리 쓰레드가 생성되어 있으므로 쓰레드를 생성하고 종료하는 비용이 절약된다.

그리고 생성 가능한 쓰레드의 최대치가 있으므로 많은 요청이 들어오면 기존 요청은 안전하게 처리할 수 있다.

 

쓰레드의 최대치를 너무 낮게 설정하면  CPU가 놀게 되는 문제가 발생하고

너무 높게 설정하면 서버 다운이 발생할 수 있다.

 

WAS가 멀티 쓰레드를 지원해 주므로 개발자는 싱글 쓰레드 프로그래밍을 하면 되지만 싱글톤 객체에 대해서는 주의해서 사용해야 한다. (공유 변수 사용 금지 등)

 

출처 : 스프링MVC 1편 - 백엔드 웹 개발 핵심 기술 김영한

'스프링MVC' 카테고리의 다른 글

JSP 사용하기  (0) 2023.08.02
HttpServletResponse 사용  (0) 2023.08.02
HTTP 요청 데이터  (0) 2023.08.02
서블릿 사용해 보기  (0) 2023.08.01
웹 애플리케이션과 서블릿  (0) 2023.07.31