웹 어플리케이션의 이해

Sin·2024년 7월 16일

Servlet

웹 어플리케이션 서버 직접 구현 프로세스

  • 서버 TCP/IP 연결 대기 , 소켓 연결
  • HTTP 요청 메세지를 파싱해서 읽기
  • HTTP 메소드 체크 (POST 방식, /save URL인지)
  • Content-Type 확인
  • HTTP 메세지 바디 내용 파싱
  • 비지니스 로직 실행
  • HTTP 응답 메세지 생성 시작
  • TCP/IP 응답 전달, 소켓 종료

서블릿 컨테이너

  • 톰켓처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함.
  • 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리
  • 서블릿 객체는 싱글톤으로 관리 (REQUEST, RESPONSE 는 요청마다 새로 생성)
  • JSP 도 서블릿으로 변환 되어서 사용
  • 동시 요청을 위한 멀티 쓰레드 처리 지원

Thread

  • 어플리케이션 코드를 하나하나 순차적으로 실행하는 것은 Thread.
  • 자바 메인 메서드를 처음 실행하면 Main 이라는 이름의 Thread 실행.
  • Thread가 없다면 자바 어플리케이션 실행이 불가능.
  • Thread는 한번에 하나의 코드 라인만 수행.
  • 동시 처리가 필요하면 Thread를 추가로 생성.

Thread 장점

  • 동시 요청을 처리할 수 있다.
  • 리소스(CPU, 메모리)가 허용할 때 까지 처리 가능
  • 하나의 Thread가 지연 되어도, 나머지 Thread는 정상 동작한다.

Thread 단점

  • Thread는 생성 비용이 매우 비싸다.
    (요청이 올때마다 Thread를 생성하면 응답 속도가 늦어 진다.)
  • Thread는 컨텍스트 스위칭 비용이 발생한다.
  • Thread 생성에 제한이 없다.
    (고객 요청이 너무 많이 오면, CPU, 메모리 임계점을 넘어 서버가 죽음)

Thread Pool

  • 특징
    • 필요한 Thread를 Thread Pool에 보관하고 관리한다.
    • Thread Pool에 생성 가능한 Thread의 최대치를 관리한다.(톸켓 최대 200개 기본 설정)
  • 사용
    • Thread가 필요하면, 이미 생성되어 있는 Thread를 Thread Pool 에서 꺼내서 사용한다.
    • 사용을 종료하면 Thread Pool 에 해당 Thread를 반납한다.
    • 최대 Thread가 모두 사용중이어서 Thread Pool에 Thread가 없으면 기다리는 요청은 거절하거나 특정 숫자만큼만 대기하도록 설정할 수 있다.
  • 장점
    • Thread 가 미리 생성되어 있으므로, Thread를 생성하고 종료하는 비용이 절약되고 응답 시간이 빠르다.
    • 생성 가능한 Thread의 최대치가 있으므로 너무 많은 요청이 들어와도 기존 요청은 안전하게 처리할 수 있다.
  • 실무 팁
    • WAS의 주요 튜닝 포인트는 최대 쓰레드(MAX Thread) 수이다.
    • 최대 Thread 를 너무 낮게 설정하면 동시 요청이 많을 시 클라이언트 금방 응답 지연
    • 최대 Thread 를 너무 높게 설정하면 CPU, 메모리 리소스 임계점 초과로 서버 다운
    • 장애 발생시 클라우드면 서버 늘리고 이후 튜닝 클라우드가 아니라면 그냥 튜닝 필요.


출처 김영한의 스프링 로드맵 - 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

0개의 댓글