2 minute read

서블릿 컨테이너와 웹서버에 대해 알아보자,

0. 목차.

  1. 웹서버
  2. 서블릿이란?
  3. 서블릿 컨테이너
  4. 서블릿 생명주기

1. 웹서버

1-1. 웹서버 요약

서블릿 컨테이너를 알기전에 웹서버부터 알아보자

웹서버는 하드웨어, 소프트웨어 혹은 두개가 같이 동작하는 것을 의미 한다.

HTTP을 이용하여 인터넷 브라우저와 통신한다. (http 통신의 경우 일반적으로 80포트 https 경우 443 포트를 사용한다.)

웹서버가 하는 일은 웹 페이지를 사용자에게 전송하는 일이다.

1-2. 하드웨어 측면에서의 웹서버

하드웨어 웹 서버의 소프트웨어와 website의 컴포턴트 파일들을 저장하는 컴퓨터를 나타낸다. (컴포넌트 파일에는 HTML문서, images, css, javascript file등이 있다.) 웹서버는 인터넷에 연결되어 웹에 연결된 다른 기기들이 웹 서버의 데이터(컴포넌트 파일)들을 주고 받을수 있도록 한다.

1-3. 소프트웨어 측면에서의 웹서버

소프트웨어 웹 서버는 기본적으로 웹 사용자가 어떻게 호스트 파일들에 접근하는지를 관리한다. HTTP 서버는 URL과 HTTP 프로토콜의 일부이다.

1-4. 웹서버의 종류

  1. Apache HTTP Server
    • 유닉스 기반으로 만들어저, 리눅스 배포판에 대부분 아파치를 지원
    • 확장성이 좋다. 모듈 개념으로 수많은 기능을 덧붙일 수 있다.
    • 2.2 버전서 느리다는 평으로 인해 NGINX가 나오며 위기가 있었지만, 2.4에 속도를 크게 개선했다.
  2. NGINX
    • 현 WebServer 점유율 1위 (2023년 2월)
    • 굉장히 가벼우면서 강력한 프로그램을 목표로한다.
    • HTTP와 HTTP/2를 지원하며 HTTP/3은 개발중에 있다.
  3. Google WebServer

2021년 10월 기준으로 실질적으로 작동하는 웹 사이트(active site)들에서 쓰이는 웹 서버 소프트웨어 순위는 아파치 HTTP 서버(23.92%), 엔진엑스(20.45%), 구글 웹 서버(9.58%), 클라우드플레어(9.25%) 순이였으나, NGINX는 가볍고 높은 성능을 무기로 점유율을 빠르게 늘려나가 현재는 웹 서버 시장점유율 1위가 되었다. 2022년 5월 기준으로 웹 서버 소프트웨어 순위는 엔진엑스(33.3%), 아파치 HTTP 서버(31.6%), 클라우드플레어(21.6%), LiteSpeed(12.1%), MS IIS(6.0%) 순이다. 클라우드플레어는 CDN에 사용되는 것이기 때문에 배후에 있는 실제 웹 서버는 NGINX나 Apache HTTPd인 경우가 대부분이다.

2. 서블릿이란?

서블릿이란 Dynamic Web Page를 만들때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이다. 서블릿은 다양한 요청, 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰수 있게 해주는 기술이다.

2-1 서블릿 주요 특징

  • 클라이언트 Reques에 대해 동적으로 작동하는 웹 애플리캐이션 컴포넌트
    • 어플레이션 컴포넌트란: 애플리케이션 컴포넌트는 사용자가 개발하는 애플리케이션에서 추가할 수 있는 재사용 가능 라이브러리
  • JAVA의 스레드를 이용하여 동작한다.
  • MVC 패턴에서의 컨트롤러로 이용된다.
  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다.
  • UDP보다 속도가 느리다.
  • HTML 변경 시 Servlet을 재 컴파일해야 하는 단점이 있다.

3. 서블릿 컨테이너란?

서블릿 컨테이너란, 서블릿을 담고 관리해주는 컨테이너이다. 서블릿 컨테이너는 컨테이너는 구현되어 있는 서블릿 클래스의 규칙에 맞게 서블릿 객체를 관리(생성, 초기화, 호출종료)하며, 클라이언트의 요청을 받으면 HttpServeletRequest와 HttpServletResponse 객체를 생성하여, post, get 여부에 따라 동적인 페이지를 생성하여 응답한다 .

3-1. 서블릿컨테이너 기능

  1. 통신지원
    • 서블릿과 웹 서버가 통신할 수 있는 간단한 방법을 제공한다. (개발자가 비즈니스 로직에 집중할수 있다.)
    • 단순히 HTTP 요청 메세지로 생성된 request를 읽어, 비즈니스 로직을 수행하고 response 를 반환하면된다.
  2. 멀티 스레딩 관리
    • 서블릿 컨테이너는 요청이 올때마다 새로운 자바 쓰레드를 생성한다.
      • 동시에 요청이 들어와도 멀티 쓰레딩 환경에서 동시자발적인 작업 관리 가능
    • HTTP 서비스 메소드를 실행하고 나면 쓰레드는 자동으로 종료된다.
  3. 선언적인 보안 관리
    • 서블릿 컨테이너는 보안 관련 기능을 제공한다.

4. 서블릿 생명주기

클라이언트가 Servlet 에 요청을 한다 하여, 서버는 Servlet을 바로 호출하지 않는다. Servlet은 객체를 생성하지 않고 초기화 작업을 거친후, 요청을 처리하는데 이러한 생명주기에 대해 좀더 알아보자.

fs

  1. Request가 오면, Servlet 클래스가 로딩되어 요청에 대한 Servlet 객체가 생성된다.
  2. init() 메서드를 호출하여 Servlet 을 초기화 한다.
  3. service() 메소드를 호출하여 Servlet이 브라우저 요청을 처리하도록한다.
  4. service() 메소드는 특정 HTTP 요청을 처리하는 메서드 (doGet, doPost)등을 호출한다.
  5. 서버는 desroy() 메서드를 호출하여 Servlet 을 제거한다.

Categories:

Updated: