티스토리 뷰

반응형

서블릿&서블릿 컨테이너의 글에서 WAS가 멀티스레드를 자동으로 지원 및 관리한다고 했는데

직접 이 멀테쓰레드의 코드를 짤 상황은 없겠지만 이 멀티쓰레드가 어떤 것인지 좀 더 자세하게 알아보고자 한다

 

Multi-Thread(멀티 스레드)

서블릿을 호출하는 것이 바로 스레드이다

스레드는 애플리케이션 코드를 하나하나 순차적으로 실행하며

한 번에 하나의 코드라인만 실행하게 된다

그렇기 때문에 여러 가지 요청을 동시에 처리를 하려면 스레드를 추가적으로 생성하여 실행하는데

이것이 바로 멀티스레드이다

 

WAS가 기본적으로 스레드를 자동적으로 만들어주지만

스레드의 경우 생성의 제한이 없기 때문에 너무 많은 요청이 들어오게 되면

cpu 혹은 메모리의 임계점을 넘겨버려 서버가 죽어버릴 수 있다

 

또한 하나의 코어가 하나의 스레드를 수행하는 만큼 다른 스레드로 넘어갈 때 cpu와 메모리를 낭비하게 된다

 

이를 방지하기 위해서 사용하는 것이 바로 스레드 풀이다

 

Thread Pool(스레드 풀)

Pool이라는 말처럼 미리 스레드를 생성하여 저장해놓았다가

요청이 왔을 때 미리 생성되었던 스레드를 꺼내 사용하고 사용이 완료되면 다시 쓰레드풀에 반납을 하게 된다

또한 쓰레드 풀에 생성 가능한 최대치를 관리할 수 있고(톰캣의 경우 Max 200개가 default 값이며 변경이 가능하다)

만약 모든 스레드를 사용하고 있다면 요청을 거부하거나 원하는 만큼의 대기열을 만들 수 있다

이렇게 쓰레드 풀을 사용하면 쓰레드를 미리 생성하여 요청 시마다 생성하는 비용이 절약되고 응답 시간 또한 빠르다는 장점이 있다

또한 생성 제한이 없던 기존의 스레드와는 달리 최대치를 설정할 수 있어 기존 요청을 안전하게 처리할 수 있다

 

그렇다면 쓰레드 풀은 어떻게 설정하는 것이 가장 효율적일까?

WAS의 주요 튜닝 포인트 또한 최대 스레드 수라고 한다

만약 이 값을 너무 낮게 설정하면 서버 리소스를 낭비하게 되고

반대로 너무 높게 설정하면 서버의 임계점을 초과하기 때문에 서버가 다운된다

 

애플리케이션의 로직이 가지고 있는 복잡도라던지 서버가 가지고 있는 리소스 등 상황이 모두 다르기 때문에 절대 숫자는 없다

그리하여 최대한 실제 서비스와 유사하게 성능 테스트를 시도하여 스레드 풀의 적정 숫자를 찾는다고 한다

 

핵심정리

스레드는 서블릿을 하나하나 호출하여 코드를 실행하게 해 준다

이 스레드는 생성제한이 없어 동시에 많은 양의 요청이 오게 되면 서버의 임계점을 넘어 서버가 다운된다

 

이를 방지하고 쓰레드 생성 비용을 최대한 효율적으로 사용하기 위하여

미리 스레드를 생성해 놓는 쓰레드 풀을 사용한다

 

이 쓰레드 풀을 활용하여 서버는 리소스를 효율적으로 운용하고

많은 요청이 오더라도 제한된 쓰레드를 운영하며 기존의 요청을 안전하게 처리한다

 

멀티 스레드는 결국 WAS가 관리하기 때문에 개발자가 직접 코드를 짜서 관리할 일은 없다

 

반응형

'WEB' 카테고리의 다른 글

[WEB] 마크업 언어(Markup Language)  (0) 2021.10.13
[WEB] CSR과 SSR  (0) 2021.08.19
[WEB] 서블릿(Servlet) 과 서블릿 컨테이너(Servlet Container)  (0) 2021.08.03
[WEB] Web Server 와 WAS  (0) 2021.08.03
댓글