Servlet...

Yangray·2021년 10월 4일

HTTP

목록 보기
4/4

Web Server / Web Application Server

Web Server

  • HTTP 기반

  • 정적 리소스 제공(HTML, CSS, 이미지, 영상, JS 등)
    예) NGINX, APACHE...

    Web Application Server(WAS)

  • HTTP 기반

  • 웹서버 기반 정적 리소스 기능 + 프로그램 코드를 실행해 애플리케이션 로직 수행
    예) 동적 HTML , HTTP API, 서블릿, JSP, SPring MVC 등...

    웹 시스템 구성

  • was,DB만으로 시스템 구성 가능(was는 정적 리소스, 애플리케이션 로직 모두 제공 가능)

  • 하지만 was가 너무 많은 역할을 담당하게 되어 서버 과부하 우려 된다.

  • was가 장애시 오류 화면도 노출 불가능 해짐

  • 따라서 정적 리소스는 웹서버가 처리

  • 애플리케이션 로직이나 동적인 처리가 필요하면 was에 요청을 위임한다.

  • was는 중요한 애플리케이션 로직 처리를 전담하게 되어 서버 과부하 우려를 해결할 수 있다.

서블릿

특징

  • urlPatterns의 URL이 호출되면 서블릿 코드가 실행
  • HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
  • HTTP 응답 정봅를 편리하게 제공할 수 있는 HttpServletResponse
  • 이로 인해 HTTP 스펙을 매우 편리하게 사용할 수 있게 된다.

서블릿 컨테이너

  • 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 한다.
  • 서블릿 컨테이너는 서블릿 객체 생명주기를 관리한다.
  • 서블릿 객체는 싱글톤으로 관리한다.
    그 이유는 고객의 요청이 올 때 마다 객체를 계속 생성하는 것은 상당히 비효율적이기 때문이다 따라서 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용하는 방식으로 관리한다.
  • 서블릿 컨테이너는 종료시 서블릿 객체도 함께 종료된다.
  • 동시요청 멀티쓰레드를 지원한다.

동시요청 - 멀티쓰레드

쓰레드

  • 애플리케이션 코드를 하나하난 순차적으로 실행하는 것은 쓰레드이다.
  • 쓰레드가 없다면 애플리케이션 실행이 불가능하다.
  • 쓰레드는 한번에 하나의 코드 라인만 수행한다.
  • 동시 처리가 필요하면 쓰레드를 추가로 생성한다.
  • 다중 요청 시 쓰레드 하나 사용했을때 요청의 처리가 지연이 되어 뒤에 들어오는 요청들도 지연이 되는 문제가 발생 할 수 있다.

요청 마다 쓰레드 생성

  • 장점
    동시에 요청을 처리할 수 있게된다.
    CPU나 메모리등 리소스가 허용할 때 까지 처리가 가능하다.
    하나의 쓰레드가 지연이 되어도, 나머지 쓰레드는 정상 동작한다.

  • 단점
    고객의 요청이 올 때 마다 쓰레드를 생성하면, 응답 속도가 늦어진다.
    쓰레드는 컨텍스트 스위칭 비용이 발생하고 비용은 매우 비싸다.
    쓰레드 생성에 제한이 없어 고객 요청이 너무 많이 오면 CPU나 메모리의 임계점을 넘게 되어 서버가 다운될 수 있다.

쓰레드 풀

요청 마다 쓰레드 생성의 단점을 보완

  • 필요한 쓰레드를 쓰레드 풀에 보관하고 관리한다.
  • 쓰레드 풀에 생성 가능한 쓰레드의 최대치를 관리한다.(톰캣은 최대 200개 기본설정(변경 가능)
  • 쓰레드가 필요하면, 이미 생성되어 있는 쓰레드를 쓰레드 풀에서 꺼내서 사용한다.
  • 사용을 종료하면 쓰레드 풀에 해당 쓰레드를 반납한다.
  • 최대 쓰레드가 모두 사용중이어서 쓰레드 풀에 없다면????
    기다리는 요청을 거절하거나 특정 숫자만큼만 대기하도록 설정할 수 있다.
  • 쓰레드가 미리 생성되어 있으므로, 쓰레드를 생성하고 종료하는 리소스가 절약이 되고, 응답시간도 빠른 장점이 있음
  • 너무 많은 요청이 들어와도 기존 요청들을 안전하게 처리할 수 있다.

WAS의 멀티 쓰레드 지원

멀티 쓰레드에 대한 부분은 WAS가 처리한다.
따라서 개발자가 멀티 쓰레드 관련 코드를 신경쓰기 않아도 되어 마치 싱글 쓰레드 프로그래밍 하듯 편리하게 소스 코드를 개발할 수 있게 된다. 다만 멀티 쓰레드 환경이므로 싱글톤 객체(서블릿, 스프링 빈)는 주의해서 사용 해야한다.

profile
시작은 미약하나 그 끝은 창대하리라

0개의 댓글