[웹 스터디]서블릿/서블릿 컨테이너/서블릿 엔진

박준수·2022년 11월 21일
0

[웹 스터디]

목록 보기
5/19

웹 서버와 WAS

웹 서버 : HTTP 프로토콜을 기반으로, 클라이언트의 요청을 서비스하는 기능을 담당

  • 요청에 맞게 2가지 기능 중 선택해서 수행
    • 정적 컨테츠 제공 : WAS를 거치지 않고 바로 제공
    • 동적 컨텐츠 제공을 위한 요청 전달 : 클라이언트 요청을 WAS에 보내고, WAS에서 처리한 결과를 클라이언트에게 전달
  • 웹 서버 종류 : Apache, Ngnix 등

WAS(Web Application Server) : DB 조회 및 다양한 로직 처리 요구시 동적인 컨텐츠를 제공하기 위해 만들어진 App서버

  • HTTP를 통해 애플리케이션을 수행하는 미들웨어
  • WAS는 웹 컨테이너 혹은 서블릿 컨테이너라고도 불림
  • 역할 : 엡 서버 + 웹 컨테이너
  • 주요기능
    • 프로그램 실행 환경 및 DB 접속 기능 제공
    • 여러 트랜잭션 관리 기능
    • 업무 처리하는 비지니스 로직 수행
  • WAS 종류 : Tomcat등

서블릿

: 웹 서버가 동적인 페이지를 제공할 수 있도록 도와주는 애플리케이션

  • 일명 동적인 페이지를 생성하는 애플리케이션, CGI
  • CGI : 특별한 라이브러리나 도구를 의미하는 것은 아니고, 별도로 제작된 웹 서버와 프로그램 간의 교환 방식

특정

  • 클라이언트 요청에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트
  • HTML을 사용하여 요청에 응답
  • Java Thread를 이용하여 동작
  • MVC패턴에서 Controller로 이용
  • UDP보다 처리 속도가 느림
  • HTML 변경 시 Servlet을 재컴파일 해야하는 단점

동작 방식

  1. 클라이언트가 URL을 입력하면 HttpRequest가 Servlet Container로 전송(클라이언트 요청)
  2. HTTP 요청을 처리하기 위한 HttpServletRequest 객체, HttpServletRespond객체 생성
  3. web.xml을 기반으로 요청된 URL이 어느 서블릿 클래스에 대한 요청인지 찾음
  4. 찾은 서블릿 클래스가 서블릿 컨테이너에서 실행된 적 있는지 혹은 메모리에 생성된 인스턴스가 있는지 체크
    4.1. 처음 실행 : 인스턴스를 생성한 후 init()호출 -> 초기화 후 스레드 생성
    4.2. 이미 실행 : 기존 인스턴스에 스레드 생성(서블릿 인스턴스는 서블릿 컨테이너 당 하나만 존재)
  5. 각 스레드의 service() 호출 후 GET/POST 방식에 따라 doGet()/doPost() 호출
  6. 2.에서 생성된 HttpServletRequest객체와 HttpServletRespond객체를 인자로 전달
  7. doGet()/doPost() 로직에서 생성된 동적 웹 페이지 결과물을 HttpServletResponse 객체에 담김
  8. HttpServletResponse 객체를 서블릿 컨테이너에서 HTTP 형태로 바뀌어 웹 서버로 전송
  9. HttpServletRequest 객체와 HttpServletResponse 객체의 메모리 소멸 및 스레드 종료

서블릿 컨테이너/서블릿 엔진

서블릿 컨테이너 : 서블릿을 관리해주는 컨테이너

  • 서블릿을 만들었다고 스스로 작동한는 것X, 관리 필요
  • 서블릿이 어떠한 역할을 수행하는 정의서라면, 서블릿 컨테이너는 그 정의서를 수행한다고 볼 수 있음

서블릿 엔진 : 클라이언트의 요청(Request)을 받아 응답(Response)할 수 있게 웹 서버와 소켓으로 통신하며 JSP와 서블릿이 작동하는 환경 제공 (톰켓)

역할

  • 웹 서버와 통신 지원

    • 비지니스 요구사항에 따라 로직이 변경될 때마다 처음부터 끝까지 소켓 프로그래밍, HTTP파싱, 스레드 풀 관리 등 복잡한 과정을 생략할 수 있게하여, 개발자는 서블렛에 구현해야 할 비지니스 로직에 초점을 두게 도와줌
  • 서블릿 생명 주기 관리

    • 서블릿 클래스를 로딩하여 인스턴스화 후 초기화 및 요청이 들어오면 적절한 서블릿 메소드 호출
    • 서블릿이 생명을 다하면 GC(Garbage Collection)을 진행
  • 멀티 스레드 지원 및 관리

    • 요청이 들어올 때마다 자바 스레드 생성, HTTP 서비스 메소드를 실행하고 나면 스레드는 자동으로 죽게됨, 원래는 스레드를 관리 해야 하지만 서버가 다중 스레드를 생성 및 운영
    • 스레드 안정성
  • 선언적인 보안 관리

    • 보안 관련 내용을 서블릿 클래스/자바 클래스에 구현X
    • 보안 관리는 XML 배포 서술자에 모두 기록(보안 관련 수정할 일이 생겨도 자바 소스 코드를 수정하여 다시 컴파일 할 필요X)

참고 : 서블릿1//서블릿2

profile
방구석개발자

0개의 댓글