클라이언트에서 request이 오고 TCP/IP 연결로 was의 servlet를 호출하고 응답을 보내줍니다.

 

여기서 이 클라이언트 요청에대한 servlet를 호출을 쓰레드가 합니다. 즉, 어떤 작업을 하는 행위의 주체입니다. 

더 쉽게 해보겠습니다.

 

"한우리워리워즈"라는 가게에 남태현이라는 사람이(쓰레드) 있습니다. 그리고 "한우리워리워즈"라는 가게는 10명~20의 고객이 앉을 수 있는 자리가 있습니다.

남태현은, 청소부터 서빙, 요리 등등 모든것을 맡아서 할 수 있습니다. 매일 10명씩의 고객의 주문(요청)을 남태현했었습니다. 하지만, "한우리워리워즈"의 요리가 유명해 지면서 고객들이 증가하기 시작했고, 남태현 혼자서는 고객들의 접대를 할 수 없게 되었습니다. 그래서 자리가 없을 때에는, 고객들은 웨이팅을 하거나, 가게에서 거절을 당해 돌아갔어야 했습니다.

그래서 어쩔 수 없이, 김철(쓰레드)이라는 직원을 고용하여, 2명의직원으로(멀티 쓰레드) 가게를 운영했습니다. 직원을 한명 더 고용했기 때문에, 동시에 고객의 요청을 더 많이 처리할 수 있게 되었지만, 그만큼의 직원의 월급에 대한 지출도 커지게 되었습니다. 그렇게 계속적으로 고객의 요청이 증가하여, 김철 이후로 윤여민, 이태훈, 임병준, 정성찬을 고용했습니다.

이들을 고용한 후 몇일 뒤 가게가 갑작스럽게 다시 장사가 잘 되지않아, 남태현 혼자서도 충분히 고객들의 요청에대한 처리가 가능하게 되었습니다. 그 때문에, 김철 또는 남태현, 윤여민, 이태훈, 임병준, 정성찬 중에 한명은 일을 하고 나머지는 놀고 있는 상태가 되었습니다.

 

이처럼, 고객의 증가로 요청이 증가하면 직원을 더 많이 고용해서 동시에 많은 요청을 처리 하지만, 요청이 줄었을 때를 생각해야됩니다. 왜냐하면, 일을 하지 않는 직원이 생겨 불필요한 월급지출이 크기 때문입니다.

그래서 풀타임 직원이 아닌, 바쁜 시간때 또는 필요할 때마다 불러서 쓸 수 있는 직원들을 고용해 놓았습니다(쓰레드풀). 고객이 요청이 증가할 때, 파트타임 직원들이 나와서 동시에 여러 요청을 처리할 수 있고, 요청이 없을 때는 다시 돌아가면 되니 지출면에서도 효율적으로 되었습니다.

 

개발자들은 쓰레드풀에 몇명에 쓰레드(직원)을 파트타임으로 고용해야 될 지 생각해야 됩니다. 그것이 최대 쓰레드(max thread)입니다.

이 값을 너무 낮게 설정하게 되면, 고객들의 많은 요청을 동시 처리가 부족하여 고객들은 웨이팅을 해야 되거나, 거절을 당해서 집으로 돌아가야됩니다.

반대로, 이 값을 너무 높게 설정하면 많은 여러명의 직원들이 나와서 모든 고객의 요청을 받아 처리를 하려고 하지만, 가게에서 수용할 수 있는 고객의 수가 초과하게 되면 가게는 멘붕(CPU, 메모리 리소스 임계점 초과로)에 빠지게 됩니다. 

 

또 하나의 예로는, 세계적으로 인기있는 게임, 리그오브 레전드라는 게임으로 예를 들어 보겠습니다.

우리는 캐릭터를 선택하고 적과 싸웁니다. 적과 싸울때나, 아무것도 안할 때 보면 골드가 1원씩 계속 올라가고 있습니다. 또 체력, 마나도 회복하고 있습니다. 이것이 쓰레드를 활용한 예입니다.

 

*제가 이해하고 있는 내용이 잘못되었거나, 설명이 이상하면 따끔하게 혼내주세요!

'Back-end > Web' 카테고리의 다른 글

HTTP에서 HTTPS로 구현  (0) 2021.09.11

+ Recent posts