Servlet과 Servlet Container

Hansu Kim·2022년 3월 4일
0

Spring MVC

목록 보기
1/6

Web Application Server의 동작

WAS는 Request 발생을 처리하기 위해, 실질적으로 아래의 과정을 수행한다.

  1. 설정된 Socket의 TCP/IP 연결 대기

  2. HTTP Request 수신시 Parsing하여 읽음

    • POST방식인지?, URL이 /save 인지?
  3. Content-Type 확인

  4. Body 내용 파싱하여 원하는 항목 추출 후 저장

  5. 비지니스 로직 실행

  6. HTTP Response 메시지 생성

    • HTTP 시작 라인, Header 생성
    • Message Body에 HTML 생성하여 입력
  7. TCP/IP에 응답 전달, 소켓 종료

위의 과정에서 의미있는 로직은 5번 '비지니스 로직 실행' 뿐이며, 나머지는 일련의 반복적인 과정이다.

Servlet 사용하는 이유

WAS를 A to Z 구현한다고 하면, 위에서 설명한 7개 과정을 모두 코딩해야한다. 하지만 Servlet을 통해 5번 '비지니스 로직 수행' 과정을 제외한 나머지 과정을 Servlet을 통해자동화할 수 있으며, 이를 통해 개발 생산성을 높일 수 있다.

Spring에서의 Servlet

@WebServlet(name="orderServlet", urlPatterns="/order")
public class OrderServlcet extends HttpServlet {

	@Override
    protected void service(HttpServletRequest request, HttpServletResponse response){
    //로직 구현
    }
}

Spring에서는 위와 같이 @WebServlet을 통해 HTTP 메시지 처리/생성을 위한 과정들을 자동화하고, service 함수만을 구현하여 비지니스 로직 처리에 집중할 수 있다.

Spring @WebServlet의 특징

  1. urlPatterns(/order)의 URL이 호출되면 Servlet 코드가 실행
  2. HttpServletRequest로 요청 정보를 사용하고, HttpServletResponse로 응답 메시지를 편리하게 만들 수 있다.

Spring에서의 Servlet을 통한 HttpRequest 처리 과정

  1. WAS에 Http URL 요청 발생
  2. WAS는 HTTP Request 메시지를 기반으로 HttpServletRequest, HttpServletResponse 객체 생성
  3. WAS는 url pattern과 일치하는 서블릿 객체 생성
  4. 생성된 Servlet 객체에 HttpServletRequest 객체와 HttpServletResponse 객체를 넘겨주고 Servlet에 정의된 비지니스 로직 처리
  5. HttpServletResponse 객체를 사용하여 HTTP Response 메시지 생성/응답

Servlet Container

Servlet 기능을 지원하는 WAS를 Servlet Container라 부른다.

Servlet Container의 기능

  1. Servlet 객체의 생명주기 관리 (생성/초기화/호출/종료)
  2. Servlet 객체를 싱글톤으로 관리
    • 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용
    • 싱글톤의 중요한 문제인 공유변수 사용 주의할 것
  3. 동시 요청을 위한 멀티 쓰레드 처리 기능 지원
    • WAS는 Request별로 Thread Pool의 쓰레드들을 가져와 사용하지만, 서블릿은 싱글톤이므로 병목현상을 주의해야한다.

Thread Pool의 적정 숫자를 찾는법

로직 복잡도, 컴퓨팅 리소스에 따라 모두 다르며, 각종 툴을 통해 성능 테스트를 수행해야 한다. 보통 프로그램 실행시 CPU를 최소 50퍼정도는 사용하도록 튜닝해야한다.
튜닝 툴로는 Apache ab, Jmeter, nGrinder 등이 있다.

0개의 댓글