📣 트래픽이 많은 요청을 어떻게 해결해야되는지의 기본개념
- 쓰레드는 애플리케이션 코드를 하나씩 "순차적으로 실행" 하는 것이며,
자바의 main 메소드를 실행하면 main 이라는 쓰레드가 실행되는것입니다.- 쓰레드가 없다면 자바 애플리케이션 실행이 불가능하며,
동시 처리가 필요하면 "쓰레드를 추가로 생성 가능" 합니다.
( 요청 마다 쓰레드를 생성 )
클라이언트의 요청이 들어오면, WAS에서 응답을 하고 서블릿을 호출합니다.
- 이 호출을 쓰레드가 합니다.
간단하게 말해
프로세스는 프로그램을 실행,
쓰레드는 프로세스 내에서 여러가지 작업을 하는 개념
✔ 앞의 처리가 끝나야 뒤의 처리가 진행됩니다.
이러한 문제점의 해결방법은 ?
- 동시 요청을 처리할 수 있습니다.
- 리소스(CPU,메모리)가 허용할 때 까지 처리가능
- 하나의 쓰레드가 지연 되어도, 나머지 쓰레드는 정상 동작합니다.
( 주요 장점 )
- 쓰레드의 생성 비용은 매우 비싸다고 합니다. ( CPU를 많이 사용 )
- 응답의 속도가 늦어짐
- 쓰레드는 컨텍스트 스위칭 비용이 발생한다.
( 쓰레드의 순서를 바꾸는 행동 )- 쓰레드 생성에 제한이 없다.
- 고객의 요청이 많아지게되면, CPU 과부화로 서버가 다운 될수 있습니다.
고객의 요청이 들어오게되면, "쓰레드 풀"에 요청을 합니다.
- 쓰레드풀 에서 쓰레드를 꺼내서 사용하고, 사용 후에는 쓰레드 풀에 쓰레드를 반납 합니다.
( 종료 하는것이 아님 )
- 쓰레드 풀에 쓰레드를 다 사용시, 다른 요청이 들어오게 되면 요청에 대해 대기하거나 거절 할수 있습니다.
- 고객의 요청마다 쓰레드를 생성하는것을 방지 합니다.
- 쓰레드를 생성할때 사용되는 CPU가 절약되고, 응답이 빠릅니다.
❗ 주의
멀티 쓰레드 환경이므로 싱글톤 객체 (서블릿, 스프링 빈), 멤버변수 는 주의해서 사용 해야 한다.
📍 이 값을 너무 낮게 설정 하면 ?
고객의 동시 요청이 많으면, 서버는 여유롭지만, 고객의 요청이 금방 응답 지연 될수 있음
( CPU를 너무 적게 사용, AWS 인스턴스를 많이사용하게 되는 불상사가 발생)
📍 이 값을 너무 높게 설정 하면 ?
고객의 동시 요청이 많으면, CPU 과부화로 서버가 다운 될수 있음
상황에 따라 모두 다르다고 합니다.
성능 테스트를 통해 최대한 실제 서비스와 유사하게 성능 테스트를 시도합니다.