728x90
인프런 김영한 강사님의 스프링MVC 강의를 듣고학습한 내용을 정리한 게시물입니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
오랜만에 강의자료를 읽어보면서 정리하지 않았던 부분을 다시 정리하려고 한다. 이번 게시글의 목차는 아래와 같다.
- 쓰레드
- 쓰레드풀
1. 스레드
스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위이다. 애플리케이션 코드를 하나하나 순차적으로 실행하며, 서블릿 객체를 호출하는 것도 스레드이다.
스레드로 자바 애플리케이션을 실행한다는 것은 스레드가 없다면 자바 애플리케이션 실행이 불가능하다는 의미이다.
스레드는 한 번에 하나의 코드 라인만 수행이 가능하다.
하나의 스레드는 하나의 요청만 처리할 수 있어서 다중 요청이 들어오는 경우 처리가 지연될 수 있다. 이럴 때마다 매번 스레드를 생성하게 된다면 어떻게 될까 ?
요청마다 스레드를 생성한다면 ?
장점
- 동시 요청 처리 가능
- 하나의 스레드가 지연되어도 나머지 스레드는 정상적으로 동작 가능
단점
- 스레드는 생성비용이 매우 비쌈
- 요청마다 스레드를 생성하면 응답 속도 늦어짐
- 스레드는 컨텍스트 스위칭 비용 발생
- 컨텍스트 스위칭 비용 : 한 스레드가 처리하는 내용을 바꿀 때 드는 비용
- 스레드 생성에 제한 X
- 고객 요청이 너무 많이 오면 CPU, 메모리 임계점을 넘어 서버가 다운 될 수 있음
-> 스레드의 개수를 지정해두고, 이를 돌려쓰면 되지 않나 ?
그래서 나온게 바로 스레드풀!
2. 스레드풀
이렇게 생성 가능한 스레드의 최대 개수를 제한해두는 것이 스레드풀이다!
사용과정
- 스레드가 필요하면 이미 생성되어있는 스레드를 스레드풀에서 꺼내어 사용
- 사용을 종료하면 스레드풀에 해당 스레드 반납
- 최대 스레드가 모두 사용중이라면
- 기다리는 요청은 거절하거나 특정 숫자만큼 대기하도록 설정 가능
장점
- 스레드가 미리 생성되어 있어서 스레드를 생성하고 종료하는 비용 절약, 응답시간 빠름
- 생성 가능 최대 개수가 정해져있어 기존 요청 안전하게 처리 가능
+) 김영한 강사님의 실무 팁
WAS의 주요 튜닝 포인트 = 최대 스레드 개수
요청이 많은 경우 CPU 50%는 사용해야함 ✅
- 너무 낮은 경우 : 동시 요청이 많을 때 서버 리소스는 여유롭지만 클라이언트는 금방 응답 지연
- 너무 높은 경우 : 동시 요청이 많을 때 CPU, 메모리 리소스 임계점 초과로 서버 다운
장애 발생시 클라우드라면 서버를 늘린 후 튜닝, 아니라면 열심히 튜닝하기 !