BE/Servlet
스프링 MVC 1 - 서블릿
오봉봉이
2022. 8. 8. 23:33
728x90
서블릿
HTTP Form을 통해 POST 메서드로 서버에 저장을 하려면 웹 브라우저는 HTTP 메시지를 만들어 서버에 전송한다.
서버에서 처리해야 하는 업무 - WAS 직접 구현
- WAS를 직접 구현하게 된다면 서버 TCP/IP 연결 대기, 소켓 연결부터 TCP/IP에 응답 전달, 소켓 종료까지의 모든 프로세스를 개발자가 구현을 해야 한다.
- 우리는 의미있는 비즈니스 로직을 수행하기 위해 수 많은 작업들을 해야하는 비효율적인 작업을 해야한다.
서버에서 처리해야 하는 업무 - 서블릿을 지원하는 WAS 사용
- 하지만 서블릿을 사용하면 모든 작업을 자동으로 해주고 우리는 의미있는 비즈니스 로직에만 집중할 수 있다.
서블릿 특징
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response){
//애플리케이션 로직
}
}
- urlPatterns(/"hello")의 URL이 호출되면 서블릿 코드가 실행된다.
- HTTP 요청 정보를 편리하게 사용할 수 있게 HttpServaletRequest가 도와준다.
- HTTP 요청 메시지를 직접 파싱하려면 매우 어렵기 때문
- HTTP 응답 정보를 편리하게 제공할 수 있게 HttpServletResponse가 도와준다.
- HTTP 응답 메시지를 직접 작성하려면 매우 어렵기 때문
- 이제 개발자는 HTTP 스펙을 매우 편리하게 사용할 수 있다.
- 그래도 개발자는 HTTP 스펙을 알고 있어야 한다.
- localhost:8080/hello로 요청
- WAS에서 HTTP 요청 메시지를 기반으로 request, response 객체를 생성한다.
- 서블릿 컨테이너에서 helloServlet에 request, response객체를 파라미터로 해서 실행한다.
- helloServlet이 종료되면 return된 결과에 따라 response객체를 바탕으로 HTTP 응답 메시지를 만든다.
- 웹 브라우저에 응답 메시지를 전달한다.
서블릿 HTTP 요청, 응답 흐름
- HTTP 요청시
- WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체를 호출한다.
- 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용한다.
- 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력
- WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성한다.
서블릿 컨테이너
- 서블릿을 지원하는 WAS에는 서블릿 컨테이너가 있어 서블릿 객체를 자동으로 생성하고 호출해준다.
- WAS가 종료될 때 서블릿도 같이 종료한다.
- 서블릿이 여러개 있으면 서블릿 컨테이너 안에 들어가게 된다.
서블릿 컨테이너 정리
- 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라 한다.
- 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리한다.
- 서블릿 객체는 싱글톤으로 관리된다
- 요청이 올 때 마다 계속 객체를 생성하는 것은 비효율적이기 때문
- 하지만 request, response 객체는 요청이 올 때 마다 생성된다.
- 요청이 모두 다 다르기 때문.
- 하지만 request, response 객체는 요청이 올 때 마다 생성된다.
- 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용한다.
- 모든 요청은 동일한 서블릿 객체 인스턴스에 접근한다.
- 싱글톤이기 때문에 공유 변수 사용에 주의해야 한다.
- 서블릿 컨테이너 종료시 함께 종료된다.
- 요청이 올 때 마다 계속 객체를 생성하는 것은 비효율적이기 때문
- JSP도 서블릿으로 변환 되어서 사용한다.
- 동시 요청을 위한 멀티 쓰레드 처리를 지원한다.
출처 : 인프런 김영한 지식 공유자님 강의 - 스프링 MVC 1편 백엔드 웹 개발 핵심 기술
728x90