Study/Spring

[Spring] 서블릿(Servlet)

욘아리 2024. 4. 19. 18:29

서블릿(Servlet)

서블릿(Servlet)이란 클라이언트의 요청을 처리하고, 응답을 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술이다. 웹 프로그램들은 클라이언트가 어떠한 요청을 하면 그 결과를 전송해주어야 하는데, 이러한 역할을 하는 자바 프로그램이다.

 

특징

  • urlPatterns에 지정된 URL이 호출되면 해당 서블릿 코드가 실행된다.
  • HttpServletRequest를 통해 HTTP 요청 정보를 편리하게 사용할 수 있다.
  • HttpServletResponse를 통해 HTTP 응답 정보를 편리하게 사용할 수 있다.

 

HTTP 요청, 응답 흐름

  • 사용자가 URL을 입력하면 요청이 서블릿 컨테이너로 전송된다.
  • 요청을 전송받은 서블릿 컨테이너는 Request, Response 객체를 생성한다.
  • 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 찾는다. - helloServlet
  • 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용한다.
  • 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력한다.
  • 웹 애플리케이션 서버는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성한다.

 

서블릿 컨테이너

서버에 서블릿을 만들었다고 해서 스스로 동작하는 것이 아니고 서블릿을 관리해 주는 것이 필요한데, 그 역할을 하는 것이 서블릿 컨테이너다. 

 

역할

  1. 웹 서버와 통신 지원
    • 서블릿 컨테이너는 서블릿과 웹 서버가 손쉽게 통신할 수 있게 해 준다. 클라이언트 요청을 받아 응답을 전달하는 과정에서 개발자가 비즈니스 로직에 집중할 수 있도록 복잡한 과정들을 자동으로 처리해 준다.
  2. 서블릿 생명주기 관리
    • 서블릿 클래스를 로딩하여 인스턴스화하고, 초기화 메서드를 호출하고, 요청이 들어오면 적절한 서블릿 메서드를 호출한다. 서블릿이 사용되지 않을 때는 적절하게 가비지 컬렉션을 진행하여 제거한다.
  3. 멀티스레드 지원 및 관리
    • 서블릿 컨테이너는 요청이 올 때마다 새로운 자바 스레드를 하나 생성하여 다중 처리하고, 실행이 끝나면 자동으로 종료된다. 원래는 스레드를 관리해야 하지만 서버가 다중 스레드를 생성 및 운영해 준다.
  4. 선언적인 보안 관리
    • 일반적으로 보안 관리는 XML 배포 서술자에 기록하기 때문에 개발자가 보안 설정을 바꾸더라도 자바 코드에 영향이 가지 않는다.

 

생명주기

  • 클라이언트 요청이 들어오면 서블릿 컨테이너는 서블릿이 메모리에 있는지 확인한다. 메모리에 없다면 init() 메서드가 호출된다.
  • 클라이언트 요청에 따라서 service() 메서드가 적절한 HTTP 메서드를 호출하여 서블릿이 요청을 처리한다.
  • 서블릿 컨테이너가 서블릿에 종료 요청을 하면 destory() 메서드가 호출된다. 종료 시 처리해야 하는 작업은 destory() 메서드를 오버라이딩하여 구현하면 된다. destory() 메서드가 끝난 서블릿 인스턴스는 GC에 의해 제거된다.

 

출처

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 | 김영한 - 인프런

https://mangkyu.tistory.com/14

https://steady-coding.tistory.com/599