ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 멀티 쓰레드
    Spring/MVC1-웹 어플리케이션 이해 2023. 6. 7. 00:06
    728x90
    쓰레드란,
    프로세스(process) 내에서 실제로 작업을 수행하는 주체를 말한다.

    이러한 쓰레드의 특징으로는,

    • 코드를 순차적으로 실행한다
    • 자바는 기본적으로 main(main 메소드) 이라는 이름의 쓰레드가 실행
    • 코드를 한줄 한줄 읽어 나가기 때문에, 동시에 처리해야하는 상황이 생긴다면,
      별도의 쓰레드를 추가로 생성해야함

     

     

    김영한 - 로드맵의 MVC 수업 자료 中

    위의 그림처럼, 하나의 쓰레드는 하나의 요청을 받아서 처리할 수 있다.

    하지만,

    1. 여러 요청이 들어오고,

    2. 앞의 요청의 처리가 지연되고 있다면,

    서버에서는 TIMEOUT이 발생하여 쓰레드가 다운되어 버린다. 

     

     

     

     

     

    위에서 다중 요청이 들어왔을 때, 2가지 방법이 존재한다.

    방법1. 요청 마다 쓰레드 생성하기

     

    장단점

     

    장점

    • 요청마다 쓰레드를 생성하기 때문에 동시요청 처리 가능!
    • CPU, 메모리가 버텨주는 한에서 모든 요청 처리 가능
    • 쓰레드들은 각자가 개별적으로 동작하기 때문에 하나가 죽더라도 나머지 쓰레드는 정상 동작함

    하지만, 단점도 존재한다.

    단점

    • 쓰레드 생성 비용 비쌈
    • 요청이 들어왔을 때 쓰레드를 생성하게 되면, 응답 속도가 느리다
    • 컨텍스트 스위칭 발생
      ※ CPU에서 실행되는 프로세스 변경과정에서 컨텍스트 스위칭이 발생하는데, 
          컨텍스트 스위칭이 과도하게 일어날 경우, 오버헤드가 발생
    • 서버의 한계를 넘어선 요청이 들어올 경우, 서버가 죽음

     

    방법2. 쓰레드 풀

    일정량의 쓰레드를 만들어 관리하면서 쓰레드가 필요하면 가져다 쓰고 사용이 끝나면

    쓰레드를 종료하는 것이 아니라, 쓰레드 풀에 반납하는 방법

     

    장단점

     

    장점

    • 서버의 성능에 맞게 쓰레드의 갯수를 조정할 수 있다.
      톰캣의 경우는 최대 200개가 기본 설정으로 되어 있음
    • 최대 허용 쓰레드가 넘게 되면, 이후 요청을 거절하거나, 일정 갯수만큼 대기시킬 수 있다
    • 쓰레드가 요청이 들어올 때 생성되는게 아니라 초기에 생성되어 관리되고 있으므로,
      CPU 의 부담이 적고, 요청속도가 빠르다

    단점

    • 개발자의 쓰레드풀 관리가 중요!
      적어도 CPU 사용을 확인하며 적어도 50%는 사용을 해주는 것이 바람직

     

    핵심은,
    스프링의 WAS는 멀티 쓰레드 기능을 지원한다!

    이전에도 언급했지만, 멀티 쓰레드 환경에서는 Spring 컨테이너에서 지원하는 싱글톤 객체의 사용에 주의하여야 한다!

     

     

     

     

    쓰레드풀의 적정숫자를 유지해주는 것이 핵심

    쓰레드풀의 적정 숫자를 어떻게 확인할까?

    애플리케이션의 로직의 복잡도, CPU성능, 메모리, IO 리소스 상황에 따라
    적성숫자는 다르게 된다.

    때문에, 성능 테스트를 지원하는 툴을 사용하는 것이 좋음

    'Spring > MVC1-웹 어플리케이션 이해' 카테고리의 다른 글

    서블릿(Servlet)  (0) 2023.06.06
    웹서버 vs 웹 어플리케이션 서버  (0) 2023.06.06
Designed by Tistory.