이런 HTML폼이 있다 생각하자.
이름, 나이를 넣고 전송하면 회원가입이 되는 form이다.
전송 버튼을 누르면 웹 브라우저가 요청 HTTP 메시지를 만든다.
이렇게 서버로 전송했을때
만약 개발자가 웹 애플리케이션 서버를 직접 처음부터 끝까지 구현 해야한다면...?
이 과정들을 다 구현해야한다. 이 과정중에서 의미있는 로직은 초록색 선 그어놓은것 뿐이다.
회원 이름, 나이만 데이터 베이스에 저장하는게 끝인 로직인데, 그 전 단계가 너무많고 그 후 단계가 너무 많다.
전 세계 개발자가 전, 후 단계를 똑같이 계속 개발하는건 너무 비효율적이다. 그래서 서블릿이 나왔다.
서블릿은 초록칸을 제외한 모든 일을 다 지원해준다. 서블릿을 지원하는 WAS들이 이걸 다 자동으로 해준다.
서블릿은 이렇게 생겼다.
클래스만들고 HttpServlet를 상속 받으면, 클라이언트에서 서버로 요청이 왔을때 알아서 개발자 대신 해준다.
그럼 개발자는 여기에 애플리케이션 로직만! 구현하면 된다. HTTP 요청메시지 파싱, HTTP 응답 메시지 생성은 직접 안해도된다.
- HttpServletTRequest : HTTP 요청메시지를 대신 parsing 해준다
- HttpServletResponce : HTTP 응답메시지를 대신 생성해준다
request, response 객체에 넣어주기만 하면 이걸 통해서 개발자는 HTTP 스펙을 매우 편리하게 사용할 수 있다.
/hello 라는 요청을 보내면 WAS에서 request, response 객체를 새로 만든다.
그 다음 helloServlet을 실행해준다. 끝나고 리턴할때 Response 객체를 뒤져서 그걸 바탕으로 HTTP 응답 메시지를 만든다
그럼 서블릿이 만들어준 HTTP 응답 메시지를 가지고 웹 브라우저는 화면에 보여주기만 하면된다.
톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 한다.
서블릿 컨테이너 안에는 서블릿 객체를 자동으로 생성, 호출, WAS 종료할때 같이 종료하는 생명주기 관리까지 있다.
서블릿 객체는 싱글톤으로 관리된다 (싱글톤 : 객체를 하나만 생성해놓고 공유해서 쓰는것)
HelloServlet은 하나만 생성해놓고 재사용한다.
요청이 올때마다 new 연산자를 사용해서 계속 생성하는것은 비효율적이다.
객체가 계속 의미없이 만들어지는거니까.
최초 로딩시점에 싱글톤으로 서블릿 객체를 딱 하나 만들어놓고 계속 재활용한다.
모든 요청은 동일한 서블릿 객체 인스턴스에 접근한다.
그래서 공유 변수 사용을 주의해야한다. 잘못 세팅하면 고객 정보 꼬임.
그리고 서블릿 컨테이너가 종료될때 서블릿 객체도 종료된다.
진짜 중요한거!
서블릿 지원하는 WAS의 큰 특징은 동시요청을 위한 멀티 쓰레드를 지원해준다는거다.
(서버가 동시에 10000명의 요청이 와도 요청을 잘 처리하는게 멀티 쓰레드 때문이다)
개발자는 멀티 쓰레드를 크게 신경쓰지 않아도 이 WAS가 알아서 해결한다!
'Spring > 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 카테고리의 다른 글
6. Servlet 프로젝트 생성 (0) | 2023.10.21 |
---|---|
5. 자바 백엔드 웹 기술 역사 (0) | 2023.10.21 |
4. HTML, HTTP API, CSR, SSR (1) | 2023.10.21 |
3. 동시 요청 - 멀티 쓰레드 (쓰레드 풀) (0) | 2023.09.09 |
1. 웹 서버, 웹 애플리케이션 서버 (0) | 2023.09.09 |