스레드 - 애플리케이션 코드를 하나하나 순차적으로 실행하는 것!
자바 애플리케이션을 실행한다고 생각해도 -> 실행을 누르면 Main 스레드가 생성됨!
스레드가 없다면 자바 애플리케이션을 실행할 수 없음
쓰레드는 한번에 하나의 코드라인만 수행함
쓰레드는 한번에 하나의 코드 라인만 수행
동시처리가 필요한 경우 쓰레드가 추가로 생성됨!
단일 스레드를 사용하는 경우
단일 요청 - 요청 -> 스레드 할당 -> 서블릿 호출 -> 작업 완료 -> 스레드 반환 -> 스레드 유휴상태(IDLE 전환)
다중 요청
요청 1) 요청 -> 스레드 할당 -> 서블릿 호출 -> 호출 처리중 ----------------> Timeout!
요청 2) 요청 -> 스레드 대기 -> ----------------------------- TimeOut!! (수행불가)
스레드를 단일 스레드로 사용하면 TIMEOUT등의 문제로 다중요청 처리에 문제가 생길 수 있다!
따라서 스프링은 다음과 같이 요청마다 스레드를 생성한다!
장점
- 동시 요청을 처리할 수 있다
- 리소스(CPU, 메모리)가 허용되는 한도 내에서까지 처리가 가능하다
- 하나의 쓰레드가 지연되어도, 나머지 쓰레드는 정상 동작한다.
단점
- 쓰레드 생성 비용은 컨텍스트 스위칭 등의 CPU 등 자원 비용이 크다
-> 고객의 요청이 들어올때마다 스레드를 생성하면 응답 속도가 늦어진다.
- 쓰레드 생성에 제한이 없다
-> 고객 요청이 너무 많이 오면, CPU, 메모리 임계점을 넘어서 서버가 죽을수도 있다 (치킨 디도스)
WAS는 고객 요청이 들어올때마다 쓰레드를 생성하기 보다,
이미 설정된 값의 스레드를 먼저 쓰레드 풀에다가 보관하고 관리하면서 연결이 들어오면 쓰레드 풀에서 꺼내서 제공한다.
(톰캣 최대 200개 기본 설정 / Changable)
쓰레드가 필요하면 이미 쓰레드 풀에 생성되어있는 스레드를 꺼내서 사용하며, 사용 종료시 쓰레드 풀에 해당 쓰레드 반납
최대 쓰레드가 모두 사용중인 경우 기다리는 요청은 거절하거나 특정 숫자만큼 대기하도록 설정 가능
장점
- 스레드가 이미 생성되어있기 때문에, 쓰레드를 생성하고 종료하는 비용이 절약됨 (응답시간도 빠름)
- 생성 가능한 쓰레드의 최대치가 정해져있기 때문에 이 허용치내에서는 많은 요청이 들어와도 기존 요청의 정상실행을 보장함.
쓰레드 풀 팁)
WAS의 주요 튜닝 포인트 = Max Thread #
높게 설정하면 서버가 죽거나 낮게 설정하면 리소스를 제대로 활용하지 못할 수 있음
장애 발생시 클라우드면 서버를 늘릴수있는데 클라우드가 아니라면 그냥 열심히 평소에 튜닝하는게 중요
멀티스레드는 WAS가 처리 -> 개발자가 Thread 신경 안써도 됨(근데 공유필드는 신경써야 함)
싱글톤은 주의해서 사용 필요
'스프링 공부 (인프런 김영한 선생님) > 스프링 MVC 1편' 카테고리의 다른 글
[스프링 웹 MVC 1편] 6. HTTP 요청 데이터 (0) | 2023.05.20 |
---|---|
[스프링 웹 MVC 1편] 5. HttpServletRequest - 개요/기본사용법 (0) | 2023.05.19 |
[스프링 웹 MVC 1편] 4. Hello 서블릿 (0) | 2023.05.17 |
[스프링 웹 MVC 1편] 2. 서블릿 / 서블릿 컨테이너 (0) | 2023.05.16 |
[스프링 웹 MVC 1편] 1. 웹 서버, 웹 애플리케이션 서버 (0) | 2023.05.16 |