Theory
Spring
서블릿

서블릿(Servlet)이란 무엇인가요?

클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술로써 간단히 말하면 자바를 사용해서 웹을 만들기 위해 필요한 기술이고 조금 더 세부적으로 말하면 클라이언트가 어떠한 요청을 하면 그에 대한 request를 받고 response를 전송해줘야 하는데 이러한 역할을 하는 자바 프로그램입니다.

서블릿이 있기 이전에는

다음과 같은 과정들을 모두 개발자가 처리해줬습니다. 이러한 과정을 간략화해서 비즈니스 로직 실행과 같은 중요한 로직에만 집중할 수 있게 해주는 것이 서블릿입니다.

서블릿(Servlet)의 특성에 대해서 설명해보세요.

  • 서블릿은 싱글톤으로 관리된다.
    • 공유 변수 사용주의
  • 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 한다.

서블릿 컨테이너(Servlet Container)란 무엇인가요?

서블릿의 생명주기를 관리하고 HTTP 요청이 들어올 때마다 Thread를 하나 생성하고 HTTP 요청을 처리하는 하며 서블릿과 톰캣같은 웹 서버와 소켓통신을 담당한다.

간단히 말해서

@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class TestCode extends HttpServlet {
  @Override
  protected void service(HttpServletRequest request, HttpServletResponse response) {
    System.out.println("Hello, world!");
  }
}

서블릿은 다음과 같이 사용하는데 이때 서블릿 컨테이너가 @WebServlet 어노테이션을 보고 서블릿을 생성하고 관리하게 된다.

역할

  • 웹 서버와 통신지원
    • 일반적으로 소켓 만들고 listen, accept등을 하고 웹 서버와 통신하지만, 서블릿 컨테이너는 이러한 기능을 API로 제공하여 생략할 수 있게 해준다. 개발자가 서블릿에 구현해야할 비즈니스 로직에만 초점을 둘 수 있게 지원해준다.
  • 서블릿 생명주기 관리
    • 서블릿 컨테이너는 서블릿 클래스 로딩하여 인스턴스화하고 init() 메소드를 호출, 적절한 서블릿 메소드 등을 호출하게 도와준다.
    • 수명이 다 된 서블릿을 적절하게 가비지 콜텍터를 호출하여 필요없는 자원 낭비를 막아준다.
  • 멀티스레드 지원 및 관리
    • 서블릿 컨테이너는 Request가 올때마다 새로운 자바 스레드를 하나씩 생성한다. 이후 HTTP 서비스 메소드를 실행하고 난 후 자동으로 소멸한다.
    • 따라서 동시에 여러 요청이 들어와도 멀티쓰레딩 환경에서 동시다발적인 작업을 관리할 수 있다.
  • 선언적인 보안 관리
    • 서블릿 컨테이너는 보안관련 기능을 제다해주므로 보안관련 메소드를 구현하지 않아도 된다.
    • 일반적으로 보안관리는 XML 배포 서술자에다가 기록하므로, 보안에 대해 수정할 일이 생겨도 자바 소스 코드를 수정하여 다시 컴파일 하지 않아도 보안관리가 가능하다.