웹 브라우저(클라이언트)에서 서버에 요청을 하면, tcp/ip 커넥션 연결이 되고 서블릿을 호출해주고 was서버는 응답을 해준다.
그런데, 서블릿을 호출하는 주체는 누구인가?
바로 바로 쓰레드...!!
쓰레드란?
- 어플리케이션 코드를 하나하나 순차적으로 실행하는 것은 쓰레드
- 자바 메인 메서드를 처음 실행시 main이라는 쓰레드가 실행
- 쓰레드가 없다면 자바 어플리케이션 실행이 불가능
- 쓰레드는 한번에 하나의 코드 라인만 실행
- 동시 처리가 필요하면 쓰레드를 추가로 생성
단일 요청 - 쓰레드 하나 사용시
단일 요청시에는 큰 문제는 없어보인다.
다중 요청 - 쓰레드 하나 사용시
문제는 다중 요청! 쓰레드를 하나만 사용한다고 했을 때 request1이 처리되는 동안 request2는 대기중인 상태로 그마저도 처리가 지연되면 둘다 클라이언트 요청은 실패하게 된다
요청마다 신규 쓰레드 생성
장점 | 단점 |
동시 요청을 할 수 있다 | 쓰레드는 생성 비용이 매우 비싸다 (고객의 요청이 올 때마다 쓰레드를 생성하면, 응답속도 느려짐) |
리소스(CPU, 메모리)가 허용할 때 까지 처리가능 | 쓰레드는 컨텍스트 스위칭 비용이 발생 |
하나의 쓰레드가 지연 되어도 나머지 쓰레드는 정상 동작한다 | 쓰레드 생성에 제한이 없다 (고객 요청이 많이 오면 cpu, 메모리 임계점을 넘어 서버가 죽을 수 있음) |
이 점을 해결하기 위해 was에는 쓰레드 풀이 존재한다.
쓰레드 풀
마치 수영장(쓰레드 풀)에 놀고 있는 쓰레드에게 요청이 들어오면 실행을 하게하고, 실행가능한 쓰레드가 없을 때는 얼마나 더 요청을 받고 대기시킬 것인지 설정을 할 수 도 있다!!! ---> tomcat max connection
- 특징
- 필요한 쓰레드를 쓰레드 풀에 보관하고 관리한다
- 쓰레드 풀에 생성 가능한 쓰레드의 최대치를 관리한다. 톰캣은 최대 200개 기본 설정(변경 가능)
- 사용
- 쓰레드가 필요하면, 이미 생성되어 있는 쓰레드를 쓰레드 풀에서 꺼내서 사용한다.
- 사용을 종료하면 쓰레드 풀에 해당하는 쓰레드를 반납한다.
- 최대 쓰레드가 모두 사용중이어서 쓰레드 풀에 쓰레드가 없다면 기다리는 요청은 거절하거나 특정 숫자만큼 대기하도록 설정 가능하다.
- 장점
- 쓰레드가 미리 생성되어 있으믄로 쓰레드를 생성하고 종료하는 비용 (cpu)이 절약되고, 응답 시간이 빠르다
- 생성 가능한 쓰레드의 최대치가 있으므로 너무 많은 요청이 들어와도 기존 요청은 안전하게 처리 할 수 있다
was 의 멀티 쓰레드 지원
- 멀티 쓰레드에 대한 부분은 was가 처리
- 개발자가 멀티 쓰레드 관련 코드를 신경쓰지 않아도 되고, 마치 싱글 쓰레드 프로그래밍 하듯 편하게 개발
- 멀티 쓰레드 환경이므로 싱클톤 객체(서블릿, 스프링 빈)은 주의해서 사용
와우 다중처리는 내부에서 이렇게 처리되는구나 톰캣은 생각보다 더 위대한 것이었다
어떻게 쓰레드풀을 만들 생각을 했을까 !... 와우....
@ 스프링 MVC 1편 - 백엔드 웹개발 by 김영한을 참조하고 있습니다.
'Spring > mvc' 카테고리의 다른 글
[Spring MVC 1] - 스프링부트 환경에서 서블릿 등록 후 사용 (0) | 2022.07.30 |
---|---|
[Spring MVC 1] - 서블릿 프로젝트 생성 (0) | 2022.07.30 |
[Spring MVC 1] - HTML, HTTP API, CSR, SSR (0) | 2022.07.29 |
[Spring MVC 1] - 서블릿 (0) | 2022.07.27 |
[Spring MVC 1] - 웹 서버, 웹 어플리케이션 서버 (0) | 2022.07.26 |