Servlet

naeganugu·2022년 12월 6일
1

스프링 마스터🌱

목록 보기
19/19

서버에서 무슨 일을 해야할까

웹 애플리케이션 서버를 직접 구현한다고 하면, 의미있는 비지니스 로직을 수행하는 것뿐만 아니라 http 요청을 해석하고 http 응답 메시지를 작성하는 등의 과정도 필요하다.

서블릿을 지원하는 WAS를 사용하게 되면 자동으로 http 요청이나 응답 메시지 관련 로직은 수행이 되고 우리는 의미있는 비지니스 로직을 다루는데 집중할 수 있게 된다.

@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       
		//	 비지니스 로직
     
    }
}
  • HttpServletRequest : HTTP 요청 정보
  • HttpServletResponse : HTTP 응답 정보

덕분에 개발자는 HTTP 스펙을 매우 편리하게 사용할 수 있다

흐름은 이 그림과 같다.
요청이 들어오면 WAS에서 http request와 response 객체를 생성한다. helloServlet을 통해(서블릿 객체 호출) 비지니스 로직을 수행하고 response 객체를 반환하며 종료한다.

서블릿을 어떻게 관리할까

서블릿은 서블릿 컨테이너에서 관리한다.

서블릿 컨테이너: 서블릿을 지원하는 WAS. 예로 톰캣이 있다.

서블릿 컨테이너는 서블릿 객체 생성, 초기화, 호출, 종료하는 생명주기를 관리한다. 서블릿 객체는 싱글톤으로 관리된다. 동시 요청이 들어왔을 때는 멀티 쓰레드로 처리된다.

멀티 쓰레드

servlet을 호출하는건 쓰레드다. http 요청이 들어왔을 때 이 요청은 쓰레드를 통해 servlet을 호출하는데, 요청 하나당 쓰레드 하나가 할당된다.

하지만 요청마다 쓰레드를 생성하는 것은 비용이나 서버 차원에서 좋은 방법이 아니다. 요청마다 생성하기보다 쓰레드 풀 방식을 사용한다.

일정 수만큼의 쓰레드를 미리 만들어 둔 후 쓰레드 풀에 관리하고 보관한다.쓰레드가 필요하면 풀에서 이미 생성되어 있는 쓰레드를 꺼내쓰고 다 쓴 뒤에는 반납한다.

이 부분은 WAS가 처리하기 때문에 개발자가 멀티 쓰레드 관련 코드를 신경쓰지는 않아도 된다.

profile
seungseung-zanggu

0개의 댓글