WAS, 서블릿 컨테이너

kmb·2023년 10월 5일
0

JSP/Servlet

목록 보기
1/1
post-thumbnail

자바 서블릿 (Java Servlet)

웹 어플리케이션을 위한 JAVA 클래스 구조를 가진 자바 서버 프로그램
서블릿은 WAS(Web Application Server)의 서블릿 컨테이너 안에서 동작한다.


웹서버(WS - Web Server)

HTTP 기반으로 동작 .
정적 리소스(파일), HTML, CSS, JS, 이미지, 영상 리소스 제공.

ex) Apache, Nginx


웹 애플리케이션 서버 (WAS - Web Application Server)

HTTP 기반으로 동작.
웹서버 기능을 포함하고 있다.
프로그램 코드를 실행해서 애플리케이션 로직 수행.
동적 HTML, HTTP API (JSON), 서블릿, JSP, 스프링 MVC 제공.

ex) Tomcat, Jetty

 
실제로는 WS 및 WAS 둘다 정적 리소스(파일) 제공할 수 있고, 애플리케이션 로직을 실행하는 기능도 포함하는데 Client - Web Server - WAS - DB 로 이루어진 웹 시스템 구성 관점에서

WAS가 2개의 기능을 전부 처리할 경우 서버에 과부화가 올 수 있으며 WAS에 장애가 나면 오류 화면 조차 제공하지 못하게 되므로 역할을 분리하여
WS는 주로 정적 리소스(파일) 제공하고, 애플리케이션 동적 처리가 필요할 경우 WAS에 요청을 위임한다.
WAS는 주로 서블릿 컨테이너 기능(애플리케이션 로직 실행)을 제공한다.

서블릿을 지원하는 WAS를 사용하면 1~9번 동작 과정중 7번 비지니스 로직을 제외한 나머지 과정을 자동으로 해준다.

1. 서버 TCP/IP 대기 및 소켓연결
2. HTTP 요청 메세지 파싱해서 읽기
3. 전송방식 및 URL 인지
4. Content Type 확인
5. HTTP Body 메세지 내용 파싱
6. 저장 프로세스 실행
7. 비지니스 로직 실행 및 데이터베이스에 접근 (사용자가 직접 코드로)
8. HTTP 응답 메세지 생성 시작
9. TCP/IP에 응답전달 및 소켓종료


서블릿 컨테이너

톰캣처럼 서블릿을 지원하는 WAS를 의미한다.
(정확하게는 WAS = Servlet + JSP + EJB컨테이너)

 

  • 서블릿 컨테이너 특징
  1. 서블릿 컨테이너는 서블릿 객체를 자동으로 생성, 초기화, 호출, 종료(destroy)하는 생명주기를 관리.
  2. 서블릿 객체는 싱글톤으로 관리 (최초 로딩시점에 서블릿 객체를 만들어두고 재활용)
  3. JSP도 서블릿으로 변환되어서 사용됨.
  4. 동시 요청을 위한 멀티 쓰레드 지원. (멀티쓰레드 환경이므로 싱글톤 객체인 서블릿, 스프링빈은 주의해서 사용해야 한다)

 
쓰레드 : application 코드를 하나하나 순차적으로 실행하는것. 자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행된다. 쓰레드는 한번에 하나의 코드라인만 수행한다.

 

서블릿 컨테이너 동작 방식

  1. 클라이언트의 HTTP Request를 서블릿 컨테이너(웹 컨테이너)에 보낸다.
  2. 서블릿 컨테이너(웹 컨테이너)는 HttpServletRequest, HttpServletResponse 두 객체를 생성한다.
  3. web.xml에서 사용자가 요청한 URL을 분석하여 어느 서블릿에 대한 요청인지 찾는다.
  4. 컨테이너는 해당되는 서블릿에서 service() 메서드를 호출하며, GET/POST 여부에 따라 doGet() 또는 doPost() 메서드가 호출된다.
  5. doGet()이나 doPost() 메서드는 동적인 페이지를 생성한 후 HttpServletResponse 객체에 응답을 보낸다.
  6. 응답이 완료되면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킨다.

 

출처

profile
꾸준하게

0개의 댓글