서블릿

wangjh789·2022년 7월 30일
0

[Spring] 스프링-mvc-1

목록 보기
1/15

웹서버가 하는 일

Client가 /save url, post방식으로 username=kim&age=20 이라는 request를 보냈을 때

  • 서버 TCP/IP 연결 대기, 소켓 연결
  • HTTP 요청 메세지를 파싱해 읽기
  • POST방식, /save URL 인지
  • Content-type 확인
  • HTTP 메세지 바디 내용 파싱 (username, age 를 사용할 수 있게끔)
  • 저장 프로세스 실행
  • 비즈니스 로직 실행 (의미있는 비즈니스 로직)
    • 데이터베이스에 저장요청
  • HTTP 응답 메세지 생성 시작
    • HTTP 시작 라인 생성
    • Header 생성
    • 메세지 바디에 HTML 생성에서 입력
  • TCP/IP 응답 전달, 소켓 종료

서블릿이 비즈니스 로직을 제외한 모든 일을 자동으로 해준다.

urlPatterns 가 호출되면 서블릿 코드가 실행됨
HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse

서블릿 도입 후

HTTP 요청 시

  • WAS는 Request, Response 객체를 새로 만들어 서블릿 객체를 호출
  • 개발자는 Request에서 HTTP 요청 정보를 꺼내서 사용
  • 개발자는 Response HTTP 응답 정보를 입력
  • WAS는 Response 객체에 답겨있는 내용으로 HTTP 응답 정보를 생성

서블릿 컨테이너

  • 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 한다.
  • 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리
  • 서블릿 객체는 싱글톤으로 관리
    • 최초 로딩 시점에 미리 만들어두고 재활용
  • JSP 도 서블릿으로 변환 되어 사용
  • 동시 요청을 위한 멀티 쓰레드 처리 지원

동시요청 - 멀티 쓰레드

하나의 요청은 하나의 쓰레드
요청이 들어오면 WAS(서블릿 컨테이너, 톰캣)가 하나의 쓰레드를 할당하고 알맞은 서블릿을 호출한다.

다중요청에 쓰레드 하나만 사용한다면
요청1이 들어와서 쓰레드1이 할당되고 서블릿을 호출했는데 처리가 지연된다.
이때 요청2가 들어오면 요청1의 지연때문에 결국 두 요청 다 죽어버린다.
그렇기 때문에 요청마다 쓰레드를 생성해 독립적으로 수행된다.

멀티 쓰레드 단점

  • 쓰레드 생성 비용이 비싸다.
  • 컨텍스트 스위칭 비용이 발생한다.
  • 쓰레드 생성에 제한이 없어 요청이 몰릴 때 서버가 죽을 수 있다.

쓰레드 풀

대부분의 WAS는 쓰레드 풀을 만들어 일정 수의 쓰레드를 미리 만들어 놓고 요청이 왔을 때 쓰레드를 할당하고 요청이 완료되면 다시 쓰레드 풀에 반납한다.
요청이 들어왔을 때 쓰레드 풀에 놀고 있는 쓰레드가 없으면 대기하거나 거절할 수 있다.
-> 기존요청은 안전하게 처리 할 수 있다.

멀티 쓰레드 환경이므로 싱글톤 객체(서블릿, 스프링 빈)은 주의해서 사용해야 한다.

profile
기록

0개의 댓글