[Spring] 서블릿이란?

JJoSuk·2023년 6월 3일
0
post-thumbnail

본 프로젝트 자료는 김영한님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 참고 제작됐음을 알립니다.

서블릿 이란?

Servlet 이란 Http 요청 시 WAS는 Request 와 Response 객체를 새로 생성 시켜 개발자는 Request 를 통해 Http 요청 정보를 편리하게 꺼내쓰고, Response 를 통해 Http 응답 정보를 편리하게 꺼내쓴다.

쉽게 말해 어떠한 사용자가 로그인을 하려고 할 때 사용자는 아이디와 비밀번호를 입력하고, 로그인 버튼을 누른다(Request)
그때 서버는 클라이언트의 아이디와 비밀번호를 확인하고, 다음 페이지를 띄워주주기 위해 정보를 제공(Response)
이러한 역할을 수행하는 것이 바로 서블릿(Servlet)이라 한다.


서블릿 컨테이너

서블릿을 전체적으로 관리해주는 컨테이너라고 보면 된다.

우리가 서버에 서블릿 객체를 생성했다고 서블릿이 스스로 작동해서 서버를 관리해주지 않는다. 그래서 이 서블릿 컨테이너를 만들어 서블릿을 관리해주는 틀을 만들어줘야 한다.


서블릿의 생명주기

서블릿 컨테이너는 서블릿의 탄생과 죽음을 관리한다. 서블릿 클래스를 로딩하여 인스턴스화 하고, 초기화 메소드를 호출하고, 요청이 들어오면 적절한 서블릿 메소드를 호출한다.

또한 서블릿이 생명을 다 한 순간에는 적절하게 Garbage Collection(가비지 컬렉션)을 진행하여 편의를 제공한다.


웹서버와의 통신 지원

서블릿 컨테이너는 서블릿과 웹서버가 손쉽게 통신할 수 있게 해준다. 일반적으로 우리는 소켓을 만들고 listen, accept 등을 해야하지만 서블릿 컨테이너는 이러한 기능을 API로 제공하여 복잡한 과정을 생략할 수 있게 해준다.

그래서 개발자가 서블릿에 구현해야 할 비지니스 로직에 대해서만 초점을 두게끔 도와준다고 보면 된다.


멀티쓰레드 지원 및 관리

서블릿 컨테이너는 요청이 올 때 마다 새로운 자바 쓰레드를 하나 생성하는데, 쓰레드풀을 활용해서 미리 쓰레드를 생성해 안전성을 챙기고, 쓰레드를 재활용이 가능해 관리에도 용이하다.


보안 관리

서블릿 컨테이너를 사용하면 개발자는 보안에 관련된 내용을 서블릿 또는 자바 클래스에 구현해 놓지 않아도 된다.

일반적으로 보안관리는 XML 배포 서술자에 다가 기록하므로, 보안에 대해 수정할 일이 생겨도 자바 소스 코드를 수정하여 다시 컴파일 하지 않아도 보안관리가 가능하다.


정리

  • 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함
  • 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리
  • 서블릿 객체는 싱글톤으로 관리
    • 고객의 요청이 올 때 마다 계속 객체를 생성하는 것은 비효율
    • 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용
    • 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근
    • 공유 변수 사용 주의
    • 서블릿 컨테이너 종료 시 함께 종료
  • JSP도 서블릿으로 변환 되어서 사용
  • 동시 요청을 위한 멀티 쓰레드 처리 지원
profile
안녕하세요

0개의 댓글