서블릿이 왜 필요한지, 어디에 사용되어서 우리에게 도움이 되는지 알기 위해서 간단한 예시를 들어 설명하겠다.
HTML Form 형태로 데이터 전송이 발생했다고 가정해보자.
POST 방식으로 데이터를 저장하라고 클라이언트에서 서버로 HTTP 요청을 보냈다고 생각하자.
해당 요청을 받게 되면 서버는 어떻게 될까?
해당 데이터인 username= kim, age = 20 를 저장하는 로직을 실행하고 이에 대한 응답 HTTP 메세지를 클라이언트에게 보내야 할 것이다.
여기서 서블릿이 사용된다.
서블릿이 없다면, 해당 작업을 WAS가 직접 구현을 해야한다.
위의 그림과 같이, 서버와 연결, 요청 메세지 파싱, 내용 확인 등등 여러가지 일을 직접 구현해야 하므로 굉장히 귀찮고 쉽지 않을 것이다. ( 이를 구현하는 건 개발자.. )
그렇다면, 여기서 서블릿이 사용되면 어떻게 될까?
그림을 보면 알 수 있듯이, 핵심 비지니스 로직( 저장 기능 )만 구현하면 되며, 나머지 파싱이나 요청 메세지 확인 등의 공통된 일들은 서블릿이 해준다.
이렇게 되면, 개발자는 서블릿의 존재로 굉장히 효율적으로 WAS를 사용할 수 있게 된다.
HttpServlet 클래스를 상속받아서 사용하게 되면 service 메서드를 오버라이딩해서 사용하게 되는데,
여기서 HttpServletRequest, HttpServletResponse 를 파라미터로 받아서 개발자는 사용할 수 있게 된다.
그렇게 되면, HTTP 요청 정보나 응답 정보를 편리하게 사용할 수 있게 된다. ( 개발자는 HTTP 스펙을 편리하게 사용)
HTTP 요청 시, WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체를 호출한다.
개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용할 수 있으며, Response 객체에 HTTP 응답 정보를 편리하게 입력하게 된다.
WAS는 개발자가 입력한 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성하고 전송한다.
서블릿 컨테이너
- 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 한다.
- 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명 주기를 관리한다.
- 서블릿 객체는 싱글톤으로 관리한다.
- 공유 변수 사용에 주의해야 한다.
- 최초 로딩 시점에 서블릿 객체를 미리 만들고 재활용한다.
- 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근
- 서블릿 컨테이너 종료 시 함께 종료
- JSP도 서블릿으로 변환 되어서 사용
- 동시 요청을 위한 멀티 쓰레드 처리 지원
정리
웹 상에서 데이터를 주고 받는데 사용되는 HTTP에는 요청 메세지, 응답 메세지가 필요하다.
이를 만드는데 큰 도움이 되는게 서블릿이다.
서블릿의 도움으로 개발자는 핵심 로직을 실행하고 서블릿 객체를 통해 얻은 정보를 바탕으로 적합한 응답 메세지를 작성하면 된다.
해당 요청 데이터, 응답 데이터들을 위해 사용되는 객체 등을 관리하는 WAS를 서블릿 컨테이너라고 한다.
서블릿 컨테이너는 많은 사용자가 동시에 사용함으로써 나타나는 동시 요청을 위한 멀티 쓰레드 처리를 지원한다.
다음 시간에는, 쓰레드와 멀티 쓰레드에 대해서 알아보겠다.
'Web' 카테고리의 다른 글
CSR(Client Side Rendering), SSR(Server Side Rendering) (0) | 2023.08.04 |
---|---|
쓰레드(Threads), 멀티 쓰레드, 쓰레드 풀 (0) | 2023.08.04 |
웹 시스템 구성( Web Server, WAS ) (0) | 2023.08.04 |
internet-network(IP, TCP, UDP, PORT, DNS) (0) | 2023.06.23 |