Programming/Spring MVC

[SpringMVC] 멀티 쓰레드

hyeonic 2021. 3. 14. 09:52
 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com

이 게시글은 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의를 듣고 느낀점과 배운 것들을 다시 한 번 각색하여 정리한 것입니다.


쓰레드

클라이언트는 웹 서버에 특정한 요청을 보내면 TCP/IP가 특정한 커넥션을 연결해준다. 이러한 커넥션을 활용하여 HTTP 요청과 응답을 주고 받는다.

 

WAS는 이러한 요청 마다 하나의 쓰레드를 할당한다. 즉 여러 개의 요청이 들어오면 들어온 만큼 쓰레드를 할당하여 각각 처리한다.

요청 만큼 쓰레드 생성

이러한 형태는 동시 요청을 처리가 가능하고, 서버의 자원이 버티는 수준까지 처리할 수 있게 된다. 하지만 쓰레드를 생성하는데 드는 비용이 상당하다. 또한 쓰레드를 전환하기 위한 컨텍스트 스위칭 또한 비용이 발생하게 된다. 한 번에 많은 요청이 들어오면 서버가 감당할 수 있는 임계점을 넘어서 과부하될 수 있다.

 

이렇게 요청 마다 쓰레드를 늘리게 되면 많은 부분에서 단점이 따라온다. 그렇기 때문에 미리 쓰레드를 생성해서 가지고 있다가 필요할 때 마다 꺼내서 사용하는 방식을 사용한다.

 

쓰레드 풀

쓰레드 풀은 미리 쓰레드를 생성하여 보관하고 관리한다. WAS에서 생성 가능한 쓰레드의 개수를 조절할 수 있다. 다수의 요청으로 인해 쓰레드가 필요하다면, 단순히 생성되 었는 쓰레드를 가져와 사용하면 된다. 모든 작업이 끝나면 다시 쓰레드 풀로 반납된다.

 

쓰레드 풀을 사용하면, 요청 마다 쓰레드를 생성할 때 보다 쓰레드 생성 시간이 줄어들기 때문에 응답 시간이 빨라진다. 그렇기 때문에 이러한 쓰레드 풀의 최대 쓰레드 수는 WAS의 주요한 성능 포인트가 된다.

 

이러한 쓰레드 풀의 적정 숫자를 찾기 위해서는 다방면에서 고려해줘야 한다. 로직의 복잡도나 서버의 자원들의 사양 등에 따라 달라진다. 그렇기 때문에 충분한 성능 테스트를 거쳐서 적절한 쓰레드 풀의 최대 쓰레드 수를 결정하는 것이 중요하다.


정리

가장 중요한 것은 결국 개발자는 WAS를 사용하면서 멀티 쓰레드에 대한 처리를 고민하지 않아도 된다. WAS가 알아서 쓰레드를 생성하여 처리해주기 때문이다. 주의해야 할 점은 싱글톤 객체는 다수의 쓰레드가 접근할 수 있기 때문에 신경 써서 사용해야 한다.