[Servlet] 서블릿

popolarburr·2023년 8월 12일
0

본 포스팅은 김영한님의 '스프링MVC1편 - 백엔드 웹 개발 핵심 기술' 강의를 토대로 작성되었습니다.
[강의출처] : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard


위와 같은 상황을 가정하자.
이름이랑 나이라는 입력값을 넣어서 전송하면 회원가입이 되는 상황.

여기서 전송 버튼을 누르면 웹 브라우저가 생성한 **요청** HTTP메시지를 만든다.
여기에는 필요한 정보들이 담김.(누가 보냈고, 어디로 보냈고, 어떤걸 보냈고, 어떤 방식으로 보내는 등등)

위에서 보냈던 요청 메세지를 처리하기 위해서는 메세지를 분석해야한다. 또한 비즈니스 로직은 WAS가 메인으로 도맡아 진행하는데, 만약 WAS가 없다면 왼쪽 그림과 같은 로직을 처음부터 다 진행해야한다.

이럴때 필요한 것이 Servlet, 서블릿이다.
서블릿은 들어온 HTTP 요청 메세지를 알아서 파싱해주는 역할을 한다.

여기서 service라는 메서드를 보면, request와 response를 파라미터로 받는데, requset가 의미하는 바가 클라이언트(웹브라우저)에서 보는 요청 HTTP이다. 그리고 extends를 통해 HttpServlet을 상속받았기에 알아서 요청 메세지를 파싱해주고, 이에 따른 필요한 애플리케이션 로직 부분만을 가져올 수 있게 된다.

또한 요청에 해당하는 응답을 하기 위해선 파라미터로 받은 response가 필요하고, 이에 대한 응답 메세지 파싱 또한 서블릿이 해주기에 매우 편리하다.

  • urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행
  • HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
  • HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse
  • 개발자는 HTTP 스펙을 매우 편리하게 사용

물론 기본적이고 기초적인 HTTP 스펙을 알아야 하긴 한다. 알아야 인지할 수 있고, 응용할 수 있기 때문!


앞서 보여준 요청/응답 흐름의 전체적인 그림이다.

사진 이해 : 서블릿 / HTTP 요청, 응답 흐름

HTTP 요청시

  • WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체 호출
  • 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용
  • 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력
  • WAS는 Response 객체에 담겨잇는 내용으로 HTTP 응답 정보 생성

서블릿 컨테이너란?


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

❗ 여기서 주의 ❗
위에서 사진 이해를 돕기 위한 글에서 WAS는 Request, Reponse 객체를 새로 만들어서 서블릿 객체 호출 이라고 적어놨는데, requset와 response객체는 들어오는 것마다, 나가는 것마다 다르기 때문에 새로 생성하는 것은 맞다. 그러나 helloServlet이라는 객체를 새로 만들 필요가 없다. 하나를 만들어두고 로직만 변경해가면서 사용하는 것이다. 그래서 공유 변수 사용을 주의하라는 것이다.

서블릿을 지원하는 WAS가 가진 동시 요청 멀티 쓰레드 처리 지원이 뭘까?

알아보자

profile
차곡차곡

0개의 댓글