서블릿과 서블릿 컨테이너

jihan kong·2022년 6월 30일
0

Spring MVC

목록 보기
2/12
post-thumbnail

본 시리즈는 인프런 학습 사이트의 김영한 강사님의 java spring mvc - 백엔드 웹 개발 핵심 기술 편을 학습한 내용을 바탕으로 정리하였습니다.

지난 시간에 동적으로 서버를 구현하는 WAS (웹 어플리케이션 서버) 에 대해서 학습했다. 웹 서버는 정적인 페이지만을 서비스하기 때문에 동적 페이지를 제공하기 위해선 웹 애플리케이션 서버의 역할이 절대적이라는 것이 주된 내용이었는데, 이때 동적 페이지를 제공할 수 있도록 도와주는 것이 있다.

1. 서블릿(Servlet) 이란?

WAS를 구현하게끔 도와주는 방법은 여러가지가 있지만 그 중에서도 자바를 사용하여 웹 페이지를 동적으로 생성할 수 있게 해주는 프로그래밍 기술 또는 자바 클래스가 존재하는데 이를 서블릿(Servlet) 이라고 한다. 사실 구글링을 해보면 여러가지 정의가 나오지만 결국 자바 기반의 웹 프로그래밍 기술이라고 표현하면 될 것이다.

1-1. 서블릿의 동작 방식

위와 같이 클라이언트의 요청에 html Form을 사용하여 요청에 응답하는 방식이다. 구조적으로 말하면 자바 코드 안에 html 코드가 포함되어 있는 형태이다.

1-2. 서블릿의 특징

@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response){
      // 애플리케이션 로직
	}
}

코드를 살펴보면 urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행되는 방식이다.
HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest 와 HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse 메소드가 존재한다. 이를 통해 개발자는 HTTP 스펙을 편리하게 사용할 수 있다.

1-3. HTTP 요청, 응답 흐름

WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체를 호출한다. 개발자는 Request 객체에서 HTTP 요청 정보를 꺼내서 사용하고, Response 객체에 HTTP 응답 정보를 입력할 수 있게 된다. 또한, WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성한다.

2. 서블릿 컨테이너

서버에 서블릿을 만들었다고 이것이 저절로 실행되는 것이 아니라 서블릿을 관리해주는 툴이 필요한데, 이러한 역할을 수행하는 것이 서블릿 컨테이너이다.

2-1. 서블릿 컨테이너의 동작 방식

서블릿 컨테이너는 클라이언트의 요청(Request) 을 받고 응답(Response) 할 수 있게 웹 서버와 소켓으로 통신한다. 대표적인 예로 톰캣(Tomcat)이 있다.

2-2. 서블릿 컨테이너의 특징


(사진 출처: 망나니 개발자님의 블로그 https://mangkyu.tistory.com/14)

서블릿 컨테이너는 위와 같이 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명 주기로 관리한다는 것이 가장 큰 특징이다.

또한, 서블릿 객체는 싱글톤으로 관리된다.

싱글톤(Singleton)

고객의 요청이 올 때마다 계속 객체를 생성하는 것은 낭비되는 리소스가 많아 비효율적인 방식이다. 따라서 최초 로딩하는 시점에 서블릿 객체를 미리 만들어두고 재활용하는 방식을 채택했는데 이를 싱글톤 방식이라고 한다. 이를 통해 모든 고객의 요청은 하나의 동일한 서블릿 객체 인스턴스에 접근할 수 있게 된다. 그러나, 공유 변수를 사용하고 있는 만큼 주의가 필요하다.

마지막으로 동시 요청을 위한 멀티 쓰레드를 지원한다. 멀티 쓰레드란 여러 개의 프로세스를 사용하여 병렬적 일 처리를 할 수 있도록 하는 것인데, 이에 대한 포스팅은 다음으로...

profile
학습하며 도전하는 것을 즐기는 개발자

0개의 댓글