서블릿 Servlet

김아무개·2023년 5월 5일
0

Servlet

목록 보기
3/3

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 등 Mapping 관련 다양한 어노테이션 제공)으로 할 수 있기 때문에,
극단적으로 표현하면 하나의 클래스 파일에 모든 경로를 지정해 줄 수 있다.

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을 하게 할 수도 있다고 한다.

profile
Hello velog! 

0개의 댓글