Goal
- 서블릿에 대해 알아보고 이해한다
- 서블릿 컨테이너에 대해 알아보고 이해한다
서블릿이란 ?
[사전적 정의]
자바 서블릿(Java Servlet)은 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다. 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다.
JSP와 비슷하지만 JSP는 HTML 문서 안에 Java코드를 포함하는 반면, 서블릿은 자바코드안에 HTML을 포함하고 있다는 점에서 차이점이 있다.
Servlet | JSP |
자바 코드 안에 HTML 포함 | HTML 문서안에 Java코드 포함 |
[예시]
시스템 - HTML Form를 통하여 데이터 전송(post)을 한다고 하자
우리가 원하는 것 (비지니스 로직) - 회원정보를 보내서 db에 저장
HTML
<form action="/save" method="post">
<input type="text" name="username">
<input type="text" name="age">
<button type="submit">전송</button>
</form>
웹 브라우저가 생성한 요청 HTTP 메세지 - 회원 저장
POST /save HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded
username=kim&age=22
서버에서 처리해야하는 업무
1. 웹 어플리케이션 서버 직접 구현시 아래와 같음
- 서버 TCP/IP 연결 대기, 소켓 연결
- HTTP 요청 메세지 파싱해서 읽기
- post방식인지 확인
- content-type 확인
- HTTP 바디 메세지 확인
- username, age 데이터를 사용할 수 있도록 파싱
- 저장프로세스 실행
- 비지니스로직 실행 (데이터베이스에 저장 요청 -> 우리가 하고자 하는 것)
- HTTP 응답 메세지 생성 시작
- HTTP 시작 라인 생성
- Header 생성
- 메세지 바디에 HTML 생성해서 입력
- TCP/IP에 응답 전달, 소켓 종료
2. 비지니스로직을 제외한 전,후단계의 비효율적인 처리를 서블릿이 대신 해준다! (우리는 서블릿을 지원하는 was를 사용)
@WebServlet(name="helloServlet", urlPatterns="/hello")
public class HelloServlet extends HelloServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse, response){
//어플리케이션 로직
}
}
- urlPatterns(/hello)의 url이 호출되면 서블릿 코드가 실행
- HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
- HTTP 응답 정보를 편리하게 사용할 수 있는 HttpServletResponse
- 객체의 메소드를 통하여 데이터를 추출하거나 세팅할 수 있음 ex) 세션, 파라미터 등등!
서블릿 컨테이너란 ?
- 톰캣처럼 서블릿을 지원하는 was를 서블릿 컨테이너라고 한다
- 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리한다
- 서블릿 객체는 싱글톤으로 관리
- 고객의 요청이 올 때마다 계속 객체를 생성하는 것은 비효율적
- 최초 로딩 시점에 서블릿 객체를 만들어두고 재활용
- 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근
- 공유 변수 사용 주의 ex) 내 아이디로 로그인 했지만 다른이의 정보가 보일 수 있음
- 서블릿 컨테이너 종료시 함께 종료
- JSP도 서블릿으로 변환 되어서 사용
- 동시 요청을 위한 멀티 쓰레드 처리 지원 -> 다중 요청이 가능한 이유!
막연하게 알고 있던 서블릿과 그의 역사를 다시 제대로 짚고 가게 되어 영광이다
역사를 잊은 사람에게 미래란 없다 ㅋㅋㅋㅋ '왜 등장하게 되었는가'의 중요성을 다시 한번 깨달아가며
비지니스로직에 집중하기 위한 인간의 노력, 반복과 중복을 싫어하는 인간.. 기억해!!!!
@ 스프링 MVC 1편 - 백엔드 웹개발 by 김영한을 참조하고 있습니다.
'Spring > mvc' 카테고리의 다른 글
[Spring MVC 1] - 스프링부트 환경에서 서블릿 등록 후 사용 (0) | 2022.07.30 |
---|---|
[Spring MVC 1] - 서블릿 프로젝트 생성 (0) | 2022.07.30 |
[Spring MVC 1] - HTML, HTTP API, CSR, SSR (0) | 2022.07.29 |
[Spring MVC 1] - 동시 요청 - 멀티 쓰레드 (0) | 2022.07.28 |
[Spring MVC 1] - 웹 서버, 웹 어플리케이션 서버 (0) | 2022.07.26 |