웹 개발 기초/자바 웹을 다루는 기술

서블릿과 서블릿 컨테이너 이해하기

sungw00 2023. 2. 14. 01:38
728x90

1. 서블릿

서버쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스이다.

서블릿은 자바로 작성되어 있으므로 자바의 일반적인 특징을 모두 가진다. 하지만 일반 자바 프로그램과는 다르게 독자적으로 실행되지는 못하고 톰캣과 같은 JSP/Servlet 컨테이너에서 실행된다는 점에서 차이가 있다.

 

2. 서블릿의 동작 과정

서블릿은 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 수행한 후 웹 브라우저에 결과를 전송한다. 

서버에서 실행되므로 보안과 관련된 기능도 훨씬 안정적으로 수행할 수 있다.

서블릿의 동작 과정을 순서대로 나타내면 다음과 같다.

  1. 클라이언트가 웹 서버에 요청하면 웹 서버는 그 요청을 톰캣과 같은 웹 애플리케이션 서버(WAS)에 위임한다.
  2. 그러면 WAS는 각 요청에 해당하는 서블릿을 실행한다.
  3. 서블릿은 요청에 대한 기능을 수행한 후 결과를 반환하여 클라이언트에 전송한다.

서블릿은 어떠한 기능을 가지고 있을까?

만약 단순히 고정된 정보를 브라우저로 보여주는 용도로는 웹 서버로도 충분할 것이다.

하지만 쇼핑몰 화면에 있는 각각의 상품들은 실시간으로 변하는 정보를 반영해야 하므로(할인 가격, 품절 여부 등) 상품의 가격을 데이터베이스에서 가져오는 기능이나 직접 계산하는 기능이 필요할 것이다. 따라서 이러한 기능을 서버 쪽에서 서블릿이 처리해주면 상품 할인 가격 표시처럼 웹 페이지에서 동적으로 변하는 정보를 효과적으로 다룰 수 있다.

또한 서블릿은 다음과 같은 특징이 있다.

  1. 서버쪽에서 실행되면서 기능을 수행한다.
  2. 기존의 정적인 웹 프로그램의 문제점을 보완하여 동적인 여러 가지 기능을 제공한다.
  3. 스레드 방식으로 실행된다.
  4. 자바로 만들어져 자바의 특징(객체 지향)을 가진다.
  5. 컨테이너에서 실행된다.
  6. 컨테이너 종류에 상관없이 실행된다.(플랫폼 독립적)
  7. 보안 기능을 적용하기 쉽다.
  8. 웹 브라우저에서 요청 시 기능을 수행한다.

3. 서블릿 컨테이너

서블릿 컨테이너는 서버에 생성한 서블릿들이 스스로 작동하는 것이 아닌, 서블릿을 관리해주는 것이 필요한데 서블릿 컨테이너가 이 역할을 한다. 주요 역할은 클라이언트의 요청(Request)를 받고, 응답(Response)할 수 있게 웹 서버와 소켓을 만들어서 통신한다.

대표적으로 무료 서비스인 Apache Tomcat이 있다. 톰캣은 웹 서버와 소켓을 만들어서 통신하며, JSP와 Servlet이 작동할 수 있는 환경을 제공한다.

 

4. 서블릿 컨테이너의 역할 및 특징

서블릿 컨테이너의 역할은 들어온 요청을 올바른 서블릿에 전달하여 처리되도록 하고 JVM이 해당 요청을 처리한 후 생성된 결괄르 올바른 장소에 동적으로 반환해주는 것이다.

웹 서버와 서블릿들이 상호작용할 수 있게 해주는 서블릿 컨테이너는 다음과 같은 특징을 가지고 있다.

  1. 웹 서버와의 통신
    • 서블릿 컨테이너는 서블릿과 웹 서버가 통신할 수 있게 하고, 소켓을 만들고 listen, accept 등을 API로 제공한다.
  2. 서블릿 생명주기 관리
    1. 서블릿 클래스를 로딩하여 인스턴스화
    2. 초기화 메소드 호출
    3. 요청이 들어오면 적절한 서블릿 메소드를 호출
    4. 서블릿 소멸 시 Garbage Collection을 진행
  3. 멀티쓰레드 지원 및 관리
    • 서블릿 컨테이너는 요청이 올 때마다 새로운 자바 쓰레드를 생성
    • HTTP 서비스 메서드를 실행하고 나면, 쓰레드는 자동으로 소멸됨
    • 원래는 쓰레드 관리가 필요하나, 서버가 다중 쓰레드를 생성 및 운영해주기때문에 쓰레드의 안정성에 대해 걱정할 필요가 없음
  4. 선언적인 보안관리
    • 서블릿 컨테이너를 이용하게 되면 개발자는 보안에 관련된 내용을 서블릿 또는 자바 클래스에 구현해놓지 않아도 된다.
    • 일반적으로 보안관리는 XML 배포 서술자에 기록하기때문에 보안에 대해 수정할 사항이 생기면 자바 소스 코드를 수정해서 다시 컴파일하지 않아도 보안관리가 가능하다.
728x90