서블릿과 서블릿 컨테이너

mangez_js·2024년 11월 28일

Study

목록 보기
15/47

서블릿(Servlet)이란?

Java 언어로 작성된 웹 애플리케이션에서 HTTP 요청을 처리하고 HTTP 응답을 생성하는 서버 측 컴포넌트

특징 및 역할

  • 동적 컨텐츠 제공
    ∘ 정적인 HTML 파일과 달리 사용자 요청에 따라 동적인 데이터를 생성하고 반환합니다.
  • 요청 및 응답 처리
    ∘ 클라이언트(주로 브라우저)로부터 HTTP 요청을 받고, 이를 처리한 후 응답을 생성합니다.
  • 자바 코드로 작성
    ∘ HTML뿐 아니라 비즈니스 로직을 Java 코드로 구현할 수 있습니다.
  • 생명주기 관리
    ∘ 서블릿은 특정 생명주기 메서드를 가집니다.
    init() : 서블릿 초기화
    service() : 클라이언트 요청 처리
    destroy() : 서블릿 종료

동작 흐름

클라이언트가 Web 서버에 요청하면 웹 서버는 그 요청을 톰캣과 같은 WAS에 위임한다.
그러면 WAS는 각 요청에 해당하는 서블릿을 실행한다. 그리고 서블릿은 요청에 대한 기능을 수행한 후 결과를 반환하여 클라이언트에 전송한다.
1. 클라이언트가 URL 요청 (ex.localhost:8080/hello 입력)
2. 서블릿 컨테이너는 HttpServletRequest, HttpServletResponse 객체 생성
3. Web.xml이 어느 서블릿에 대해 요청한 것인지 탐색 (ex.helloServlet을 찾는다)
4. 해당하는 서블릿에서 service() 메소드 호출
5. doGet() 또는 doPost() 호출
6. 동적 페이지 생성 후 HttpServletResponse 객체에 응답 전송
7. HttpServletRequest, HttpServletResponse 객체 소멸

생명주기

  • 클라이언트 요청이 들어오면 컨테이너는 서블릿이 메모리에 있는지 확인한다
    ∘ 메모리에 없다면 init() 메소드를 호출하여 생성
  • 클라이언트 요청에 따라서 service() 메소드를 통해 요청에 대한 응답이 doGet(), doPost()로 분기
    ∘ 이때 HttpServletRequest, HttpServletResponse에 의해 request, response 객체가 제공된다.
  • 컨테이너가 서블릿에 종료 요청을 하면 destroy() 메소드가 호출된다.
    ∘ 종료시 처리해야 하는 작업은 destroy() 메소드를 오버라이딩하여 구현하면 된다.

서블릿 컨테이너란?

서블릿의 실행 환경을 제공하는 소프트웨어 컴포넌트
일반적으로 애플리케이션 서버(Web Application Server)라고 한다.

특징

  • 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리한다.
  • 서블릿 객체는 싱글톤으로 관리된다.
    ∘ 싱글톤이 아니라면 같은 구현체를 사용한다해도, request(쓰레드)가 다르다면 하나씩 구현체가 생기게 되어서 싱글톤으로 관리된다.
  • 동시 요청을 위한 멀티 쓰레드 처리 지원

역할

  • 서블릿 관리
    ∘ 서블릿의 생명주기(init, service, destroy)를 관리합니다.

  • HTTP 요청 및 응답 처리
    ∘ 클라이언트로부터 HTTP 요청을 수신하고 적절한 서블릿으로 전달한 뒤, 서블릿의 응답을 클라이언트로 반환합니다.

  • 멀티스레드 처리
    ∘ 요청마다 새로운 스레드를 생성하거나 풀링된 스레드를 재사용해 병렬 처리 성능을 제공합니다.

  • 자원 관리
    ∘ 서블릿에서 사용하는 리소스(데이터베이스 연결, 설정 파일 등)를 관리합니다.

  • 보안
    ∘ 요청 인증 및 권한 부여와 같은 보안 기능을 제공합니다.

  • 데이터 변환
    ∘ 요청 데이터를 서블릿이 이해할 수 있는 객체(HttpServletRequest, HttpServletResponse)로 변환합니다.

    쓰레드란?

  • 애플리케이션 코드를 하나하나 순차적으로 실행하는 것

  • 자바 메인 메서드를 처음 실행하면 main 이라는 이름의 쓰레드가 실행

  • 쓰레드가 없다면 자바 애플리케이션 실행이 불가능

  • 쓰레드는 한 번에 하나의 코드 라인만 수행

  • 동시 처리가 필요하면 쓰레드를 추가로 생성

0개의 댓글