ABOUT ME

Today
Yesterday
Total
  • [Spring] Spring MVC - 서블릿
    Study/Spring 2025. 4. 17. 20:56

    서블릿

    • HTTP 요청을 수신하고 데이터를 응답하는 역할 수행 (HTTP 요청/응답을 위한 처리를 대신 수행하는 것)
    • 특징
      • urlPatterns의 URL이 호출되면 서블릿 코드가 실행
      • HttpServletRequest, HttpServletResponse 생성

     

    HTTP 요청, 응답 흐름

    • HTTP 요청 시 WAS는 Request와 Response 객체를 새로 만들어서 서블릿 컨테이너 내 서블릿 객체를 호출함
    • 개발자는 Request 객체에서 HTTP 요청 정보를 꺼내서 사용
    • 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력
    • WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성함

     

    서블릿 컨테이너

    • 서블릿 컨테이너 덕분에 서블릿 객체 생성 및 관리를 개발자가 수행하지 않아도 됨
    • Tomcat 처럼 서블릿을 지원하는 WAS를 ‘서블릿 컨테이너’라고 함
    • 서블릿 컨테이너는 서블릿 객체 생성, 초기화, 호출, 종료하는 생명주기를 관리
    • 서블릿 객체는 싱글톤으로 관리
      • 요청이 올 때마다 계속 서블릿 객체를 생성하는 것은 비효율적임
        • *Request, Response는 요청마다 생성하는게 맞음
      • 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용
      • 모든 요청은 동일한 서블릿 객체에 접근함 (공유 변수 사용 주의)
      • 서블릿 컨테이너 종료 시 함께 종료됨
    • 동시 요청을 위한 멀티 스레드 처리를 지원

     

    동시 요청 - 멀티 스레드

    스레드 풀

    • WAS는 스레드 풀을 생성해 요청을 동시에 여러 개 처리함 (요청을 수행하는 것은 스레드)
    • 특징
      • 필요한 스레드를 스레드 풀에 보관하고 관리
      • 스레드 풀에 생성 가능한 스레드의 최대치를 관리함 (톰캣은 최대 200개 기본 설정)
    • 사용
      • 요청이 들어오면, 이미 생성되어 있는 스레드를 스레드 풀에서 꺼내 사용함
      • 사용을 종료하면 스레드 풀에 해당 스레드를 반납함
      • 최대 스레드가 모두 사용중이어서 스레드 풀에 스레드가 없으면?
        • 기다리는 요청을 거절하거나 특정 숫자만큼만 대기하도록 설정할 수 있음
    • 장점
      • 스레드가 이미 생성되어 있으므로, 스레드를 생성하고 종료하는 CPU 비용이 절약되고, 응답 시간이 빠름
      • 생성 가능한 스레드의 최대치가 있으므로 너무 많은 요청이 들어와도 기존 요청은 안전하게 처리할 수 있음
    • 실무 팁
      • WAS의 주요 튜닝 포인트는 최대 스레드(max thread) 수
        • 너무 낮게 설정하면?
          • 동시 요청이 많으면, 서버 리소스는 여유롭지만, 클라이언트는 금방 응답 지연 상태가 됨
        • 너무 높게 설정하면?
          • 동시 요청이 많으면, CPU 및 메모리 리소스 임계점 초과로 서버 다운될 수 있음
        • 어플리케이션의 로직의 복잡도, CPU, 메모리, IO 리소스 상황에 따라 모두 다름

     

    WAS의 멀티 스레드 지원

    • 멀티 스레드에 대한 부분은 WAS가 처리
      • 개발자가 멀티 스레드 관련 코드를 신경쓰지 않아도 됨
    • 멀티 스레드 환경이므로 싱글톤 객체(서블릿, 스프링 빈)는 thread-safe 하도록 주의해서 사용

     

    참고

    댓글

Designed by Tistory.