목록java/인프런 Spring MVC (2)
시스템아 미안해
클라이언트의 복잡한 요청들은 하나의 쓰레드로 실행이 불가하다. 일을 처리해줄 다른 일꾼이 필요한 것이다. 만약 요청마다 쓰레드를 생성해서 로직을 수행한다면 동시적인 실행은 가능하겠지만, 큰 단점이 있다. 비싼 쓰레드의 생산 비용(메모리, 시간)과 더불어 속도가 현저히 저하된다. 그리고 쓰레드는 컨텍스트 스위칭 비용이 발생한다고 한다.(cpu의 제한적인 코어 내에서 쓰레드를 전환할 때 생기는 비용들) 그리하여 사용하는 것이 쓰레드 풀이다. 동작 방식은 쓰레드 풀에 쓰레드를 필요한 만큼 보관하고 요청에 따라 대여-반납한다. 최대치를 넘어선 요청엔 대기시키거나 거절하며 무한이 아닌 유한으로 쓰레드를 관리한다. 미리 생성해놓고 관리하기 때문에 관리 비용이 절감되고, 응답 속도 또한 빨라진다. WAS는 멀티쓰레드..
서블릿은 서버에서 처리하는 업무(TCP-IP대기, 소켓 연결, http메시지 파싱 등)를 알아서 처리해준다. 그래서 개발자는 서버의 동작 구조를 제어하지 않고 비지니스 로직만 처리하면 된다. 좀 더 상세하게 들어가면, 서블릿을 제공해주는 WAS는 새로운 요청이 올때마다 Request, Response객체를 새로 만들고, 서블릿 객체를 생성, 호출등 관리해준다. 이로 인해 개발자는 서블릿 객체를 상속받고, HttpServletRequest, HttpServletResponse에서 정보를 꺼내어 사용한다. 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 부른다. 서블릿 객체는 싱글톤으로 생성되어 하나의 공유 자원으로 사용된다. + 동시 요청을 위한 멀티쓰레드 처리를 지원해준다.