새소식

반응형
Java/Spring

서블릿(Servlet), 서블릿 컨테이너(Servlet Container)

  • -
반응형

서블릿

동적인 웹 페이지를 만들 때 사용되는 자바 기반의 웹 어플리케이션 프로그래밍 기술이다.

클라이언트의 요청이 있고 그 요청에 대한 응답을 하기 위해 결과를 다시 전송해야하는데 이러한 역할을 하는게

서블릿이다.

 

예를 들어, 어떠한 사용자가 로그인을 하려고 아이디와 패스워드를 입력하고 로그인 버튼을 누른다.

이때 서버는 사용자가 입력한 로그인 정보가 맞는지 확인하고, 맞으면 요청한 페이지를 보여주는데

이러한 역할을 수행하는게 서블릿이다.

 

등장 배경

과거 서버는 정적인 데이터(HTML문서)만 주고받을 수 있었다.

클라이언트가 데이터를 요청했을 때 서버는 미리 저장해놓은 데이터만 반환했었다.

하지만 웹이 활성화되고 사용자가 많아지다보니 다양한 기능을 하는 웹을 구현하고자 했다.

사용자가 필요한 요구사항에 맞게 동적으로 반응하는 웹페이지를 만들기 위해 서블릿이 생겼다.

 

과거 정적인 웹페이지만 제공할때는 클라이언트와 서버의 구조는 단순했다.

 

클라이언트의 요청에 따라 Web Server에 미리 저장된 웹페이지만 응답했다.

 

이러한 서버는 정적인 페이지뿐만 아니라 동적인 페이지를 제공하기 위해 WAS가 생겼다.

정적인 데이터를 제공해주는 Web Server 뿐만 아니라 사용자의 요청 중 연산과 동적인 데이터가 필요할 때

WAS가 담당하여 처리한다.

이러한 WAS에서 동적인 데이터를 만들기 위한 연산을 담당 하는것이 서블릿이다.

서블릿은 WAS 안에 있는 서블릿 컨테이너에서 각종 연산을 담당한다.

 

특징

- 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트

- HTML 을 사용하여 응답한다.

- Java 의 쓰레드를 이용하여 동작한다.

- MVC 패턴에서의 컨트롤러로 이용된다.

- HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다.

- UDP보다 속도가 느리다.

- HTML 변경 시 Servlet을 재 컴파일 해야하는 단점이 있다.

 

서블릿 컨테이너

서블릿 컨테이너란 말 그대로 서블릿을 담고 관리해주는 컨테이너이다.

서블릿 컨테이너는 구현되어 있는 서블릿 클래스의 규칙에 맞게 서블릿을 관리해주며 클라이언트에서

요청이 들어오면 컨테이너는 HttpServletRequest, HttpServletResponse 두 객체를 생성하며 post, get 여부에 따라

동적인 페이지를 생성하여 응답한다.

 

톰캣처럼 서블릿을 지원하는 WAS 를 서블릿 컨테이너라고 한다. 서블릿 객체는 일반적으로 싱글톤으로 관리되는데

이는 요청이 올때마다 생성하는 것이 비효율적이기 때문이다. 서블릿은 최초 로딩 시점에 서블릿 객체를

미리 만들어두고 이를 재활용하며, 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근하게 된다.

 

서블릿 컨테이너가 종료되면 서블릿도 종료가 되며, 서블릿 컨테이너는 동시 요청을 위한 멀티 쓰레드 처리도 지원한다.

 

출처 : https://sharryhong.github.io/2017/06/03/java-servlet/

위 구조를 살펴보면 HTTP Server + Servlet Container = WAS가 된다.

HTTP Server는 웹 어플리케이션의 정적인 자원인 HTML, CSS, JavaScript, 이미지 등 변하지 않는 자원을 클라이언트의

요청에 따라 그대로 응답해준다.

Servlet Container는 웹 어플리케이션의 동적 자원인 JSP, Servlet(DB 데이터 처리 등) 을 생성한다.

 

HttpServletRequest

Http 프로토콜의 Request정보를 서블릿에게 전달하기 위한 목적으로 사용하며 헤더 정보, 파라미터, 쿠키, URI, URL

등의 정보를 읽어 들이는 메서드와 Body의 Stream을 읽어 들이는 메서드를 가지고 있다.

 

HttpServletResponse

요청한 클라이언트에게 응답을 보내기 위한 HttpServletResponse 객체를 생성하여 서블릿에게 전달하고 이 객체를 활용하여 Content Type, 응답코드, 응답 메시지 등을 전송한다.

반응형

'Java > Spring' 카테고리의 다른 글

메이븐(Maven)과 그래들(Gradle)  (0) 2022.04.25
Thymeleaf 와 JSP  (0) 2022.04.08
HTML 과 JSP 차이  (0) 2022.04.04
객체지향 프로그래밍  (0) 2022.03.23
MVC 패턴  (0) 2022.03.21
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.