서블릿

주리링·2021년 8월 15일

스프링 MVC

목록 보기
2/9


위와 같은 HTML폼이 있다고 하자.
왼쪽에 값을 입력하고 전송버튼을 누르면 웹 브라우저가 오른쪽의 요청 HTTP메시지를 만든다.
내용을 해석하자면 POST방식으로 /save라는 경로로 username=kim, age=20이라는 내용을 x-www.. type으로 보낼 것이다.

이 때, 서버에서 처리해야 하는 업무에 대해서 보면, 만약 서버를 모두 직접 구현해야한다면 의미 있는 비지니스 로직 외의 다른 업무들도 많을 것이다.
서블릿은 위의 비지니스 로직 외의 다른 업무들을 자동으로 해준다.

서블릿의 특징


위의 사진을 서블릿을 사용하는 예시인데 /hello URL이 호출되면 서블릿 코드가 실행이 되는데 자동으로 비지니스 로직이 담겨있는 service매서드를 실행해준다.
개발자의 입장에서는 클래스를 만들고 HttpServlet을 상속받고 어노테이션을 붙여주기만 하면 되므로 편리하다.
service 매서드의 HttpServletRequest는 HTTP 요청 정보를 편리하게 사용할 수 있는 매개변수이고, HttpServletResponse는 HTTP 응답 정보를 편리하게 제공할 수 있는 매개변수이다.
위의 예시로 보자면 HttpServletRequest.username은 kim이고 HttpServletRequest.age는 20인 것이다.

서블릿 컨테이너

서블릿 컨테이너는 WAS안에 있는데, 서블릿 객체를 서블릿 컨테이너가 자동으로 생성하는것 뿐만 아니라 서블릿을 호출하고 생명주기를 관리해준다.
그리고 큰 장점은 동시 요청을 위한 멀티 쓰레드 처리를 지원한다.
또한 서블릿 객체는 싱글톤으로 관리되는데 그 이유는 요청이 올 때마다 서블릿 객체를 계속 생성하는 것은 비효율적이다.
그러므로 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 모든 고객의 요청은 동일한 서블릿 객체 인스턴스에 접근하도록 한다.
그래서 조심해야 할 것은 공유 변수의 사용이다.

전체적인 흐름


localhost:8080/hello라는 요청을 하면 WAS에서 HTTP 요청 메세지를 기반으로 HttpServletRequest, HttpServletResponse 객체를 생성한다.
그리고 HttpServletRequest와 HttpServletResponse를 전달하여 서블릿 컨테이너의 servlet을 실행한다.
그리고 return값을 reponse로 전달하고 WAS는 response 객체 정보로 HTTP 응답을 생성하고 웹 브라우저에 응답을 보낸다.

profile
코딩하는 감자

0개의 댓글