Today
-
Yesterday
-
Total
-
  • 서블릿 Servlet
    Servlet 2023. 11. 29. 06:22

    Servlet을 발전시킨 것이 Spring이다.

    Spring은 Servlet을 이용한다!

     

    가볍게 알아두면 좋은 내용 정리 ✏️

     

    Servlet과 Spring Controller 비교

    1. Annotation

    • Servlet : @WebServlet
    • Spring Controller : @Controller + @RequestMapping

     

    @WebServlet@Controller@RequestMapping을 합쳐놓은 것이다.

     

    Servlet은 HttpServlet 클래스를 상속받아야 한다.

    클래스 상속은 단 하나만 받을 수 있기 때문에,

    Spring Controller에서는 이를 개선하여 상속 없이 @Controller 선언만으로 사용할 수 있게 되었다.

     

    2. 경로 Mapping

    Setvlet은 경로 Mapping을 클래스 선언부에 사용하는 @WebServlet 어노테이션에서만 할 수 있기 때문에, 경로 별로 클래스를 각각 만들어야 한다.

    Spring Contoller는 경로 Mapping을 메서드 선언부에 사용하는 @RequestMapping, @PutMapping, @GetMapping 등 어노테이션을 제공하여 도메인 단위, 서비스 단위 등 원하는 방향으로 클래스를 구성할 수 있다.

     

    3. 서블릿의 생명 주기

    서블릿 구성

    • init()
      서블릿에 대한 요청을 받으면, 서블릿 인스턴스가 있는지 확인 후
      인스턴스가 없는 경우에 init()을 통해 서블릿 클래스를 로딩하고, 인스턴스를 생성한다.
      인스턴스가 있는 경우에 init()을 거치지 않고 service()를 실행한다.
      서블릿도, Spring도 기본적으로 Singleton 패턴이 적용되어 있다.
    • service()
    • destroy()
      일반적으로 프로그램 종료 시 호출됨

     

    이 메서드들은 Servlet Container가 관리하기 때문에, 우리는 각각의 메서드에 내용만 작성하면 된다.

    @WebServlet("/main")
    public class HelloServlet extends HttpServlet {
    
        @Override
        public void init() throws ServletExeption {
            // 서블릿이 생성 또는 리로드 될 때 , 단 한번만 수행 됨
        }
    
        @Override
        public void service(HttpServletRequest req, HttpServletResponse res)  {
            // 1. 입력
            // 2. 처리
            // 3. 출력    
        }
    
        @Override
        public void destroy() {
            // 서블릿이 메모리에서 해제될 때 . 단 한번만 수행 됨
        }
    }

     

    4. init

    Servlet : Lazy Init Spring : Early Init

     

    둘 다 싱글톤으로 되어 있어서 하나의 객체를 반복해서 재사용하지만,
    차이점으로는 기본적으로 Servlet은 요청이 왔을 때 초기화를 진행하여 지연된 초기화 Lazy init 을 하고, Spring은 프로그램 시작 시 초기화를 진행하여 빠른 초기화 Eary init 을 한다.

     

    그렇기 때문에 Servlet은 첫 요청 시 반응 시간이 소요될 수 있고 Spring은 프로그램 Run 시간을 길게 사용한다.

     

    Servlet도 설정하면 Eary Init을 하게 할 수도 있다고 한다.

Designed by Tistory / Custom by 얼거스