BE/Servlet

스프링 MVC 1 - 서블릿

오봉봉이 2022. 8. 8. 23:33
728x90

서블릿

HTTP Form을 통해 POST 메서드로 서버에 저장을 하려면 웹 브라우저는 HTTP 메시지를 만들어 서버에 전송한다.

서버에서 처리해야 하는 업무 - WAS 직접 구현

  • WAS를 직접 구현하게 된다면 서버 TCP/IP 연결 대기, 소켓 연결부터 TCP/IP에 응답 전달, 소켓 종료까지의 모든 프로세스를 개발자가 구현을 해야 한다.
  • 우리는 의미있는 비즈니스 로직을 수행하기 위해 수 많은 작업들을 해야하는 비효율적인 작업을 해야한다.

서버에서 처리해야 하는 업무 - 서블릿을 지원하는 WAS 사용

  • 하지만 서블릿을 사용하면 모든 작업을 자동으로 해주고 우리는 의미있는 비즈니스 로직에만 집중할 수 있다.

서블릿 특징

@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response){
    //애플리케이션 로직
    }
}
  • urlPatterns(/"hello")의 URL이 호출되면 서블릿 코드가 실행된다.
  • HTTP 요청 정보를 편리하게 사용할 수 있게 HttpServaletRequest가 도와준다.
    • HTTP 요청 메시지를 직접 파싱하려면 매우 어렵기 때문
  • HTTP 응답 정보를 편리하게 제공할 수 있게 HttpServletResponse가 도와준다.
    • HTTP 응답 메시지를 직접 작성하려면 매우 어렵기 때문
  • 이제 개발자는 HTTP 스펙을 매우 편리하게 사용할 수 있다.
    • 그래도 개발자는 HTTP 스펙을 알고 있어야 한다.

  1. localhost:8080/hello로 요청
  2. WAS에서 HTTP 요청 메시지를 기반으로 request, response 객체를 생성한다.
  3. 서블릿 컨테이너에서 helloServlet에 request, response객체를 파라미터로 해서 실행한다.
  4. helloServlet이 종료되면 return된 결과에 따라 response객체를 바탕으로 HTTP 응답 메시지를 만든다.
  5. 웹 브라우저에 응답 메시지를 전달한다.

서블릿 HTTP 요청, 응답 흐름

  • HTTP 요청시
    • WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체를 호출한다.
    • 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용한다.
    • 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력
    • WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성한다.

서블릿 컨테이너

  • 서블릿을 지원하는 WAS에는 서블릿 컨테이너가 있어 서블릿 객체를 자동으로 생성하고 호출해준다.
  • WAS가 종료될 때 서블릿도 같이 종료한다.
  • 서블릿이 여러개 있으면 서블릿 컨테이너 안에 들어가게 된다.

서블릿 컨테이너 정리

  • 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라 한다.
  • 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리한다.
  • 서블릿 객체는 싱글톤으로 관리된다
    • 요청이 올 때 마다 계속 객체를 생성하는 것은 비효율적이기 때문
      • 하지만 request, response 객체는 요청이 올 때 마다 생성된다.
        • 요청이 모두 다 다르기 때문.
    • 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용한다.
    • 모든 요청은 동일한 서블릿 객체 인스턴스에 접근한다.
    • 싱글톤이기 때문에 공유 변수 사용에 주의해야 한다.
    • 서블릿 컨테이너 종료시 함께 종료된다.
  • JSP도 서블릿으로 변환 되어서 사용한다.
  • 동시 요청을 위한 멀티 쓰레드 처리를 지원한다.
출처 : 인프런 김영한 지식 공유자님 강의 - 스프링 MVC 1편 백엔드 웹 개발 핵심 기술
728x90