클라이언트가 무언가를 요청할 경우 프로세스 내에서 직접 작업을 수행하는 주체를 스레드라고 한다. 이러한 스레드는 모든 프로세스 안에서 하나 이상 존재하여 작업을 수행한다.
이제부터 이러한 스레드와 함께 두 개 이상의 스레드를 가지는 멀티 스레드까지 알아보도록 하자
스레드
- 클라이언트의 요청을 프로세스 내에서 직접 작업을 수행하는 주체
- 애플리케이션 코드를 하나하나 순차적으로 실행한다. -> 한 번에 하나의 코드 라인만 수행
- 스레드가 없으면 자바 애플리케이션 실행이 불가능하다.
멀티 스레드
멀티 스레드는 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것이다. 이러한 멀티 스레드의 경우에는 각각의 스레드가 자신이 속한 프로세스의 메모리를 공유하므로 시스템 자원의 낭비가 적다.
장점
- 동시 요청을 처리할 수가 있다.
- 리소스(CPU, 메모리)가 허용될 때까지 처리 가능
- 하나의 스레드가 지연되어도 다른 스레드는 정상적으로 작동할 수가 있다.
단점
- 스레드 생성 비용이 비싸다. -> 클라이언트의 요청이 올 때마다 스레드를 생성하면 응답 속도가 늦어진다.
- 스레드는 콘텍스트 스위치 비용이 발생한다.
- 스레드 생성에 제한이 없다. -> 클라이언트 요청이 너무 많을 경우 CPU나 메모리 임계점을 넘겨 서버가 죽을 수 있다.
스레드 풀
클라이언트의 요청이 많아지면 스레드가 증가하게 되고 이에 따라 CPU나 메모리의 사용량이 증가하여 애플리케이션 성능 저하 혹은 서버가 다운될 수가 있다. 이러한 스레드의 폭증을 막기 위해 스레드를 제한된 개수만큼만 정해놓고 유지해 주는 역할을 하는 스레드 풀이 필요하다.
특징
- 필요한 스레드를 스레드 풀에 보관하고 관리한다.
- 스레드 풀에 생성 가능한 스레드의 최대치를 관리한다. (톰캣은 최대 200개가 기본 설정)
- WAS의 주요 튜닝 포인트는 최대 스레드(max thread) 수이다
- 최대 스레드를 너무 낮게 설정할 경우 -> 동시 요청이 많으면 서버 리소스는 여유롭지만 클라이언트는 응답이 지연된다.
- 최대 스레드를 너무 높게 설정할 경우 -> 동시 요청이 많으면 CPU, 메모리 리소스 임계점 초과로 인해 서버가 다운된다.
사용
- 스레드가 필요할 경우 스레드 풀에 생성되어 있는 스레드를 사용한다.
- 해당 스레드의 사용이 종료되면 스레드 풀에 다시 반납한다.
- 스레드 풀에 생성되어 있는 모든 스레드가 사용중일 경우 대기하고 있는 요청들을 거절하거나 설정해 놓은 특정 숫자만큼 대기시킬 수 있다.
장점
- 스레드를 생성하고 종료하는 비용이 절약되며 응답 시간이 빠르다.
- 생성 가능한 스레드의 최대치를 미리 설정하므로 많은 요청이 들어와도 기존 요청은 안전하게 처리할 수가 있다.
이러한 멀티 스레드는 WAS가 처리하므로 개발자가 멀티 스레드 관련 코드를 신경 쓰지 않아도 된다. 그러므로 개발자는 싱글 스레드 프로그래밍을 하듯이 개발을 진행하면 된다.
출처 : 인프런 우아한 형제들 최연소 기술이사 김영한의 스프링 완전 정복(스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술)
'Development > Web' 카테고리의 다른 글
| [Web]Redirect와 Forward의 차이와 사용법 (0) | 2023.05.15 |
|---|---|
| [Web]서블릿(Servlet)과 서블릿 컨테이너란? (0) | 2023.04.16 |
| [Web]Web Server와 Web Application Server (0) | 2023.04.16 |